Recently I’ve moved into a more advance part of OpenGL which is lighting, but as what follows is an error which I keep hitting, which is more of a logical error because despite where i place the plane it’s illumination is the same everywhere.
import java.nio.ByteBuffer;
import java.nio.FloatBuffer;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
public class window {
public static void main(String[] args){
try {
Display.setDisplayMode(new DisplayMode(800, 800));
Display.create();
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, 5, 0, 5, -10, 10);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_LIGHT0);
float light0Position[] = {3f, 3f, 2f, 1f};
float light0Color[] = {1f, 0f, 1f, 1f};
float light0Ambient[] = {0.3f, 1f, 1f, 1f};
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(16);
//GL11.glLightModel(GL11.GL_LIGHT_MODEL_AMBIENT, (FloatBuffer)byteBuffer.asFloatBuffer().put(light0Color).flip());
GL11.glLight(GL11.GL_LIGHT0, GL11.GL_DIFFUSE, (FloatBuffer) byteBuffer.asFloatBuffer().put(light0Color).flip());
GL11.glLight(GL11.GL_LIGHT0, GL11.GL_POSITION, (FloatBuffer) byteBuffer.asFloatBuffer().put(light0Position).flip());
GL11.glLight(GL11.GL_LIGHT0, GL11.GL_AMBIENT, (FloatBuffer) byteBuffer.asFloatBuffer().put(light0Ambient).flip());
GL11.glEnable(GL11.GL_NORMALIZE);
while(!Display.isCloseRequested()){
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
GL11.glLoadIdentity();
GL11.glBegin(GL11.GL_QUADS);
GL11.glNormal3f(0, 0, 1);
GL11.glVertex3f(2, 2, -3);
GL11.glVertex3f(4, 2, -3);
GL11.glVertex3f(4, 4, -3);
GL11.glVertex3f(2, 4, -3);
GL11.glEnd();
Display.update();
}
System.exit(1);
} catch (LWJGLException e) {
e.printStackTrace();
}
}
}