亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fasttexturedpolygonrenderer.java

?? Java games programing--很好的java游戲編程源碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package com.brackeen.javagamebook.graphics3D;

import java.awt.*;
import java.awt.image.*;
import java.util.HashMap;
import com.brackeen.javagamebook.math3D.*;
import com.brackeen.javagamebook.graphics3D.texture.*;

/**
    The FastTexturedPolygonRenderer is a PolygonRenderer that
    efficiently renders Textures.
*/
public class FastTexturedPolygonRenderer extends PolygonRenderer {

    public static final int SCALE_BITS = 12;
    public static final int SCALE = 1 << SCALE_BITS;

    public static final int INTERP_SIZE_BITS = 4;
    public static final int INTERP_SIZE = 1 << INTERP_SIZE_BITS;

    protected Vector3D a = new Vector3D();
    protected Vector3D b = new Vector3D();
    protected Vector3D c = new Vector3D();
    protected Vector3D viewPos = new Vector3D();
    protected BufferedImage doubleBuffer;
    protected short[] doubleBufferData;
    protected HashMap scanRenderers;

    public FastTexturedPolygonRenderer(Transform3D camera,
        ViewWindow viewWindow)
    {
        this(camera, viewWindow, true);
    }

    public FastTexturedPolygonRenderer(Transform3D camera,
        ViewWindow viewWindow, boolean clearViewEveryFrame)
    {
        super(camera, viewWindow, clearViewEveryFrame);
    }

    protected void init() {
        destPolygon = new TexturedPolygon3D();
        scanConverter = new ScanConverter(viewWindow);

        // create renders for each texture (HotSpot optimization)
        scanRenderers = new HashMap();
        scanRenderers.put(PowerOf2Texture.class,
            new PowerOf2TextureRenderer());
        scanRenderers.put(ShadedTexture.class,
            new ShadedTextureRenderer());
        scanRenderers.put(ShadedSurface.class,
            new ShadedSurfaceRenderer());
    }


    public void startFrame(Graphics2D g) {
        // initialize buffer
        if (doubleBuffer == null ||
            doubleBuffer.getWidth() != viewWindow.getWidth() ||
            doubleBuffer.getHeight() != viewWindow.getHeight())
        {
            doubleBuffer = new BufferedImage(
                viewWindow.getWidth(), viewWindow.getHeight(),
                BufferedImage.TYPE_USHORT_565_RGB);
            //doubleBuffer = g.getDeviceConfiguration().createCompatibleImage(
            //viewWindow.getWidth(), viewWindow.getHeight());

            DataBuffer dest =
                doubleBuffer.getRaster().getDataBuffer();
            doubleBufferData = ((DataBufferUShort)dest).getData();
        }
        // clear view
        if (clearViewEveryFrame) {
            for (int i=0; i<doubleBufferData.length; i++) {
                doubleBufferData[i] = 0;
            }
        }
    }

    public void endFrame(Graphics2D g) {
        // draw the double buffer onto the screen
        g.drawImage(doubleBuffer, viewWindow.getLeftOffset(),
            viewWindow.getTopOffset(), null);
    }

    protected void drawCurrentPolygon(Graphics2D g) {
        if (!(sourcePolygon instanceof TexturedPolygon3D)) {
            // not a textured polygon - return
            return;
        }
        TexturedPolygon3D poly = (TexturedPolygon3D)destPolygon;
        Texture texture = poly.getTexture();
        ScanRenderer scanRenderer = (ScanRenderer)
            scanRenderers.get(texture.getClass());
        scanRenderer.setTexture(texture);
        Rectangle3D textureBounds = poly.getTextureBounds();

        a.setToCrossProduct(textureBounds.getDirectionV(),
            textureBounds.getOrigin());
        b.setToCrossProduct(textureBounds.getOrigin(),
            textureBounds.getDirectionU());
        c.setToCrossProduct(textureBounds.getDirectionU(),
            textureBounds.getDirectionV());

        int y = scanConverter.getTopBoundary();
        viewPos.y = viewWindow.convertFromScreenYToViewY(y);
        viewPos.z = -viewWindow.getDistance();

        while (y<=scanConverter.getBottomBoundary()) {
            ScanConverter.Scan scan = scanConverter.getScan(y);

            if (scan.isValid()) {
                viewPos.x = viewWindow.
                    convertFromScreenXToViewX(scan.left);
                int offset = (y - viewWindow.getTopOffset()) *
                    viewWindow.getWidth() +
                    (scan.left - viewWindow.getLeftOffset());

                scanRenderer.render(offset, scan.left, scan.right);
            }
            y++;
            viewPos.y--;
        }
    }

    /**
        The ScanRenderer class is an abstract inner class of
        FastTexturedPolygonRenderer that provides an interface for
        rendering a horizontal scan line.
    */
    public abstract class ScanRenderer {

        protected Texture currentTexture;

        public void setTexture(Texture texture) {
            this.currentTexture = texture;
        }

        public abstract void render(int offset,
            int left, int right);

    }

    //================================================
    // FASTEST METHOD: no texture (for comparison)
    //================================================
    public class Method0 extends ScanRenderer {

        public void render(int offset, int left, int right) {
            for (int x=left; x<=right; x++) {
                doubleBufferData[offset++] = (short)0x0007;
            }
        }
    }


    //================================================
    // METHOD 1: access pixel buffers directly
    // and use textures sizes that are a power of 2
    //================================================
    public class Method1 extends ScanRenderer {

        public void render(int offset, int left, int right) {
            for (int x=left; x<=right; x++) {
                int tx = (int)(a.getDotProduct(viewPos) /
                    c.getDotProduct(viewPos));
                int ty = (int)(b.getDotProduct(viewPos) /
                    c.getDotProduct(viewPos));
                doubleBufferData[offset++] =
                    currentTexture.getColor(tx, ty);
                viewPos.x++;
            }
        }
    }


    //================================================
    // METHOD 2: avoid redundant calculations
    //================================================
    public class Method2 extends ScanRenderer {

        public void render(int offset, int left, int right) {
            float u = a.getDotProduct(viewPos);
            float v = b.getDotProduct(viewPos);
            float z = c.getDotProduct(viewPos);
            float du = a.x;
            float dv = b.x;
            float dz = c.x;
            for (int x=left; x<=right; x++) {
                doubleBufferData[offset++] =
                    currentTexture.getColor(
                    (int)(u/z), (int)(v/z));
                u+=du;
                v+=dv;
                z+=dz;
            }
        }
    }


    //================================================
    // METHOD 3: use ints instead of floats
    //================================================
    public class Method3 extends ScanRenderer {

