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

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

?? renderer.java

?? NeHe用java與OpenGL結合教程源碼
?? JAVA
字號:
package demos.nehe.lesson19;

import demos.common.TextureReader;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;

import java.io.IOException;

class Renderer implements GLEventListener {
    private static final int MAX_PARTICLES = 1000;

    private boolean rainbow = true;				// Rainbow Mode?

    private float slowdown = 2.0f;				// Slow Down Particles
    private boolean speedUp;
    private boolean slowDown;

    private float xspeed;						// Base X Speed (To Allow Keyboard Direction Of Tail)
    private boolean increaseXSpeed;
    private boolean decreaseXSpeed;

    private float yspeed;						// Base Y Speed (To Allow Keyboard Direction Of Tail)
    private boolean increaseYSpeed;
    private boolean decreaseYSpeed;

    private float zoomRate = -40.0f;				// Used To Zoom Out
    private boolean increaseParticleGrowSpeed;
    private boolean decreaseParticleGrowSpeed;

    private int col;						// Current Color Selection
    private int delay;						// Rainbow Effect Delay
    private int[] textures = new int[1];					// Storage For Our Particle Texture

    private boolean doPullLeft = false;
    private boolean doPullRight = false;
    private boolean doPullUp = false;
    private boolean doPullDown = false;
    private boolean doBurst = false;

    private GLU glu = new GLU();

    private static class Particle {
        boolean active;					// Active (Yes/No)
        float life;					// Particle Life
        float fade;					// Fade Speed
        float r;						// Red Value
        float g;						// Green Value
        float b;						// Blue Value
        float x;						// X Position
        float y;						// Y Position
        float z;						// Z Position
        float xi;						// X Direction
        float yi;						// Y Direction
        float zi;						// Z Direction
        float xg;						// X Gravity
        float yg;						// Y Gravity
        float zg;						// Z Gravity
    }

    private Particle[] particles = new Particle[1000];

    private float colors[][] =
            {
                {1.0f, 0.5f, 0.5f}, {1.0f, 0.75f, 0.5f}, {1.0f, 1.0f, 0.5f}, {0.75f, 1.0f, 0.5f},
                {0.5f, 1.0f, 0.5f}, {0.5f, 1.0f, 0.75f}, {0.5f, 1.0f, 1.0f}, {0.5f, 0.75f, 1.0f},
                {0.5f, 0.5f, 1.0f}, {0.75f, 0.5f, 1.0f}, {1.0f, 0.5f, 1.0f}, {1.0f, 0.5f, 0.75f}
            };

    public void increasePullDownwards(boolean pull) {
        doPullDown = pull;
    }

    public void increasePullUpwards(boolean pull) {
        doPullUp = pull;
    }

    public void increasePullLeft(boolean pull) {
        doPullLeft = pull;
    }

    public void increasePullRight(boolean pull) {
        doPullRight = pull;
    }

    public void createBurst() {
        doBurst = true;
    }

    public void slowDown(boolean slowDown) {
        this.slowDown = slowDown;
    }

    public void speedUp(boolean speedUp) {
        this.speedUp = speedUp;
    }

    public void decreaseParticleGrowSpeed(boolean decrease) {
        decreaseParticleGrowSpeed = decrease;
    }

    public void increaseParticleGrowSpeed(boolean increase) {
        increaseParticleGrowSpeed = increase;
    }

    public void toggleRainbowEffect() {
        rainbow = !rainbow;
    }

    public void increaseXSpeed(boolean increase) {
        increaseXSpeed = increase;
    }

    public void decreaseXSpeed(boolean decrease) {
        decreaseXSpeed = decrease;
    }

    public void increaseYSpeed(boolean increase) {
        increaseYSpeed = increase;
    }

    public void decreaseYSpeed(boolean decrease) {
        decreaseYSpeed = decrease;
    }

    public void cycleColor() {
        delay = 0;
        col = (col + 1) % colors.length;
    }

