亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产欧美一区二区在线观看| 国产一区二区三区在线观看免费| 天天做天天摸天天爽国产一区| 一本大道久久a久久精品综合| 美女脱光内衣内裤视频久久网站| 亚洲激情男女视频| 美女一区二区三区| 在线欧美一区二区| 久久综合狠狠综合久久综合88 | 亚洲日本va在线观看| 舔着乳尖日韩一区| 色婷婷激情一区二区三区| 久久精品人人做| 婷婷激情综合网| 92国产精品观看| 欧美精品一区二区三区在线播放 | 精品国产一区二区三区久久影院| 欧美伊人久久久久久久久影院| 91美女在线视频| 久久九九久久九九| 亚洲成人自拍偷拍| 91浏览器打开| 国产精品久久久久影院老司| 国产一区二区三区蝌蚪| 欧美一卡二卡在线观看| 天天色天天操综合| 在线观看日韩电影| 亚洲婷婷国产精品电影人久久| 亚洲三级在线看| 99在线精品视频| 日本久久电影网| 精品国产免费久久| 午夜精品成人在线视频| 91精品福利在线| 夜夜嗨av一区二区三区四季av| 亚洲乱码国产乱码精品精98午夜| 亚洲国产sm捆绑调教视频 | 中文字幕一区免费在线观看| 在线欧美日韩精品| 一区二区高清免费观看影视大全| 午夜久久久影院| 欧美日韩在线播| 一区二区三区成人在线视频| 在线观看欧美精品| 视频一区在线播放| 日韩一区二区免费在线电影| 日韩国产欧美在线视频| 日韩欧美久久一区| 国产激情视频一区二区在线观看| 一本一道综合狠狠老| 一区二区三区日韩精品视频| 色狠狠色狠狠综合| 亚洲电影第三页| 欧美tickling网站挠脚心| 韩国成人福利片在线播放| 欧美激情一区二区三区四区| 91婷婷韩国欧美一区二区| 亚洲激情欧美激情| 日韩一区二区三区视频在线| 国产自产高清不卡| 亚洲丝袜另类动漫二区| 欧美日韩精品专区| 激情另类小说区图片区视频区| 在线视频国内自拍亚洲视频| 免费人成黄页网站在线一区二区| 91日韩一区二区三区| 日韩专区欧美专区| 中文字幕av一区 二区| 欧洲一区在线观看| 激情成人综合网| 国产精品女同一区二区三区| 欧美在线观看禁18| 精彩视频一区二区三区| 成人欧美一区二区三区| 777色狠狠一区二区三区| 国产在线一区二区综合免费视频| 91精品国产手机| 成年人网站91| 人人狠狠综合久久亚洲| 国产精品久久久久久亚洲伦| 欧美精品日韩精品| 国产精华液一区二区三区| 亚洲大片免费看| 中文在线一区二区| 欧美成人免费网站| 欧美午夜一区二区| 成人av集中营| 韩国精品主播一区二区在线观看| 精品国产一区二区三区久久久蜜月| 午夜国产精品影院在线观看| 国产蜜臀97一区二区三区| 欧美日韩一级视频| av在线综合网| 九九在线精品视频| 午夜精品久久久久久久久| 亚洲欧美在线高清| 久久久www成人免费毛片麻豆| 国产精品影音先锋| 五月天中文字幕一区二区| 国产精品美女久久久久高潮| 精品免费视频一区二区| 制服丝袜亚洲网站| 欧美羞羞免费网站| 91麻豆蜜桃一区二区三区| 懂色av一区二区在线播放| 奇米色777欧美一区二区| 亚洲在线中文字幕| 亚洲精品成人在线| 亚洲女人的天堂| 亚洲色图视频网| 成人免费小视频| 国产精品激情偷乱一区二区∴| 色婷婷综合在线| 99re亚洲国产精品| 91在线视频在线| 91小宝寻花一区二区三区| av电影天堂一区二区在线观看| 亚洲黄一区二区三区| 欧美激情一区在线观看| 亚洲国产精品成人综合| 国产精品日日摸夜夜摸av| 国产欧美精品在线观看| 国产人伦精品一区二区| 欧美极品aⅴ影院| 日本一区二区免费在线观看视频| 欧美影视一区在线| 欧美性生活影院| 制服丝袜中文字幕亚洲| 日韩精品一区二区三区三区免费| 福利一区福利二区| 福利一区二区在线观看| 99久久国产综合精品麻豆| 在线视频国内自拍亚洲视频| 欧洲日韩一区二区三区| 欧美三级日韩三级| 日韩午夜三级在线| 国产日韩视频一区二区三区| 国产精品天干天干在观线| 成人欧美一区二区三区小说 | 91女厕偷拍女厕偷拍高清| 欧洲一区二区三区在线| 欧美一级xxx| 久久久精品日韩欧美| 亚洲视频一区二区在线| 日韩va欧美va亚洲va久久| 日本在线不卡一区| 成人在线视频一区二区| 色中色一区二区| 欧美一区二区三区的| 国产亚洲欧美一级| 亚洲一区二区三区在线| 激情综合色播激情啊| 色综合色综合色综合色综合色综合 | 亚洲国产激情av| 一区二区三区影院| 久久99精品国产麻豆婷婷洗澡| 亚洲美女视频在线| 麻豆精品一二三| 97超碰欧美中文字幕| 91精品国产91综合久久蜜臀| 欧美国产日韩在线观看| 午夜精品123| 成人黄色综合网站| 欧美zozozo| 亚洲午夜免费福利视频| 国产乱人伦精品一区二区在线观看| 欧美aaaaaa午夜精品| 成人午夜av电影| 日韩精品资源二区在线| 亚洲欧美激情视频在线观看一区二区三区 | 国产三级精品视频| 一区二区三区在线视频观看58| 亚洲欧洲av在线| 美女免费视频一区| 欧美在线免费视屏| 国产精品久久久一本精品| 激情伊人五月天久久综合| 欧美日韩成人综合天天影院| 自拍偷在线精品自拍偷无码专区| 亚洲视频一二三区| 国产精品一区在线| 精品国产成人系列| 亚洲大片精品永久免费| 色综合久久综合| 国产精品少妇自拍| 风间由美中文字幕在线看视频国产欧美 | 成人午夜在线视频| 精品久久久网站| 青青草国产精品97视觉盛宴| 在线看国产一区二区| 亚洲视频中文字幕| 99久久99久久精品国产片果冻| 99在线精品免费| 国产精品美女久久久久久2018| 国产精品美女一区二区在线观看| 亚洲视频狠狠干| 91麻豆精东视频| 国产农村妇女精品| 国产福利一区在线观看| 久久久夜色精品亚洲|