Hi,
I am using LWJGL and I've been trying to make a box animate by bouncing around a 800x600 screen. For some reason, the box goes WAY outside of the screen limits on the bottom and right side of the screen. In an openGL forum I was reading that a 2D screen's centre is (0, 0), however in this program (which uses most of the code from the LWJGL website, is centered at (300, 400). I've tried to bound the box by going from -400 to 400 on the x and -300 to 300 on the y, but it doesn't work on the left side of the screen; it goes way off screen. The right side and bottom work when I do that though. Am I doing something wrong in how I'm setting up the screen? Please help!!
Mike (code below)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| package graph1;
import org.lwjgl.LWJGLException; import org.lwjgl.input.*; import org.lwjgl.opengl.*; import static org.lwjgl.opengl.GL11.*;
public class Test { float x = 100, y = 200; float xVel = 1, yVel = 2; float rotation = 0; public void start() { try { Display.setDisplayMode(new DisplayMode(800,600)); Display.create(); } catch (LWJGLException e) { e.printStackTrace(); System.exit(0); }
initGL(); while (!Display.isCloseRequested()) { update(); renderGL(); Display.update(); Display.sync(60); } Display.destroy(); } public void initGL() { glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, 800, 600, 0, 1, -1); glMatrixMode(GL_MODELVIEW); } public void renderGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(0.5f, 0.0f, 0.8f); glPushMatrix(); glTranslatef(x, y, 0); glBegin(GL_QUADS); glVertex2f(x - 50, y - 50); glVertex2f(x + 50, y - 50); glVertex2f(x + 50, y + 50); glVertex2f(x - 50, y + 50); glEnd(); glPopMatrix(); } public void update() { x += xVel; y += yVel; if (x > 800) { x = 800; xVel *= -1; } if (x < 0) { x = 0; xVel *= -1; } if (y > 600) { y = 600; yVel *= -1; } if (y < 0) { y = 0; yVel *= -1; } } public static void main(String[] argv) { Test displayExample = new Test(); displayExample.start(); } } |