        public void render(int offset, int left, int right) {
            int u = (int)(SCALE * a.getDotProduct(viewPos));
            int v = (int)(SCALE * b.getDotProduct(viewPos));
            int z = (int)(SCALE * c.getDotProduct(viewPos));
            int du = (int)(SCALE * a.x);
            int dv = (int)(SCALE * b.x);
            int dz = (int)(SCALE * c.x);
            for (int x=left; x<=right; x++) {
                doubleBufferData[offset++] =
                    currentTexture.getColor(u/z, v/z);
                u+=du;
                v+=dv;
                z+=dz;
            }
        }
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线看国产日韩| 欧美视频在线观看一区二区| 亚洲成精国产精品女| 亚洲摸摸操操av| 亚洲欧美偷拍卡通变态| 中文字幕在线视频一区| 国产精品家庭影院| 最新高清无码专区| 亚洲一区视频在线| 亚洲一二三区在线观看| 日韩精品色哟哟| 精品一区二区日韩| 国产不卡免费视频| 一本一道波多野结衣一区二区| 99精品一区二区| 精品视频免费看| 日韩欧美在线123| 久久嫩草精品久久久精品| 国产日韩欧美激情| 亚洲欧美日韩电影| 婷婷久久综合九色综合绿巨人| 日本色综合中文字幕| 国产毛片精品国产一区二区三区| 成人小视频在线| 欧洲色大大久久| 欧美大片拔萝卜| 亚洲女人****多毛耸耸8| 五月天欧美精品| 国产夫妻精品视频| 欧美日韩国产首页| 国产色91在线| 日韩国产成人精品| 99re6这里只有精品视频在线观看| 欧美三区在线观看| 国产精品欧美久久久久无广告 | 日韩成人伦理电影在线观看| 久久精品国产精品青草| 99综合电影在线视频| 在线电影一区二区三区| 国产精品九色蝌蚪自拍| 毛片av一区二区| 欧美色图激情小说| 国产精品高潮呻吟久久| 久久av老司机精品网站导航| 91久久精品一区二区三区| 精品国产乱码久久久久久老虎 | 一区二区三区在线视频观看58| 另类的小说在线视频另类成人小视频在线 | 麻豆国产91在线播放| eeuss鲁片一区二区三区| 91精品国产综合久久福利软件 | 欧美激情综合网| 免费在线成人网| 91成人网在线| 国产精品久久久久久久久动漫| 蜜臀久久99精品久久久久宅男| 99久久精品国产一区| 久久精品亚洲精品国产欧美| 秋霞午夜av一区二区三区| 在线一区二区三区四区五区| 欧美国产日韩亚洲一区| 久久国产精品99精品国产| 欧美日韩视频不卡| 亚洲电影在线免费观看| 在线视频欧美区| 一区二区三区四区国产精品| 91在线精品一区二区三区| 欧美国产乱子伦 | 欧美理论电影在线| 亚洲成av人片| 8x福利精品第一导航| 青青草国产精品亚洲专区无| 欧美乱熟臀69xxxxxx| 手机精品视频在线观看| 4438成人网| 婷婷六月综合亚洲| 日韩色在线观看| 国产一区二区福利视频| 国产欧美一区二区三区在线看蜜臀 | 一区二区三区资源| 欧美中文字幕不卡| 亚洲成国产人片在线观看| 欧美日韩精品欧美日韩精品| 日本在线不卡视频| 欧美精品一区二区三区在线播放 | 国产91丝袜在线播放| 国产日韩欧美在线一区| 成人av资源在线| 亚洲国产aⅴ成人精品无吗| 欧美日韩国产首页| 激情国产一区二区| 国产精品色呦呦| 欧美伊人久久大香线蕉综合69| 亚洲成人黄色小说| 精品国产凹凸成av人导航| 丁香婷婷综合色啪| 五月婷婷激情综合网| 久久先锋影音av| 一本到不卡免费一区二区| 亚洲r级在线视频| 国产欧美日韩在线观看| 91麻豆国产精品久久| 秋霞国产午夜精品免费视频| 亚洲国产高清不卡| 欧美美女视频在线观看| 福利电影一区二区| 婷婷丁香激情综合| 日本一区二区三区免费乱视频 | 精品久久久久av影院 | 亚洲国产精品人人做人人爽| 91精品国产综合久久国产大片| 国产91丝袜在线播放| 天天综合网 天天综合色| 国产欧美精品国产国产专区| 欧美另类变人与禽xxxxx| 成人免费福利片| 日韩精品免费视频人成| 国产精品二三区| 日韩精品中文字幕在线不卡尤物| 91视频www| 国产一本一道久久香蕉| 日本视频免费一区| 亚洲综合丁香婷婷六月香| 日本一区二区视频在线| 日韩免费看的电影| 欧美日本在线观看| 91精品91久久久中77777| 国产一区不卡视频| 狠狠色狠狠色综合日日91app| 亚洲国产精品久久久男人的天堂| 久久女同互慰一区二区三区| 欧美一区二区三区白人| 91丨porny丨首页| 成人一区二区视频| 国产在线精品一区二区三区不卡 | 色香蕉久久蜜桃| 国产**成人网毛片九色| 精品一区二区三区免费视频| 日本欧美在线观看| 亚洲午夜激情网站| 亚洲1区2区3区视频| 亚洲人成网站影音先锋播放| 国产精品美女久久久久aⅴ国产馆| 精品国产电影一区二区| 精品久久久久99| 日韩精品一区在线| 日韩精品一区二区三区在线观看 | 国产精品婷婷午夜在线观看| 久久综合久色欧美综合狠狠| 日韩精品最新网址| 亚洲精品一区二区三区蜜桃下载 | 精品理论电影在线观看| 欧美mv日韩mv亚洲| 精品国产一区二区国模嫣然| 欧美一区二区三区四区五区 | 久久精品72免费观看| 免费xxxx性欧美18vr| 久久99九九99精品| 国产一区二区主播在线| 国产大片一区二区| 成人午夜免费电影| 99精品视频一区二区三区| 91福利小视频| 日韩欧美国产高清| 一区二区三区精品久久久| 精品国产91九色蝌蚪| 精品国产免费人成电影在线观看四季| 久久久国产午夜精品| 亚洲国产精品高清| 欧美在线高清视频| 欧美剧情电影在线观看完整版免费励志电影| 欧美日韩一卡二卡| 欧美电影免费观看高清完整版在线| www国产成人免费观看视频 深夜成人网| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品成人免费| 亚洲va韩国va欧美va精品| 国产成人精品免费网站| 成人激情小说乱人伦| 91高清在线观看| 久久久久久久久久久久久久久99| 国产精品久久久久一区| 亚洲电影在线播放| 经典三级一区二区| 在线视频中文字幕一区二区| 日韩免费一区二区三区在线播放| 国产精品久久久久久久久免费丝袜| 亚洲成在人线免费| 国产高清亚洲一区| 欧美放荡的少妇| 欧美—级在线免费片| 视频一区欧美日韩| 成人av资源在线观看| 日韩一区二区在线观看视频| 欧美高清在线精品一区| 蜜臀av在线播放一区二区三区| 99在线精品免费| 久久香蕉国产线看观看99| 亚洲国产精品一区二区www| 成人一级黄色片|