⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 renderer.java

📁 NeHe用java与OpenGL结合教程源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            gl.glColor3i(random.nextInt() * 255, random.nextInt() * 255, random.nextInt() * 255);		// Pick A Random Color
            glPrint(gl, 472, 20, 1, "GAME OVER");						// Write GAME OVER To The Screen
            glPrint(gl, 456, 40, 1, "PRESS SPACE");					// Write PRESS SPACE To The Screen
        }

        for (int loop1 = 0; loop1 < lives - 1; loop1++) {					// Loop Through Lives Minus Current Life
            gl.glLoadIdentity();									// Reset The View
            gl.glTranslatef(490 + (loop1 * 40.0f), 40.0f, 0.0f);			// Move To The Right Of Our Title Text
            gl.glRotatef(-player.spin, 0.0f, 0.0f, 1.0f);				// Rotate Counter Clockwise
            gl.glColor3f(0.0f, 1.0f, 0.0f);							// Set Player Color To Light Green
            gl.glBegin(GL.GL_LINES);									// Start Drawing Our Player Using Lines
            gl.glVertex2d(-5, -5);								// Top Left Of Player
            gl.glVertex2d(5, 5);								// Bottom Right Of Player
            gl.glVertex2d(5, -5);								// Top Right Of Player
            gl.glVertex2d(-5, 5);								// Bottom Left Of Player
            gl.glEnd();											// Done Drawing The Player
            gl.glRotatef(-player.spin * 0.5f, 0.0f, 0.0f, 1.0f);		// Rotate Counter Clockwise
            gl.glColor3f(0.0f, 0.75f, 0.0f);							// Set Player Color To Dark Green
            gl.glBegin(GL.GL_LINES);									// Start Drawing Our Player Using Lines
            gl.glVertex2d(-7, 0);								// Left Center Of Player
            gl.glVertex2d(7, 0);								// Right Center Of Player
            gl.glVertex2d(0, -7);								// Top Center Of Player
            gl.glVertex2d(0, 7);								// Bottom Center Of Player
            gl.glEnd();											// Done Drawing The Player
        }

        filled = true;											// Set Filled To True Before Testing
        gl.glLineWidth(2.0f);										// Set Line Width For Cells To 2.0f
        gl.glDisable(GL.GL_LINE_SMOOTH);								// Disable Antialiasing
        gl.glLoadIdentity();										// Reset The Current Modelview Matrix
        for (int loop1 = 0; loop1 < 11; loop1++) {						// Loop From Left To Right
            for (int loop2 = 0; loop2 < 11; loop2++) {					// Loop From Top To Bottom
                gl.glColor3f(0.0f, 0.5f, 1.0f);						// Set Line Color To Blue
                if (hline[loop1][loop2]) {						// Has The Horizontal Line Been Traced
                    gl.glColor3f(1.0f, 1.0f, 1.0f);					// If So, Set Line Color To White
                }

                if (loop1 < 10) {								// Dont Draw To Far Right
                    if (!hline[loop1][loop2]) {					// If A Horizontal Line Isn't Filled
                        filled = false;							// filled Becomes False
                    }
                    gl.glBegin(GL.GL_LINES);							// Start Drawing Horizontal Cell Borders
                    gl.glVertex2d(20 + (loop1 * 60), 70 + (loop2 * 40));// Left Side Of Horizontal Line
                    gl.glVertex2d(80 + (loop1 * 60), 70 + (loop2 * 40));// Right Side Of Horizontal Line
                    gl.glEnd();									// Done Drawing Horizontal Cell Borders
                }

                gl.glColor3f(0.0f, 0.5f, 1.0f);						// Set Line Color To Blue
                if (vline[loop1][loop2]) {						// Has The Horizontal Line Been Traced
                    gl.glColor3f(1.0f, 1.0f, 1.0f);					// If So, Set Line Color To White
                }
                if (loop2 < 10) {								// Dont Draw To Far Down
                    if (!vline[loop1][loop2]) {					// If A Verticle Line Isn't Filled
                        filled = false;							// filled Becomes False
                    }
                    gl.glBegin(GL.GL_LINES);							// Start Drawing Verticle Cell Borders
                    gl.glVertex2d(20 + (loop1 * 60), 70 + (loop2 * 40));// Left Side Of Horizontal Line
                    gl.glVertex2d(20 + (loop1 * 60), 110 + (loop2 * 40));// Right Side Of Horizontal Line
                    gl.glEnd();									// Done Drawing Verticle Cell Borders
                }

                gl.glEnable(GL.GL_TEXTURE_2D);						// Enable Texture Mapping
                gl.glColor3f(1.0f, 1.0f, 1.0f);						// Bright White Color
                gl.glBindTexture(GL.GL_TEXTURE_2D, textures[1]);		// Select The Tile Image
                if ((loop1 < 10) && (loop2 < 10)) {					// If In Bounds, Fill In Traced Boxes
                    // Are All Sides Of The Box Traced?
                    if (hline[loop1][loop2] && hline[loop1][loop2 + 1] && vline[loop1][loop2] && vline[loop1 + 1][loop2]) {
                        gl.glBegin(GL.GL_QUADS);						// Draw A Textured Quad
                        gl.glTexCoord2f((loop1 / 10.0f) + 0.1f, 1.0f - ((loop2 / 10.0f)));
                        gl.glVertex2d(20 + (loop1 * 60) + 59, (70 + loop2 * 40 + 1));	// Top Right
                        gl.glTexCoord2f((loop1 / 10.0f), 1.0f - ((loop2 / 10.0f)));
                        gl.glVertex2d(20 + (loop1 * 60) + 1, (70 + loop2 * 40 + 1));	// Top Left
                        gl.glTexCoord2f((loop1 / 10.0f), 1.0f - ((loop2 / 10.0f) + 0.1f));
                        gl.glVertex2d(20 + (loop1 * 60) + 1, (70 + loop2 * 40) + 39);	// Bottom Left
                        gl.glTexCoord2f((loop1 / 10.0f) + 0.1f, 1.0f - ((loop2 / 10.0f) + 0.1f));
                        gl.glVertex2d(20 + (loop1 * 60) + 59, (70 + loop2 * 40) + 39);	// Bottom Right
                        gl.glEnd();								// Done Texturing The Box
                    }
                }
                gl.glDisable(GL.GL_TEXTURE_2D);						// Disable Texture Mapping

            }
        }
        gl.glLineWidth(1.0f);										// Set The Line Width To 1.0f

        if (anti) {												// Is Anti TRUE?
            gl.glEnable(GL.GL_LINE_SMOOTH);							// If So, Enable Antialiasing
        }

        if (hourglass.fx == 1) {								// If fx=1 Draw The Hourglass
            gl.glLoadIdentity();									// Reset The Modelview Matrix
            gl.glTranslatef(20.0f + (hourglass.x * 60), 70.0f + (hourglass.y * 40), 0.0f);	// Move To The Fine Hourglass Position
            gl.glRotatef(hourglass.spin, 0.0f, 0.0f, 1.0f);			// Rotate Clockwise
            gl.glColor3f(random.nextFloat(), random.nextFloat(), random.nextFloat());		// Set Hourglass Color To Random Color
            gl.glBegin(GL.GL_LINES);									// Start Drawing Our Hourglass Using Lines
            gl.glVertex2d(-5, -5);								// Top Left Of Hourglass
            gl.glVertex2d(5, 5);								// Bottom Right Of Hourglass
            gl.glVertex2d(5, -5);								// Top Right Of Hourglass
            gl.glVertex2d(-5, 5);								// Bottom Left Of Hourglass
            gl.glVertex2d(-5, 5);								// Bottom Left Of Hourglass
            gl.glVertex2d(5, 5);								// Bottom Right Of Hourglass
            gl.glVertex2d(-5, -5);								// Top Left Of Hourglass
            gl.glVertex2d(5, -5);								// Top Right Of Hourglass
            gl.glEnd();											// Done Drawing The Hourglass
        }

        gl.glLoadIdentity();										// Reset The Modelview Matrix
        gl.glTranslatef(player.fx + 20.0f, player.fy + 70.0f, 0.0f);		// Move To The Fine Player Position
        gl.glRotatef(player.spin, 0.0f, 0.0f, 1.0f);					// Rotate Clockwise
        gl.glColor3f(0.0f, 1.0f, 0.0f);								// Set Player Color To Light Green
        gl.glBegin(GL.GL_LINES);										// Start Drawing Our Player Using Lines
        gl.glVertex2d(-5, -5);									// Top Left Of Player
        gl.glVertex2d(5, 5);									// Bottom Right Of Player
        gl.glVertex2d(5, -5);									// Top Right Of Player
        gl.glVertex2d(-5, 5);									// Bottom Left Of Player
        gl.glEnd();												// Done Drawing The Player
        gl.glRotatef(player.spin * 0.5f, 0.0f, 0.0f, 1.0f);				// Rotate Clockwise
        gl.glColor3f(0.0f, 0.75f, 0.0f);								// Set Player Color To Dark Green
        gl.glBegin(GL.GL_LINES);										// Start Drawing Our Player Using Lines
        gl.glVertex2d(-7, 0);									// Left Center Of Player
        gl.glVertex2d(7, 0);									// Right Center Of Player
        gl.glVertex2d(0, -7);									// Top Center Of Player
        gl.glVertex2d(0, 7);									// Bottom Center Of Player
        gl.glEnd();												// Done Drawing The Player

        for (int loop1 = 0; loop1 < (stage * level); loop1++) {				// Loop To Draw Enemies
            gl.glLoadIdentity();									// Reset The Modelview Matrix
            gl.glTranslatef(enemy[loop1].fx + 20.0f, enemy[loop1].fy + 70.0f, 0.0f);
            gl.glColor3f(1.0f, 0.5f, 0.5f);							// Make Enemy Body Pink
            gl.glBegin(GL.GL_LINES);									// Start Drawing Enemy
            gl.glVertex2d(0, -7);								// Top Point Of Body
            gl.glVertex2d(-7, 0);								// Left Point Of Body
            gl.glVertex2d(-7, 0);								// Left Point Of Body
            gl.glVertex2d(0, 7);								// Bottom Point Of Body
            gl.glVertex2d(0, 7);								// Bottom Point Of Body
            gl.glVertex2d(7, 0);								// Right Point Of Body
            gl.glVertex2d(7, 0);								// Right Point Of Body
            gl.glVertex2d(0, -7);								// Top Point Of Body
            gl.glEnd();											// Done Drawing Enemy Body
            gl.glRotatef(enemy[loop1].spin, 0.0f, 0.0f, 1.0f);		// Rotate The Enemy Blade
            gl.glColor3f(1.0f, 0.0f, 0.0f);							// Make Enemy Blade Red
            gl.glBegin(GL.GL_LINES);									// Start Drawing Enemy Blade
            gl.glVertex2d(-7, -7);								// Top Left Of Enemy
            gl.glVertex2d(7, 7);								// Bottom Right Of Enemy
            gl.glVertex2d(-7, 7);								// Bottom Left Of Enemy
            gl.glVertex2d(7, -7);								// Top Right Of Enemy
            gl.glEnd();											// Done Drawing Enemy Blade
        }
    }

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

        drawGLScene(gl);

        // Update (roughly) every (steps[adjust] * 2.0) ms
        long currentTime = getTime();
        long elapsedTime = currentTime - lastUpdateTime;
        if (elapsedTime > steps[adjust] * 2) {
            update();
            lastUpdateTime = getTime();
        }
    }

    private long getTime() {
        return System.currentTimeMillis();
    }

    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();
        gl.glOrtho(0.0f, width, height, 0.0f, -1.0f, 1.0f);				// Create Ortho 640x480 View (0,0 At Top Left)

        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glLoadIdentity();
    }

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

    private static class GameObject {												// Create A Structure For Our Player
        public int fx, fy;											// Fine Movement Position
        public int x, y;											// Current Player Position
        public float spin;											// Spin Direction
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -