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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mesh.java

?? JAKE2用JAVA寫的queck2的3D游戲開發(fā)引擎
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/* * Mesh.java * Copyright (C) 2003 * * $Id: Mesh.java,v 1.12 2005/06/09 07:59:58 cawe Exp $ *//* Copyright (C) 1997-2001 Id Software, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */package jake2.render.fastjogl;import jake2.Defines;import jake2.client.VID;import jake2.client.entity_t;import jake2.qcommon.qfiles;import jake2.render.image_t;import jake2.util.Math3D;import jake2.util.Vec3Cache;import java.nio.FloatBuffer;import java.nio.IntBuffer;import net.java.games.jogl.GL;import net.java.games.jogl.util.BufferUtils;/** * Mesh *  * @author cwei */public abstract class Mesh extends Light {    // g_mesh.c: triangle model functions    /*     * =============================================================     *      * ALIAS MODELS     *      * =============================================================     */    static final int NUMVERTEXNORMALS = 162;    float[][] r_avertexnormals = Anorms.VERTEXNORMALS;    float[] shadevector = { 0, 0, 0 };    float[] shadelight = { 0, 0, 0 };    // precalculated dot products for quantized angles    static final int SHADEDOT_QUANT = 16;    float[][] r_avertexnormal_dots = Anorms.VERTEXNORMAL_DOTS;    float[] shadedots = r_avertexnormal_dots[0];    void GL_LerpVerts(int nverts, int[] ov, int[] v, float[] move, float[] frontv,            float[] backv) {        int ovv, vv;        FloatBuffer lerp = vertexArrayBuf;        //PMM -- added RF_SHELL_DOUBLE, RF_SHELL_HALF_DAM        if ((currententity.flags & (Defines.RF_SHELL_RED                | Defines.RF_SHELL_GREEN | Defines.RF_SHELL_BLUE                | Defines.RF_SHELL_DOUBLE | Defines.RF_SHELL_HALF_DAM)) != 0) {            float[] normal;			int j = 0;			for (int i=0 ; i < nverts; i++/* , v++, ov++, lerp+=4 */)			{				vv = v[i];				normal = r_avertexnormals[(vv >>> 24 ) & 0xFF];				ovv = ov[i];				lerp.put(j, move[0] + (ovv & 0xFF)* backv[0] + (vv & 0xFF) * frontv[0] + normal[0] * Defines.POWERSUIT_SCALE);				lerp.put(j + 1, move[1] + ((ovv >>> 8) & 0xFF) * backv[1] + ((vv >>> 8) & 0xFF) * frontv[1] + normal[1] * Defines.POWERSUIT_SCALE);				lerp.put(j + 2, move[2] + ((ovv >>> 16) & 0xFF) * backv[2] + ((vv >>> 16) & 0xFF) * frontv[2] + normal[2] * Defines.POWERSUIT_SCALE); 				j += 3;			}        } else {			int j = 0;			for (int i=0 ; i < nverts; i++/* , v++, ov++, lerp+=4 */)			{				ovv = ov[i];				vv = v[i];								lerp.put(j, move[0] + (ovv & 0xFF)* backv[0] + (vv & 0xFF)*frontv[0]);				lerp.put(j + 1, move[1] + ((ovv >>> 8) & 0xFF)* backv[1] + ((vv >>> 8) & 0xFF)*frontv[1]);				lerp.put(j + 2, move[2] + ((ovv >>> 16) & 0xFF)* backv[2] + ((vv >>> 16) & 0xFF)*frontv[2]);				j +=3;			}        }    }    FloatBuffer colorArrayBuf = BufferUtils            .newFloatBuffer(qfiles.MAX_VERTS * 4);    FloatBuffer vertexArrayBuf = BufferUtils            .newFloatBuffer(qfiles.MAX_VERTS * 3);    FloatBuffer textureArrayBuf = BufferUtils            .newFloatBuffer(qfiles.MAX_VERTS * 2);    boolean isFilled = false;    float[] tmpVec = { 0, 0, 0 };    float[][] vectors = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } // 3 mal vec3_t    };    /*     * ============= GL_DrawAliasFrameLerp     *      * interpolates between two frames and origins FIXME: batch lerp all     * vertexes =============     */    void GL_DrawAliasFrameLerp(qfiles.dmdl_t paliashdr, float backlerp) {        int count;        float alpha;        qfiles.daliasframe_t frame = paliashdr.aliasFrames[currententity.frame];        int[] verts = frame.verts;        qfiles.daliasframe_t oldframe = paliashdr.aliasFrames[currententity.oldframe];        int[] ov = oldframe.verts;        if ((currententity.flags & Defines.RF_TRANSLUCENT) != 0)            alpha = currententity.alpha;        else            alpha = 1.0f;        // PMM - added double shell        if ((currententity.flags & (Defines.RF_SHELL_RED                | Defines.RF_SHELL_GREEN | Defines.RF_SHELL_BLUE                | Defines.RF_SHELL_DOUBLE | Defines.RF_SHELL_HALF_DAM)) != 0)            gl.glDisable(GL.GL_TEXTURE_2D);        float frontlerp = 1.0f - backlerp;        float[] frontv = Vec3Cache.get(); // vec3_t        // move should be the delta back to the previous frame * backlerp        Math3D.VectorSubtract(currententity.oldorigin, currententity.origin,                frontv);        Math3D.AngleVectors(currententity.angles, vectors[0], vectors[1],                vectors[2]);        float[] move = Vec3Cache.get(); // vec3_t        move[0] = Math3D.DotProduct(frontv, vectors[0]); // forward        move[1] = -Math3D.DotProduct(frontv, vectors[1]); // left        move[2] = Math3D.DotProduct(frontv, vectors[2]); // up        Math3D.VectorAdd(move, oldframe.translate, move);        float[] backv = Vec3Cache.get(); // vec3_t        for (int i = 0; i < 3; i++) {            move[i] = backlerp * move[i] + frontlerp * frame.translate[i];            frontv[i] = frontlerp * frame.scale[i];            backv[i] = backlerp * oldframe.scale[i];        }        // ab hier wird optimiert        GL_LerpVerts(paliashdr.num_xyz, ov, verts, move, frontv, backv);                Vec3Cache.release(3); // frontv, move, backv        //gl.glEnableClientState( GL.GL_VERTEX_ARRAY );        gl.glVertexPointer(3, GL.GL_FLOAT, 0, vertexArrayBuf);        // PMM - added double damage shell        if ((currententity.flags & (Defines.RF_SHELL_RED                | Defines.RF_SHELL_GREEN | Defines.RF_SHELL_BLUE                | Defines.RF_SHELL_DOUBLE | Defines.RF_SHELL_HALF_DAM)) != 0) {            gl.glColor4f(shadelight[0], shadelight[1], shadelight[2], alpha);        } else {            gl.glEnableClientState(GL.GL_COLOR_ARRAY);            gl.glColorPointer(4, GL.GL_FLOAT, 0, colorArrayBuf);            //            // pre light everything            //            FloatBuffer color = colorArrayBuf;            int j = 0;            float l;            for (int i = 0; i < paliashdr.num_xyz; i++) {                l = shadedots[(verts[i] >>> 24 ) & 0xFF];                color.put(j, l * shadelight[0]);                color.put(j + 1, l * shadelight[1]);                color.put(j + 2, l * shadelight[2]);                color.put(j + 3, alpha);                j += 4;            }        }        gl.glClientActiveTextureARB(GL_TEXTURE0);        gl.glTexCoordPointer(2, GL.GL_FLOAT, 0, textureArrayBuf);        //gl.glEnableClientState( GL.GL_TEXTURE_COORD_ARRAY);        int pos = 0;        int[] counts = paliashdr.counts;        IntBuffer srcIndexBuf = null;        FloatBuffer dstTextureCoords = textureArrayBuf;        FloatBuffer srcTextureCoords = paliashdr.textureCoordBuf;        int dstIndex = 0;        int srcIndex = 0;        for (int j = 0; j < counts.length; j++) {            // get the vertex count and primitive type            count = counts[j];            if (count == 0)                break; // done            srcIndexBuf = paliashdr.indexElements[j];            int mode = GL.GL_TRIANGLE_STRIP;            if (count < 0) {                mode = GL.GL_TRIANGLE_FAN;                count = -count;            }            srcIndex = pos << 1;            for (int k = 0; k < count; k++) {                dstIndex = srcIndexBuf.get(k) << 1;                dstTextureCoords.put(dstIndex++, srcTextureCoords                        .get(srcIndex++));                dstTextureCoords                        .put(dstIndex, srcTextureCoords.get(srcIndex++));            }            gl.glDrawElements(mode, count, GL.GL_UNSIGNED_INT, srcIndexBuf);            pos += count;        }        // PMM - added double damage shell        if ((currententity.flags & (Defines.RF_SHELL_RED                | Defines.RF_SHELL_GREEN | Defines.RF_SHELL_BLUE                | Defines.RF_SHELL_DOUBLE | Defines.RF_SHELL_HALF_DAM)) != 0)            gl.glEnable(GL.GL_TEXTURE_2D);        gl.glDisableClientState(GL.GL_COLOR_ARRAY);    }    /*     * ============= GL_DrawAliasShadow =============     */    void GL_DrawAliasShadow(qfiles.dmdl_t paliashdr, int posenum) {        int[] order;        float height, lheight;        int count;        qfiles.daliasframe_t frame;        lheight = currententity.origin[2] - lightspot[2];        frame = paliashdr.aliasFrames[currententity.frame];        height = 0;        order = paliashdr.glCmds;        height = -lheight + 1.0f;        int orderIndex = 0;        int index = 0;        // TODO shadow drawing with vertex arrays        float[] point = Vec3Cache.get();        while (true) {            // get the vertex count and primitive type            count = order[orderIndex++];            if (count == 0)                break; // done            if (count < 0) {                count = -count;                gl.glBegin(GL.GL_TRIANGLE_FAN);            } else                gl.glBegin(GL.GL_TRIANGLE_STRIP);            do {                index = order[orderIndex + 2] * 3;                point[0] = vertexArrayBuf.get(index);                point[1] = vertexArrayBuf.get(index + 1);                point[2] = vertexArrayBuf.get(index + 2);                point[0] -= shadevector[0] * (point[2] + lheight);                point[1] -= shadevector[1] * (point[2] + lheight);                point[2] = height;                gl.glVertex3f(point[0], point[1], point[2]);                orderIndex += 3;            } while (--count != 0);            gl.glEnd();        }        Vec3Cache.release(); // point    }    /*     * * R_CullAliasModel     */    //	TODO sync with jogl renderer. hoz    boolean R_CullAliasModel(entity_t e) {        qfiles.dmdl_t paliashdr = (qfiles.dmdl_t) currentmodel.extradata;        if ((e.frame >= paliashdr.num_frames) || (e.frame < 0)) {            VID.Printf(Defines.PRINT_ALL, "R_CullAliasModel "                    + currentmodel.name + ": no such frame " + e.frame + '\n');            e.frame = 0;        }        if ((e.oldframe >= paliashdr.num_frames) || (e.oldframe < 0)) {            VID.Printf(Defines.PRINT_ALL, "R_CullAliasModel "                    + currentmodel.name + ": no such oldframe " + e.oldframe                    + '\n');            e.oldframe = 0;        }        qfiles.daliasframe_t pframe = paliashdr.aliasFrames[e.frame];        qfiles.daliasframe_t poldframe = paliashdr.aliasFrames[e.oldframe];        /*         * * compute axially aligned mins and maxs         */        float[] mins = Vec3Cache.get();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩午夜影院| 国产精品欧美久久久久一区二区| 中文字幕中文字幕一区| 精品亚洲国产成人av制服丝袜| 91久久精品网| 亚洲成人手机在线| 在线影院国内精品| 亚洲制服丝袜av| 欧美日精品一区视频| 亚洲最大成人网4388xx| 欧美伊人久久大香线蕉综合69| 亚洲伦在线观看| 在线观看日韩精品| 日韩激情一二三区| 日韩欧美黄色影院| 成人手机在线视频| 亚洲日本成人在线观看| 99re66热这里只有精品3直播 | 亚洲精选在线视频| 欧美影院午夜播放| 欧美aaaaaa午夜精品| 久久久久青草大香线综合精品| 不卡一区在线观看| 亚洲国产日日夜夜| 国产亚洲欧洲一区高清在线观看| 丁香亚洲综合激情啪啪综合| 亚洲激情自拍偷拍| 日韩精品专区在线影院观看| 丁香天五香天堂综合| 婷婷成人综合网| 国产拍欧美日韩视频二区| 欧美性生交片4| www.性欧美| 国产精品综合二区| 亚洲黄一区二区三区| 久久久久亚洲蜜桃| 欧美一区二区福利视频| 色综合天天综合狠狠| 国产一区二区不卡在线| 亚洲大型综合色站| 1024亚洲合集| 国产精品网站在线观看| 精品日韩欧美在线| 欧美剧情电影在线观看完整版免费励志电影 | 91最新地址在线播放| 精品在线播放免费| 秋霞电影网一区二区| 三级一区在线视频先锋| 亚洲一区在线观看免费观看电影高清| 国产日韩v精品一区二区| 日韩欧美卡一卡二| 亚洲精品在线网站| 久久久不卡网国产精品二区| 日韩天堂在线观看| 日韩精品一区在线观看| 精品国产一区二区三区不卡| 日韩欧美电影一二三| 精品国产1区2区3区| 日韩女同互慰一区二区| 久久综合九色综合久久久精品综合| 日韩视频在线一区二区| 久久精品视频一区二区| 综合久久久久久| 一区二区三区四区在线| 亚洲香蕉伊在人在线观| 日本午夜精品一区二区三区电影| 日本午夜一区二区| 国产iv一区二区三区| 欧美在线观看视频一区二区 | 国产一区二区精品在线观看| 粉嫩在线一区二区三区视频| 在线观看av一区二区| 欧美日韩一区二区三区不卡| 欧美日韩国产欧美日美国产精品| 精品久久久久99| 亚洲欧美一区二区久久| 日韩精品久久理论片| 成人动漫一区二区在线| 欧美精品v日韩精品v韩国精品v| 精品乱人伦小说| 天使萌一区二区三区免费观看| 国产精品主播直播| 欧洲中文字幕精品| 中文字幕国产一区二区| 男人操女人的视频在线观看欧美 | 国产精品一区免费在线观看| 欧美在线一区二区| 亚洲欧美一区二区视频| 久热成人在线视频| 欧美日韩一区二区三区免费看| 国产精品动漫网站| 亚洲精品视频自拍| 日本视频中文字幕一区二区三区| 国产福利91精品一区二区三区| 国产又黄又大久久| 九一九一国产精品| 一级中文字幕一区二区| 六月丁香综合在线视频| 欧美日韩久久久久久| 亚洲欧美激情一区二区| 99久久精品国产精品久久| 久久久不卡网国产精品二区| 麻豆精品在线播放| 555www色欧美视频| 日韩黄色片在线观看| 在线播放中文一区| 首页国产欧美久久| 91精品国产综合久久精品图片| 亚洲一线二线三线视频| 三级成人在线视频| 国产精品中文字幕日韩精品| 久久精子c满五个校花| 成人在线视频首页| 亚洲精品高清视频在线观看| 欧美日韩精品免费观看视频| 亚洲欧美日韩国产手机在线 | 欧美久久久一区| 国产精品亚洲专一区二区三区| 久久―日本道色综合久久| 国产精品 欧美精品| 国产精品理伦片| 欧美一区二区美女| av成人免费在线| 秋霞影院一区二区| 中文字幕制服丝袜成人av| 欧美在线你懂得| 国产99精品视频| 亚洲成年人网站在线观看| 精品粉嫩超白一线天av| 91网站在线播放| 国产在线精品免费av| 亚洲最新在线观看| 国产肉丝袜一区二区| 4438x亚洲最大成人网| 成人av在线看| 国产一区二区三区免费在线观看| 亚洲精品乱码久久久久久久久| 欧美电影免费观看高清完整版在线| zzijzzij亚洲日本少妇熟睡| 久久99精品久久久久久动态图| 亚洲午夜免费视频| 一区二区在线看| 日韩一区欧美一区| 久久色在线观看| 欧美成人精品3d动漫h| 欧美精品乱码久久久久久| 一本大道久久精品懂色aⅴ| 国产激情精品久久久第一区二区| 日本三级亚洲精品| 婷婷国产v国产偷v亚洲高清| 一区二区三区日韩欧美精品| 亚洲欧洲色图综合| 亚洲人成网站影音先锋播放| 国产精品无遮挡| 一区二区三区四区精品在线视频| 国产精品超碰97尤物18| 一区二区三区在线视频免费| 亚洲人成网站色在线观看| 亚洲国产精品视频| 麻豆传媒一区二区三区| 国产一区二区三区日韩| 国产99久久精品| 精品1区2区3区| 久久综合五月天婷婷伊人| 中文字幕久久午夜不卡| 一区二区三区四区乱视频| 日韩中文字幕1| 丁香婷婷深情五月亚洲| 欧美性xxxxx极品少妇| 欧美精品一区二区三区久久久| 国产视频一区在线播放| 亚洲一区电影777| 国产一区二区电影| 在线视频一区二区三| 337p日本欧洲亚洲大胆精品| 亚洲欧洲日产国码二区| 日韩福利视频导航| 91看片淫黄大片一级在线观看| 欧美顶级少妇做爰| 亚洲天堂中文字幕| 久久99精品国产.久久久久| 91亚洲精品乱码久久久久久蜜桃| 欧美精品777| 亚洲一二三四久久| 成人理论电影网| 久久综合色婷婷| 日本不卡视频在线| 欧美在线视频你懂得| 亚洲欧洲中文日韩久久av乱码| 久久99精品久久久久| 欧美高清激情brazzers| 亚洲视频一区二区在线观看| 成人福利视频网站| 国产欧美视频在线观看| 久久国产精品99久久人人澡| 91精品久久久久久久91蜜桃| 亚洲大片一区二区三区| 欧美午夜寂寞影院| 午夜不卡av免费| 欧美精品欧美精品系列|