This code is straight from OpenGL Superbible 4th edition and I cant seem to get it to work in LWJGL.
Can someone please help me.
import general.OGLStarter;
import java.nio.ByteBuffer;
import java.nio.FloatBuffer;
import org.lwjgl.opengl.Display;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.util.glu.GLU.*;
import org.lwjgl.util.glu.Sphere;
public class Solar extends OGLStarter {
ByteBuffer bBuffer = ByteBuffer.allocateDirect(1024 + 128);
FloatBuffer lightPos = bBuffer.asFloatBuffer();
FloatBuffer whiteLight = bBuffer.asFloatBuffer();
FloatBuffer sourceLight = bBuffer.asFloatBuffer();
Sphere glSphere = new Sphere();
public Solar() {
// Lighting Values
float light[] = { 0.0f, 0.0f, 0.0f, 1.0f };
float whiteLight2[] = { 0.2f, 0.2f, 0.2f, 1.0f };
float sourceLight2[] = { 0.8f, 0.8f, 0.8f, 1.0f };
// Add lighing values to buffers
lightPos.put(light);
lightPos.flip();
whiteLight.put(whiteLight2);
whiteLight.flip();
sourceLight.put(sourceLight2);
sourceLight.flip();
}
// Called to draw scene
public void renderScene() {
// Earth and Moon angle of revolution
float fMoonRot = 0.0f;
float fEarthRot = 0.0f;
// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Save the matrix state and do the rotations
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
// Translate the whole scene out and into view
glTranslatef(0.0f, 0.0f, -300.0f);
// Set material color, Red
// Sun
glDisable(GL_LIGHTING);
glColor3ub((byte)255, (byte)255, (byte)0);
glSphere.draw(15.0f, 30, 17);
glEnable(GL_LIGHTING);
// Move the light after we draw the sun!
glLight(GL_LIGHT0,GL_POSITION,lightPos);
// Rotate coordinate system
glRotatef(fEarthRot, 0.0f, 1.0f, 0.0f);
// Draw the Earth
glColor3ub((byte)0,(byte)0,(byte)255);
glTranslatef(105.0f,0.0f,0.0f);
glSphere.draw(15.0f, 30, 17);
// Rotate from Earth based coordinates and draw Moon
glColor3ub((byte)200,(byte)200,(byte)200);
glRotatef(fMoonRot,0.0f, 1.0f, 0.0f);
glTranslatef(30.0f, 0.0f, 0.0f);
fMoonRot+= 15.0f;
if(fMoonRot > 360.0f)
fMoonRot = 0.0f;
glSphere.draw(6.0f, 30, 17);
// Restore the matrix state
glPopMatrix(); // Modelview matrix
// Step earth orbit 5 degrees
fEarthRot += 5.0f;
if(fEarthRot > 360.0f)
fEarthRot = 0.0f;
// Show the image
Display.update();
Display.sync(10);
}
// This function does any needed initialization on the rendering
// context.
public void setupRC() {
// Light values and coordinates
glEnable(GL_DEPTH_TEST); // Hidden surface removal
glFrontFace(GL_CCW); // Counter clock-wise polygons face out
glEnable(GL_CULL_FACE); // Do not calculate inside of jet
// Enable lighting
glEnable(GL_LIGHTING);
// Setup and enable light 0
glLightModel(GL_LIGHT_MODEL_AMBIENT,whiteLight);
glLight(GL_LIGHT0,GL_DIFFUSE,sourceLight);
glLight(GL_LIGHT0,GL_POSITION,lightPos);
glEnable(GL_LIGHT0);
// Enable color tracking
glEnable(GL_COLOR_MATERIAL);
// Set Material properties to follow glColor values
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
// Black blue background
glClearColor(0.0f, 0.0f, 0.0f, 1.0f );
}
public void checkSize(int w, int h) {
float fAspect;
// Prevent a divide by zero
if(h == 0)
h = 1;
// Set Viewport to window dimensions
glViewport(0, 0, w, h);
// Calculate aspect ratio of the window
fAspect = (float)w/(float)h;
// Set the perspective coordinate system
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// field of view of 45 degrees, near and far planes 1.0 and 425
gluPerspective(45.0f, fAspect, 1.0f, 425.0f);
// Modelview matrix reset
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
public static void main(String[] args) {
new Solar().run();
}
}
This program is a mini solar system of just the Sun, the Earth and the Moon.
The Sun is in the center of the screen while the earth rotates around the Sun, similarly the Moon rotate around the Earth.
The Output that I get is only the Sun. What am I doing wrong?