    private void loadGLTextures(GL gl) {                            // Load image And Convert To Textures
        TextureReader.Texture texture = null;
        try {
            texture = TextureReader.readTexture("demos/data/images/particle.png");
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        gl.glGenTextures(1, textures, 0);                  // Create Three Textures
        // Create Nearest Filtered Texture
        gl.glBindTexture(GL.GL_TEXTURE_2D, textures[0]);
        gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
        gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
        gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, 3, texture.getWidth(), texture.getHeight(), 0, GL.GL_RGB, GL.GL_UNSIGNED_BYTE, texture.getPixels());
    }

    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();

        loadGLTextures(gl);

        gl.glShadeModel(GL.GL_SMOOTH);                            //Enables Smooth Color Shading
        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);               //This Will Clear The Background Color To Black
        gl.glClearDepth(1.0);                                  //Enables Clearing Of The Depth Buffer
        gl.glDisable(GL.GL_DEPTH_TEST);                           //Disables Depth Testing
        gl.glEnable(GL.GL_BLEND);
        gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE);					// Type Of Blending To Perform
        //gl.glDepthFunc(GL.GL_LEQUAL);                             //The Type Of Depth Test To Do
        gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);  // Really Nice Perspective Calculations
        gl.glHint(GL.GL_POINT_SMOOTH_HINT, GL.GL_NICEST);				// Really Nice Point Smoothing
        gl.glEnable(GL.GL_TEXTURE_2D);
        gl.glBindTexture(GL.GL_TEXTURE_2D, textures[0]);			// Select Our Texture

        for (int loop = 0; loop < 1000; loop++)				// Initials All The Textures
        {
            particles[loop] = new Particle();
            particles[loop].active = true;								// Make All The Particles Active
            particles[loop].life = 1.0f;								// Give All The Particles Full Life
            particles[loop].fade = (float) (100 * Math.random()) / 1000.0f + 0.003f;	// Random Fade Speed
            particles[loop].r = colors[loop * (12 / MAX_PARTICLES)][0];	// Select Red Rainbow Color
            particles[loop].g = colors[loop * (12 / MAX_PARTICLES)][1];	// Select Red Rainbow Color
            particles[loop].b = colors[loop * (12 / MAX_PARTICLES)][2];	// Select Red Rainbow Color
            particles[loop].xi = (float) ((50 * Math.random()) - 26.0f) * 10.0f;		// Random Speed On X Axis
            particles[loop].yi = (float) ((50 * Math.random()) - 25.0f) * 10.0f;		// Random Speed On Y Axis
            particles[loop].zi = (float) ((50 * Math.random()) - 25.0f) * 10.0f;		// Random Speed On Z Axis
            particles[loop].xg = 0.0f;									// Set Horizontal Pull To Zero
            particles[loop].yg = -0.8f;								// Set Vertical Pull Downward
            particles[loop].zg = 0.0f;									// Set Pull On Z Axis To Zero
        }
    }

    private void update() {
        if (slowDown)
            slowdown = Math.min(4, slowdown + 0.01f);

        if (speedUp)
            slowdown = Math.max(1, slowdown - 0.01f);

        if (decreaseParticleGrowSpeed)
            zoomRate -= 0.1f;

        if (increaseParticleGrowSpeed)
            zoomRate += 0.1f;

        if (increaseXSpeed)
            xspeed = Math.min(200, xspeed + 1);

        if (decreaseXSpeed)
            xspeed = Math.max(-200, xspeed - 1);

        if (increaseYSpeed)
            yspeed = Math.min(200, yspeed + 1);

        if (decreaseYSpeed)
            yspeed = Math.max(-200, yspeed - 1);

        for (int loop = 0; loop < MAX_PARTICLES; loop++)					// Loop Through All The Particles
        {
            if (particles[loop].active)							// If The Particle Is Active
            {

                // If Number Pad 8 And Y Gravity Is Less Than 1.5 Increase Pull Upwards
                if (doPullUp && (particles[loop].yg < 1.5f)) {
                    particles[loop].yg += 0.01f;
                }

                // If Number Pad 2 And Y Gravity Is Greater Than -1.5 Increase Pull Downwards
                if (doPullDown && (particles[loop].yg > -1.5f)) {
                    particles[loop].yg -= 0.01f;
                }

                // If Number Pad 6 And X Gravity Is Less Than 1.5 Increase Pull Right
                if (doPullRight && (particles[loop].xg < 1.5f)) {
                    particles[loop].xg += 0.01f;
                }

                // If Number Pad 4 And X Gravity Is Greater Than -1.5 Increase Pull Left
                if (doPullLeft && (particles[loop].xg > -1.5f)) {
                    particles[loop].xg -= 0.01f;
                }

                if (doBurst)										// Tab Key Causes A Burst
                {
                    particles[loop].x = 0.0f;								// Center On X Axis
                    particles[loop].y = 0.0f;								// Center On Y Axis
                    particles[loop].z = 0.0f;								// Center On Z Axis
                    particles[loop].xi = (float) ((50 * Math.random()) - 26.0f) * 10.0f;	// Random Speed On X Axis
                    particles[loop].yi = (float) ((50 * Math.random()) - 25.0f) * 10.0f;	// Random Speed On Y Axis
                    particles[loop].zi = (float) ((50 * Math.random()) - 25.0f) * 10.0f;	// Random Speed On Z Axis
                }
            }
        }

        doBurst = false;
    }

    public void display(GLAutoDrawable drawable) {
        update();
        GL gl = drawable.getGL();

        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);       //Clear The Screen And The Depth Buffer
        gl.glLoadIdentity();                                         //Reset The View
        for (int loop = 0; loop < MAX_PARTICLES; loop++)					// Loop Through All The Particles
        {
            if (particles[loop].active)							// If The Particle Is Active
            {
                float x = particles[loop].x;						// Grab Our Particle X Position
                float y = particles[loop].y;						// Grab Our Particle Y Position
                float z = particles[loop].z + zoomRate;					// Particle Z Pos + Zoom

                // Draw The Particle Using Our RGB Values, Fade The Particle Based On It's Life
                gl.glColor4f(particles[loop].r, particles[loop].g, particles[loop].b, particles[loop].life);

                gl.glBegin(GL.GL_TRIANGLE_STRIP);						// Build Quad From A Triangle Strip
                gl.glTexCoord2d(1, 1);
                gl.glVertex3f(x + 0.5f, y + 0.5f, z); // Top Right
                gl.glTexCoord2d(0, 1);
                gl.glVertex3f(x - 0.5f, y + 0.5f, z); // Top Left
                gl.glTexCoord2d(1, 0);
                gl.glVertex3f(x + 0.5f, y - 0.5f, z); // Bottom Right
                gl.glTexCoord2d(0, 0);
                gl.glVertex3f(x - 0.5f, y - 0.5f, z); // Bottom Left
                gl.glEnd();										// Done Building Triangle Strip

                particles[loop].x += particles[loop].xi / (slowdown * 1000);// Move On The X Axis By X Speed
                particles[loop].y += particles[loop].yi / (slowdown * 1000);// Move On The Y Axis By Y Speed
                particles[loop].z += particles[loop].zi / (slowdown * 1000);// Move On The Z Axis By Z Speed

                particles[loop].xi += particles[loop].xg;			// Take Pull On X Axis Into Account
                particles[loop].yi += particles[loop].yg;			// Take Pull On Y Axis Into Account
                particles[loop].zi += particles[loop].zg;			// Take Pull On Z Axis Into Account
                particles[loop].life -= particles[loop].fade;		// Reduce Particles Life By 'Fade'

                if (particles[loop].life < 0.0f)					// If Particle Is Burned Out
                {
                    particles[loop].life = 1.0f;					// Give It New Life
                    particles[loop].fade = (float) (100 * Math.random()) / 1000.0f + 0.003f;	// Random Fade Value
                    particles[loop].x = 0.0f;						// Center On X Axis
                    particles[loop].y = 0.0f;						// Center On Y Axis
                    particles[loop].z = 0.0f;						// Center On Z Axis
                    particles[loop].xi = xspeed + (float) ((60 * Math.random()) - 32.0f);	// X Axis Speed And Direction
                    particles[loop].yi = yspeed + (float) ((60 * Math.random()) - 30.0f);	// Y Axis Speed And Direction
                    particles[loop].zi = (float) ((60 * Math.random()) - 30.0f);	// Z Axis Speed And Direction
                    particles[loop].r = colors[col][0];			// Select Red From Color Table
                    particles[loop].g = colors[col][1];			// Select Green From Color Table
                    particles[loop].b = colors[col][2];			// Select Blue From Color Table
                }
            }

        }

        delay++;
        if (delay > 25 && rainbow) {
            cycleColor();
        }
    }

    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, 100);
        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glLoadIdentity();
    }

    public void displayChanged(GLAutoDrawable drawable,
                               boolean modeChanged,
                               boolean deviceChanged) {
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97精品久久久久中文字幕| 国产成人精品午夜视频免费| 中文字幕中文字幕一区| 2021国产精品久久精品| 日韩三级视频中文字幕| 精品国产在天天线2019| 久久久久久久电影| 国产日产欧美一区| 亚洲国产精品传媒在线观看| 中文字幕色av一区二区三区| 自拍视频在线观看一区二区| 亚洲美女精品一区| 亚洲大型综合色站| 免费久久99精品国产| 久久99国产精品免费网站| 韩国视频一区二区| 国产成人免费视| 91在线观看下载| 欧美日韩精品免费| 欧美成va人片在线观看| 久久久91精品国产一区二区精品 | 午夜av一区二区| 美女视频黄a大片欧美| 国产成人精品1024| 日本久久一区二区| 日韩一区二区麻豆国产| 中文在线免费一区三区高中清不卡| 国产精品嫩草99a| 亚洲亚洲精品在线观看| 激情六月婷婷综合| 日本高清不卡一区| 精品精品欲导航| 亚洲精品免费在线播放| 天天操天天综合网| 波多野结衣在线aⅴ中文字幕不卡| 91福利社在线观看| www国产成人| 亚洲午夜免费电影| 国产九色sp调教91| 9191国产精品| 亚洲欧美一区二区在线观看| 美女一区二区三区| 色综合av在线| 国产欧美一区二区精品性| 午夜精品成人在线视频| 国产成人欧美日韩在线电影| 欧美久久久久久蜜桃| 国产精品嫩草影院com| 久久国产精品99精品国产| 色噜噜狠狠色综合中国| 国产视频在线观看一区二区三区| 同产精品九九九| zzijzzij亚洲日本少妇熟睡| 精品久久久久久久久久久久久久久| 激情综合色综合久久| 91国产丝袜在线播放| 国产免费观看久久| 国产在线视视频有精品| 在线播放亚洲一区| 一区二区三区日韩| 成+人+亚洲+综合天堂| 中文字幕欧美激情一区| 激情综合亚洲精品| 欧美不卡一区二区三区四区| 日本视频一区二区三区| 欧美日韩不卡一区| 亚洲成人一区二区在线观看| 91黄色激情网站| 亚洲精品国产无套在线观| 国产91对白在线观看九色| www精品美女久久久tv| 美脚の诱脚舐め脚责91 | 成人h动漫精品| 国产亚洲午夜高清国产拍精品| 蜜桃一区二区三区四区| 日韩一区二区电影在线| 另类综合日韩欧美亚洲| 亚洲精品一区二区在线观看| 蜜臀精品久久久久久蜜臀 | 中文字幕一区二区三| 粉嫩久久99精品久久久久久夜| 久久久久一区二区三区四区| 国产精品自在欧美一区| 国产精品素人视频| 色综合视频一区二区三区高清| 国产精品黄色在线观看| 一本大道久久a久久综合| 亚洲一级二级在线| 欧美一区二区私人影院日本| 蜜臀久久99精品久久久画质超高清 | 国产高清精品在线| 国产精品欧美综合在线| 日本精品视频一区二区三区| 香蕉成人伊视频在线观看| 欧美日韩免费电影| 国产一区高清在线| 国产精品免费视频观看| 欧美午夜不卡在线观看免费| 亚洲成人一区在线| 久久网这里都是精品| 9i看片成人免费高清| 亚洲高清免费在线| 久久色视频免费观看| aaa亚洲精品一二三区| 日韩精品电影在线| 亚洲国产精品精华液2区45| 欧美影片第一页| 久久精品免费观看| 亚洲人成小说网站色在线| 在线观看区一区二| 国产真实乱对白精彩久久| 国产精品福利在线播放| 欧美片网站yy| eeuss鲁片一区二区三区在线观看| 亚洲自拍都市欧美小说| 国产日韩欧美一区二区三区乱码| 色欧美乱欧美15图片| 久久99精品久久久久久久久久久久 | 久久精品国产一区二区三区免费看| 26uuu久久天堂性欧美| 91婷婷韩国欧美一区二区| 日韩av网站免费在线| 日韩久久一区二区| 久久综合九色综合久久久精品综合 | 成人动漫av在线| 狠狠色丁香婷婷综合| 一区精品在线播放| 久久色在线视频| 在线播放一区二区三区| 91毛片在线观看| 国产成人午夜99999| 麻豆精品蜜桃视频网站| 一二三区精品视频| 久久久精品影视| 不卡一区在线观看| 成人福利视频网站| 欧美日韩国产综合一区二区| 日韩一级免费观看| 中文字幕欧美激情一区| 亚洲国产一区视频| 九色|91porny| 97精品久久久午夜一区二区三区| 欧美三级电影在线观看| 欧美va天堂va视频va在线| 国产女同互慰高潮91漫画| 一区二区欧美视频| 久久99久久久欧美国产| 成人sese在线| 337p亚洲精品色噜噜狠狠| 久久精品日韩一区二区三区| 亚洲精品日产精品乱码不卡| 日本午夜一区二区| 成人免费观看视频| 欧美精品亚洲一区二区在线播放| www国产精品av| 亚洲一区免费视频| 成人av在线播放网址| 91精品蜜臀在线一区尤物| 国产亚洲一本大道中文在线| 亚洲成a人片在线不卡一二三区| 国模冰冰炮一区二区| 色又黄又爽网站www久久| 精品国产一区久久| 亚洲午夜激情av| 国产成人亚洲精品青草天美| 欧美日韩国产在线观看| 中文字幕第一区综合| 日日摸夜夜添夜夜添精品视频| 国产成a人亚洲| 精品国产一区二区三区四区四 | 精品国产sm最大网站| 亚洲综合久久久久| 不卡视频免费播放| 久久―日本道色综合久久| 日韩av在线播放中文字幕| 91视频91自| 中文字幕+乱码+中文字幕一区| 麻豆一区二区99久久久久| 欧美性做爰猛烈叫床潮| 中文字幕中文字幕在线一区 | 日本免费新一区视频| 欧美亚洲图片小说| 自拍偷自拍亚洲精品播放| 国产精品一区二区三区四区| 日韩三级.com| 同产精品九九九| 欧美日韩一级二级三级| 亚洲一二三区在线观看| 国产不卡视频一区二区三区| 久久九九影视网| 国产精品一二三四五| 久久久久久久综合色一本| 国产一区二区三区在线观看精品 | 久久av资源站| 欧美一区二区三区四区在线观看| 亚洲国产精品久久久久秋霞影院 | 亚洲欧美日韩小说| 色视频欧美一区二区三区| 亚洲日本乱码在线观看| 99在线精品一区二区三区|