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

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

?? renderer.java

?? NeHe用java與OpenGL結合教程源碼
?? JAVA
字號:
package demos.nehe.lesson47;import com.sun.opengl.util.BufferUtil;import demos.common.ResourceRetriever;import javax.media.opengl.DebugGL;import javax.media.opengl.GL;import javax.media.opengl.GLAutoDrawable;import javax.media.opengl.GLEventListener;import javax.media.opengl.glu.GLU;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.StringWriter;import java.nio.ByteBuffer;import java.nio.IntBuffer;class Renderer implements GLEventListener {    // User Defined Variables    private static final int SIZE = 64;    private static final float TWO_PI = (float) (Math.PI * 2);    private boolean vertexShaderSupported;    private boolean vertexShaderEnabled;    private int programObject;    private int waveAttrib;    private float[][][] mesh = new float[SIZE][SIZE][3];    private float wave_movement = 0.0f;    private GLU glu = new GLU();    public Renderer() {    }    public void toggleShader() {        if (vertexShaderSupported) {            vertexShaderEnabled = !vertexShaderEnabled;        }    }    public void init(GLAutoDrawable drawable) {        drawable.setGL(new DebugGL(drawable.getGL()));        GL gl = drawable.getGL();        String extensions = gl.glGetString(GL.GL_EXTENSIONS);        vertexShaderSupported = extensions.indexOf("GL_ARB_vertex_shader") != -1;        vertexShaderEnabled = true;        if (vertexShaderSupported) {            String shaderSource;            try {                BufferedReader shaderReader = new BufferedReader(                        new InputStreamReader(                                ResourceRetriever.getResourceAsStream(                                        "demos/data/shaders/wave.glsl"                                )                        )                );                StringWriter shaderWriter = new StringWriter();                String line = shaderReader.readLine();                while (line != null) {                    shaderWriter.write(line);                    shaderWriter.write("\n");                    line = shaderReader.readLine();                }                shaderSource = shaderWriter.getBuffer().toString();            } catch (IOException e) {                throw new RuntimeException(e);            }            if (shaderSource != null) {                int shader = gl.glCreateShaderObjectARB(GL.GL_VERTEX_SHADER_ARB);                gl.glShaderSourceARB(shader, 1, new String[]{shaderSource}, (int[]) null, 0);                gl.glCompileShaderARB(shader);                checkLogInfo(gl, shader);                programObject = gl.glCreateProgramObjectARB();                gl.glAttachObjectARB(programObject, shader);                gl.glLinkProgramARB(programObject);                gl.glValidateProgramARB(programObject);                checkLogInfo(gl, programObject);                waveAttrib = gl.glGetAttribLocationARB(programObject, "wave");            }        }        // Create Our Mesh        for (int x = 0; x < SIZE; x++) {            for (int z = 0; z < SIZE; z++) {                mesh[x][z][0] = (float) (SIZE / 2) - x;                        // We Want To Center Our Mesh Around The Origin                mesh[x][z][1] = 0.0f;                                        // Set The Y Values For All Points To 0                mesh[x][z][2] = (float) (SIZE / 2) - z;                        // We Want To Center Our Mesh Around The Origin            }        }        // Setup GL States        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);                        // Black Background        gl.glClearDepth(1.0f);                                        // Depth Buffer Setup        gl.glDepthFunc(GL.GL_LEQUAL);                                    // The Type Of Depth Testing (Less Or Equal)        gl.glEnable(GL.GL_DEPTH_TEST);                                    // Enable Depth Testing        gl.glShadeModel(GL.GL_SMOOTH);                                    // Select Smooth Shading        gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);            // Set Perspective Calculations To Most Accurate        gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_LINE);							// Draw Our Mesh In Wireframe Mode    }    public void display(GLAutoDrawable drawable) {        GL gl = drawable.getGL();        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);        // Clear Screen And Depth Buffer        gl.glLoadIdentity();                                            // Reset The Modelview Matrix        // Position The Camera To Look At Our Mesh From A Distance        glu.gluLookAt(0.0f, 25.0f, -45.0f, 0.0f, 0.0f, 0.0f, 0, 1, 0);        if (vertexShaderEnabled) {            gl.glUseProgramObjectARB(programObject);        }        // Start Drawing Our Mesh        gl.glColor3f(0.5f, 1f, 0.5f);        for (int x = 0; x < SIZE - 1; x++) {            // Draw A Triangle Strip For Each Column Of Our Mesh            gl.glBegin(GL.GL_TRIANGLE_STRIP);            for (int z = 0; z < SIZE - 1; z++) {                // Set The Wave Parameter Of Our Shader To The Incremented Wave Value From Our Main Program                if (vertexShaderEnabled) {                    gl.glVertexAttrib1f(waveAttrib, wave_movement);                }                gl.glVertex3f(mesh[x][z][0], mesh[x][z][1], mesh[x][z][2]);        // Draw Vertex                gl.glVertex3f(mesh[x + 1][z][0], mesh[x + 1][z][1], mesh[x + 1][z][2]);    // Draw Vertex                wave_movement += 0.00001f;                                    // Increment Our Wave Movement                if (wave_movement > TWO_PI) {                                // Prevent Crashing                    wave_movement = 0.0f;                }            }            gl.glEnd();        }        if (vertexShaderEnabled) {            gl.glUseProgramObjectARB(0);        }    }    public void reshape(GLAutoDrawable drawable,                        int xstart,                        int ystart,                        int width,                        int height) {        GL gl = drawable.getGL();        height = (height == 0) ? 1 : height;        gl.glViewport(0, 0, width, height);        gl.glMatrixMode(GL.GL_PROJECTION);        gl.glLoadIdentity();        glu.gluPerspective(45, (float) width / height, 1, 1000);        gl.glMatrixMode(GL.GL_MODELVIEW);        gl.glLoadIdentity();    }    public void displayChanged(GLAutoDrawable drawable,                               boolean modeChanged,                               boolean deviceChanged) {    }    private void checkLogInfo(GL gl, int obj) {        IntBuffer iVal = BufferUtil.newIntBuffer(1);        gl.glGetObjectParameterivARB(obj, GL.GL_OBJECT_INFO_LOG_LENGTH_ARB, iVal);        int length = iVal.get();        if (length <= 1) {            return;        }        ByteBuffer infoLog = BufferUtil.newByteBuffer(length);        iVal.flip();        gl.glGetInfoLogARB(obj, length, iVal, infoLog);        byte[] infoBytes = new byte[length];        infoLog.get(infoBytes);        System.out.println("GLSL Validation >> " + new String(infoBytes));    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆蜜桃一区二区三区| 丁香啪啪综合成人亚洲小说| 国产精品美女久久久久久久久| 日韩免费成人网| 精品99一区二区| 26uuu精品一区二区| 国产亚洲欧美中文| 国产精品久久久久久久久晋中| 国产午夜亚洲精品午夜鲁丝片| 亚洲国产精品二十页| 亚洲国产精品99久久久久久久久 | 日韩美女在线视频| 日韩精品一区二区三区视频| 26uuu另类欧美亚洲曰本| 日本一区二区三区国色天香| 国产色综合久久| 亚洲欧美一区二区三区极速播放| 亚洲国产视频一区| 精品在线播放午夜| 成人app在线| 欧美日韩国产成人在线免费| 欧美精品一区二区蜜臀亚洲| 中文字幕在线一区免费| 亚洲综合小说图片| 美女视频黄频大全不卡视频在线播放| 精品一区精品二区高清| 91在线精品一区二区三区| 欧美日韩在线直播| 国产欧美日本一区视频| 夜夜嗨av一区二区三区中文字幕 | 久久国产精品无码网站| 国产精品456露脸| 欧美天堂亚洲电影院在线播放| 91精品婷婷国产综合久久性色 | 捆绑变态av一区二区三区| 国产丶欧美丶日本不卡视频| 日本高清不卡在线观看| 精品国产网站在线观看| 亚洲最大色网站| 国产一区二区在线观看视频| 在线视频欧美精品| 日本一区二区视频在线| 日本免费新一区视频| www..com久久爱| 久久综合色一综合色88| 亚洲午夜免费电影| 99国产精品久久久久| 欧美大黄免费观看| 亚洲6080在线| 91在线视频免费91| 久久久美女艺术照精彩视频福利播放| 亚洲在线免费播放| 波多野结衣欧美| 日韩精品最新网址| 天堂久久一区二区三区| 色av综合在线| 一区二区中文视频| 丁香激情综合国产| 精品国产一区二区三区四区四 | 日韩精品三区四区| 欧美色中文字幕| 国产精品沙发午睡系列990531| 老色鬼精品视频在线观看播放| 欧美三级一区二区| 亚洲精品国产第一综合99久久| 成人免费的视频| 欧美激情资源网| 国产精品资源在线| 久久免费视频一区| 国产在线视视频有精品| 精品国产一区二区三区av性色| 青娱乐精品视频在线| 69堂成人精品免费视频| 日韩一区精品字幕| 91精品国模一区二区三区| 天堂在线一区二区| 91精品欧美福利在线观看| 日韩精品亚洲一区二区三区免费| 欧美肥胖老妇做爰| 日日夜夜免费精品| 欧美一级片在线观看| 久久精品理论片| 久久先锋影音av鲁色资源网| 国产麻豆91精品| 国产午夜久久久久| 91浏览器在线视频| 一区二区久久久久久| 3d动漫精品啪啪1区2区免费| 九九精品一区二区| 国产欧美视频一区二区三区| 成人h动漫精品一区二区 | 日韩精品影音先锋| 国产精品白丝jk黑袜喷水| 国产精品久久久久影院老司| 色婷婷av一区二区三区大白胸| 亚洲第一综合色| 精品国产免费一区二区三区香蕉 | 亚洲视频免费在线观看| 欧美三级中文字| 九九热在线视频观看这里只有精品| 久久亚洲一区二区三区四区| www.99精品| 日本在线播放一区二区三区| 久久午夜色播影院免费高清| 99国产精品久久久久| 免费美女久久99| 国产精品日日摸夜夜摸av| 欧美午夜理伦三级在线观看| 另类小说综合欧美亚洲| 亚洲婷婷在线视频| 日韩欧美国产三级电影视频| 91蜜桃网址入口| 国内成+人亚洲+欧美+综合在线| 综合分类小说区另类春色亚洲小说欧美 | 久久国产乱子精品免费女| 成人免费小视频| 精品国产污网站| 欧美色成人综合| av在线不卡观看免费观看| 蜜桃av噜噜一区二区三区小说| 中文字幕中文字幕在线一区| 日韩一区二区三区av| 91蜜桃免费观看视频| 国内外成人在线视频| 亚洲成av人**亚洲成av**| 国产精品电影院| 久久久亚洲精华液精华液精华液| 欧美熟乱第一页| 91美女视频网站| 国产精品99久久久久久似苏梦涵 | 色激情天天射综合网| 国产精品一区二区在线播放| 日日夜夜精品视频天天综合网| 中文字幕一区视频| 国产亚洲精品bt天堂精选| 日韩视频中午一区| 欧美日韩精品一区二区天天拍小说| 成人性生交大片免费看中文| 经典三级视频一区| 久久99精品一区二区三区| 日韩黄色片在线观看| 亚洲成人第一页| 亚洲妇女屁股眼交7| 亚洲另类在线一区| 亚洲人吸女人奶水| 1024国产精品| 亚洲欧美电影院| 日韩毛片一二三区| 亚洲欧洲制服丝袜| 亚洲精品视频一区| 樱桃视频在线观看一区| 亚洲精品你懂的| 一区二区三区日韩欧美| 一区二区三区中文字幕精品精品| 亚洲男人的天堂在线aⅴ视频 | 日韩精品久久久久久| 婷婷久久综合九色国产成人 | 久久九九99视频| 久久久91精品国产一区二区精品 | 日本va欧美va瓶| 美腿丝袜亚洲三区| 国内成+人亚洲+欧美+综合在线| 激情丁香综合五月| 国产不卡视频在线观看| 盗摄精品av一区二区三区| 成人丝袜视频网| 欧洲一区二区三区在线| 5566中文字幕一区二区电影| 欧美刺激午夜性久久久久久久 | aaa欧美日韩| 欧美中文字幕一二三区视频| 欧美高清视频不卡网| 精品欧美一区二区久久| 国产精品久久久久久亚洲伦| 亚洲最快最全在线视频| 麻豆精品在线观看| www.综合网.com| 欧美理论电影在线| 久久蜜桃av一区二区天堂| 亚洲欧美日韩电影| 美女性感视频久久| 国产宾馆实践打屁股91| 在线视频你懂得一区| 精品国产百合女同互慰| 亚洲丝袜精品丝袜在线| 日韩电影在线一区二区| 成人h动漫精品一区二区| 欧美日韩在线播放一区| 国产区在线观看成人精品| 亚洲一二三级电影| 国产成人精品综合在线观看 | 久久久精品免费网站| 亚洲精品国产无套在线观| 精彩视频一区二区三区| 91黄色小视频| 亚洲国产成人午夜在线一区 | 99久久精品免费看国产| 日韩一区二区在线观看视频| 国产精品高潮呻吟| 国内精品国产成人|