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

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

?? renderer.java

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

import com.sun.opengl.util.GLUT;

import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;
import java.text.NumberFormat;
import java.util.Iterator;

class Renderer implements GLEventListener {
    /**
     ConstantVelocity is an object from Physics1.h. It is a container for simulating masses.
     Specifically, it creates a mass and sets its velocity as (1, 0, 0) so that the mass
     moves with 1.0f meters / second in the x direction.
     */
    private ConstantVelocity constantVelocity = new ConstantVelocity();

    /**
     MotionUnderGravitation is an object from Physics1.h. It is a container for simulating masses.
     This object applies gravitation to all masses it contains. This gravitation is set by the
     constructor which is (0.0f, -9.81f, 0.0f) for now (see below). This means a gravitational acceleration
     of 9.81 meter per (second * second) in the negative y direction. MotionUnderGravitation
     creates one mass by default and sets its position to (-10, 0, 0) and its velocity to
     (10, 15, 0)
     */
    private MotionUnderGravitation motionUnderGravitation = new MotionUnderGravitation(new Vector3D(0.0f, -9.81f, 0.0f));

    /**
     MassConnectedWithSpring is an object from Physics1.h. It is a container for simulating masses.
     This object has a member called connectionPos, which is the connection position of the spring
     it simulates. All masses in this container are pulled towards the connectionPos by a spring
     with a constant of stiffness. This constant is set by the constructor and for now it is 2.0
     (see below).
     */
    private MassConnectedWithSpring massConnectedWithSpring = new MassConnectedWithSpring(2.0f);

    private float slowMotionRatio = 10.0f;									// slowMotionRatio Is A Value To Slow Down The Simulation, Relative To Real World Time
    private float timeElapsed = 0;											// Elapsed Time In The Simulation (Not Equal To Real World's Time Unless slowMotionRatio Is 1
    private long previousTime = System.currentTimeMillis();

    private GLUT glut;
    private GLU glu = new GLU();
    private static final int FONT = GLUT.STROKE_MONO_ROMAN;
    private NumberFormat numberFormat;

    public Renderer() {
        numberFormat = NumberFormat.getNumberInstance();
        numberFormat.setMinimumFractionDigits(2);
        numberFormat.setMaximumFractionDigits(2);
    }

    public float getSlowMotionRatio() {
        return slowMotionRatio;
    }

    public void setSlowMotionRatio(float slowMotionRatio) {
        this.slowMotionRatio = slowMotionRatio;
    }

    private void glPrint(GL gl, float x, float y, float z, int font, String string)	// Custom GL "Print" Routine
    {
        gl.glPushMatrix();
        gl.glTranslatef(x, y, z);								// Position Text On The Screen
        gl.glScalef(0.005f, 0.005f, 0.005f);
        int width = glut.glutStrokeLength(font, string);
        gl.glTranslatef(-width, 0, 0);								// Right align text with position
        for (int i = 0; i < string.length(); i++) {
            glut.glutStrokeCharacter(font, string.charAt(i));
        }
        gl.glPopMatrix();
    }

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

        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);						// Black Background
        gl.glShadeModel(GL.GL_SMOOTH);									// Select Smooth Shading
        gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);			// Set Perspective Calculations To Most Accurate
    }

    public void display(GLAutoDrawable drawable) {
        long currentTime = System.currentTimeMillis();
        update(currentTime - previousTime);
        previousTime = currentTime;

        GL gl = drawable.getGL();

        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);		// Clear Screen And Depth Buffer

        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glLoadIdentity();											// Reset The Modelview Matrix

        // Position Camera 40 Meters Up In Z-Direction.
        // Set The Up Vector In Y-Direction So That +X Directs To Right And +Y Directs To Up On The Window.
        gl.glTranslatef(0, 0, -40);

        // Drawing The Coordinate Plane Starts Here.
        // We Will Draw Horizontal And Vertical Lines With A Space Of 1 Meter Between Them.
        gl.glColor3f(0, 0, 1);										// Draw In Blue
        gl.glBegin(GL.GL_LINES);

        // Draw The Vertical Lines
        for (float x = -20; x <= 20; x += 1.0f)						// x += 1.0f Stands For 1 Meter Of Space In This Example
        {
            gl.glVertex3f(x, 20, 0);
            gl.glVertex3f(x, -20, 0);
        }

        // Draw The Horizontal Lines
        for (float y = -20; y <= 20; y += 1.0f)						// y += 1.0f Stands For 1 Meter Of Space In This Example
        {
            gl.glVertex3f(20, y, 0);
            gl.glVertex3f(-20, y, 0);
        }

        gl.glEnd();
        // Drawing The Coordinate Plane Ends Here.

        // Draw All Masses In constantVelocity Simulation (Actually There Is Only One Mass In This Example Of Code)
        gl.glColor3f(1, 0, 0);										// Draw In Red
        Iterator masses = constantVelocity.getMasses();
        while (masses.hasNext()) {
            Mass mass = (Mass) masses.next();
            Vector3D pos = mass.pos;

            // Center Our Text On The Screen
            glPrint(gl, pos.x, pos.y + 1, pos.z, FONT, "Mass with constant vel");

            gl.glPointSize(4);
            gl.glBegin(GL.GL_POINTS);
            gl.glVertex3f(pos.x, pos.y, pos.z);
            gl.glEnd();
        }
        // Drawing Masses In constantVelocity Simulation Ends Here.

        // Draw All Masses In motionUnderGravitation Simulation (Actually There Is Only One Mass In This Example Of Code)
        gl.glColor3f(1, 1, 0);									// Draw In Yellow
        masses = motionUnderGravitation.getMasses();
        while (masses.hasNext()) {
            Mass mass = (Mass) masses.next();
            Vector3D pos = mass.pos;

            // Center Our Text On The Screen
            glPrint(gl, pos.x, pos.y + 1, pos.z, FONT, "Motion under gravitation");

            gl.glPointSize(4);
            gl.glBegin(GL.GL_POINTS);
            gl.glVertex3f(pos.x, pos.y, pos.z);
            gl.glEnd();
        }
        // Drawing Masses In motionUnderGravitation Simulation Ends Here.

        // Draw All Masses In massConnectedWithSpring Simulation (Actually There Is Only One Mass In This Example Of Code)
        gl.glColor3f(0, 1, 0);										// Draw In Green
        masses = massConnectedWithSpring.getMasses();
        while (masses.hasNext()) {
            Mass mass = (Mass) masses.next();
            Vector3D pos = mass.pos;

            // Center Our Text On The Screen
            glPrint(gl, pos.x, pos.y + 1, pos.z, FONT, "Mass connected with spring");

            gl.glPointSize(4);
            gl.glBegin(GL.GL_POINTS);
            gl.glVertex3f(pos.x, pos.y, pos.z);
            gl.glEnd();

            // Draw A Line From The Mass Position To Connection Position To Represent The Spring
            gl.glBegin(GL.GL_LINES);
            gl.glVertex3f(pos.x, pos.y, pos.z);
            pos = massConnectedWithSpring.connectionPos;
            gl.glVertex3f(pos.x, pos.y, pos.z);
            gl.glEnd();
        }
        // Drawing Masses In massConnectedWithSpring Simulation Ends Here.


        gl.glColor3f(1, 1, 1);									// Draw In White
        glPrint(gl, -5.0f, 14, 0, FONT, "Time elapsed (seconds): " + numberFormat.format(timeElapsed));	// Print timeElapsed
        glPrint(gl, -5.0f, 13, 0, FONT, "Slow motion ratio: " + numberFormat.format(slowMotionRatio));	// Print slowMotionRatio
        glPrint(gl, -5.0f, 12, 0, FONT, "Press F2 for normal motion");
        glPrint(gl, -5.0f, 11, 0, FONT, "Press F3 for slow motion");
    }

    private void update(long milliseconds)								// Perform Motion Updates Here
    {
        // dt Is The Time Interval (As Seconds) From The Previous Frame To The Current Frame.
        // dt Will Be Used To Iterate Simulation Values Such As Velocity And Position Of Masses.

        float dt = milliseconds / 1000.0f;							// Let's Convert Milliseconds To Seconds

        dt /= slowMotionRatio;										// Divide dt By slowMotionRatio And Obtain The New dt

        timeElapsed += dt;											// Iterate Elapsed Time

        float maxPossible_dt = 0.1f;								// Say That The Maximum Possible dt Is 0.1 Seconds
        // This Is Needed So We Do Not Pass Over A Non Precise dt Value

        int numOfIterations = (int) (dt / maxPossible_dt) + 1;		// Calculate Number Of Iterations To Be Made At This Update Depending On maxPossible_dt And dt
        if (numOfIterations != 0)									// Avoid Division By Zero
            dt = dt / numOfIterations;								// dt Should Be Updated According To numOfIterations

        for (int a = 0; a < numOfIterations; ++a)					// We Need To Iterate Simulations "numOfIterations" Times
        {
            constantVelocity.operate(dt);							// Iterate constantVelocity Simulation By dt Seconds
            motionUnderGravitation.operate(dt);					// Iterate motionUnderGravitation Simulation By dt Seconds
            massConnectedWithSpring.operate(dt);					// Iterate massConnectedWithSpring Simulation By dt Seconds
        }
    }

    public void reshape(GLAutoDrawable drawable,
                        int x,
                        int y,
                        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一区二区三区免费野_久草精品视频
婷婷中文字幕综合| 亚洲一区二区在线免费观看视频| 麻豆国产一区二区| 日韩一级欧美一级| 国产91精品入口| 国产精品理伦片| 欧美三区在线观看| 老司机午夜精品| 亚洲国产精品二十页| 99久久婷婷国产综合精品电影| 亚洲三级理论片| 7777精品伊人久久久大香线蕉 | 激情都市一区二区| 久久久久久夜精品精品免费| 99久久久免费精品国产一区二区| 日韩毛片高清在线播放| 欧美理论片在线| 国产精品亚洲а∨天堂免在线| 亚洲人成网站色在线观看| 91.xcao| 粉嫩蜜臀av国产精品网站| 一区二区三区在线高清| 精品国产乱码久久久久久图片| 成人午夜精品在线| 亚洲第一在线综合网站| 久久无码av三级| 欧美婷婷六月丁香综合色| 国产综合色视频| 一区二区三区av电影 | 日韩国产在线一| 国产日韩欧美精品一区| 欧美午夜精品理论片a级按摩| 九九精品视频在线看| 亚洲视频免费在线| 久久综合五月天婷婷伊人| 一本到不卡精品视频在线观看| 麻豆成人久久精品二区三区小说| 亚洲桃色在线一区| 久久综合久久综合亚洲| 欧美日韩国产小视频在线观看| 国产成人综合在线播放| 亚洲1区2区3区4区| 亚洲人成精品久久久久| xvideos.蜜桃一区二区| 欧美性极品少妇| 成人av电影在线播放| 国产一区欧美日韩| 亚洲成人动漫在线免费观看| 中文字幕在线一区免费| 久久久久久日产精品| 欧美一区二区观看视频| 日本久久精品电影| 成人免费毛片app| 国产精品资源在线| 日本中文一区二区三区| 亚洲成a人片在线不卡一二三区| 日本一区二区成人| 久久久亚洲精华液精华液精华液| 欧美电影影音先锋| 欧美在线啊v一区| 91免费版在线| 99久久久免费精品国产一区二区| 国产精品亚洲а∨天堂免在线| 麻豆中文一区二区| 蜜桃视频在线观看一区| 午夜a成v人精品| 手机精品视频在线观看| 亚洲国产综合在线| 亚洲1区2区3区视频| 亚洲大片在线观看| 天堂蜜桃91精品| 日一区二区三区| 日韩国产欧美在线播放| 丝袜美腿亚洲综合| 日本亚洲电影天堂| 蜜臀av性久久久久蜜臀aⅴ| 日韩国产高清在线| 免费在线观看成人| 久久66热re国产| 国产一区二区三区四| 精品亚洲porn| 国产毛片一区二区| 成人涩涩免费视频| av一本久道久久综合久久鬼色| 国产成人av电影在线播放| 99久久er热在这里只有精品66| 成人av在线影院| 色狠狠色噜噜噜综合网| 欧美日韩国产经典色站一区二区三区| 在线观看欧美精品| 91精品久久久久久久99蜜桃| 欧美一区二区三区视频在线 | 亚洲国产精品高清| 国产精品视频线看| 亚洲一二三级电影| 美日韩一级片在线观看| 国产丶欧美丶日本不卡视频| 不卡视频一二三| 欧美日韩精品一区二区天天拍小说 | 97se亚洲国产综合自在线不卡| 色悠悠久久综合| 91精品黄色片免费大全| 久久精品视频一区二区三区| 国产精品第一页第二页第三页| 一区二区日韩av| 久草热8精品视频在线观看| 成人美女视频在线看| 在线中文字幕不卡| 日韩一区二区在线播放| 国产精品灌醉下药二区| 午夜精品福利一区二区蜜股av| 日韩高清一区二区| 成人免费av在线| 91精品婷婷国产综合久久竹菊| 久久蜜臀中文字幕| 亚洲一二三区视频在线观看| 国产剧情一区二区三区| 欧美亚洲图片小说| 国产欧美日韩另类一区| 天堂蜜桃一区二区三区| 成人性生交大片| 欧美剧在线免费观看网站| 久久综合九色综合97_久久久| 亚洲精品久久嫩草网站秘色| 激情六月婷婷久久| 精品污污网站免费看| 久久精品一二三| 日韩高清在线观看| 91啪在线观看| 久久精品在这里| 奇米精品一区二区三区四区| 91色porny| 日本一区二区三区dvd视频在线| 视频一区在线播放| 91国产免费观看| 中文字幕乱码日本亚洲一区二区| 日本不卡视频一二三区| 欧美在线你懂得| 亚洲国产高清aⅴ视频| 精品在线一区二区| 欧美日韩国产小视频在线观看| 成人欧美一区二区三区| 国产精品一色哟哟哟| 日韩一区二区在线观看| 丝袜美腿亚洲一区二区图片| 91福利国产成人精品照片| 国产精品你懂的| 国产91丝袜在线18| 欧美精彩视频一区二区三区| 久久99精品久久只有精品| 91麻豆精品91久久久久久清纯 | 欧美日韩国产成人在线免费| 中文字幕日韩一区二区| 国产成人福利片| 久久久综合九色合综国产精品| 麻豆精品视频在线观看免费| 欧美美女直播网站| 亚洲国产精品麻豆| 日本久久精品电影| 一区二区三区欧美在线观看| 97国产精品videossex| 中文字幕佐山爱一区二区免费| 成人视屏免费看| 一区免费观看视频| 91天堂素人约啪| 亚洲精品视频一区| av成人免费在线| 亚洲不卡av一区二区三区| 国产精品第13页| 日韩欧美国产综合在线一区二区三区| 亚洲观看高清完整版在线观看 | 99视频一区二区三区| 国产三级精品三级在线专区| 国产宾馆实践打屁股91| 中文字幕电影一区| 91色九色蝌蚪| 偷窥国产亚洲免费视频| 日韩免费福利电影在线观看| 国产在线播精品第三| 国产精品福利一区二区| 99精品视频一区二区| 亚洲最大成人综合| 91精品国产入口| 国产精品自拍网站| 亚洲精品一区二区三区影院| 懂色av一区二区三区免费观看| 国产精品嫩草影院com| 欧美性猛交xxxxxx富婆| 免费成人av在线| 国产欧美一区二区三区鸳鸯浴| 成人app下载| 视频一区二区三区入口| 欧美一区二区三区免费在线看 | 国产一区在线不卡| 在线精品视频免费观看| 久久奇米777| 91久久奴性调教| 麻豆国产精品一区二区三区| 国产精品私房写真福利视频| 91福利区一区二区三区|