Hello.
I wont to create cube using Vertex Array but unfortunately I have problem. The problem is that the only one wall appear with second (left wall) something bad happening.
I also want to add that I haven’t any problem with creating cube using immediate mode.
OK, this is my code?
package com.applet;
import static org.lwjgl.opengl.GL11.GL_COLOR_ARRAY;
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
import static org.lwjgl.opengl.GL11.GL_DEPTH_TEST;
import static org.lwjgl.opengl.GL11.GL_LEQUAL;
import static org.lwjgl.opengl.GL11.GL_MODELVIEW;
import static org.lwjgl.opengl.GL11.GL_PERSPECTIVE_CORRECTION_HINT;
import static org.lwjgl.opengl.GL11.GL_PROJECTION;
import static org.lwjgl.opengl.GL11.GL_QUADS;
import static org.lwjgl.opengl.GL11.GL_VERTEX_ARRAY;
import static org.lwjgl.opengl.GL11.glClear;
import static org.lwjgl.opengl.GL11.glClearDepth;
import static org.lwjgl.opengl.GL11.glColorPointer;
import static org.lwjgl.opengl.GL11.glDepthFunc;
import static org.lwjgl.opengl.GL11.glDisableClientState;
import static org.lwjgl.opengl.GL11.glDrawArrays;
import static org.lwjgl.opengl.GL11.glEnable;
import static org.lwjgl.opengl.GL11.glEnableClientState;
import static org.lwjgl.opengl.GL11.glLoadIdentity;
import static org.lwjgl.opengl.GL11.glMatrixMode;
import static org.lwjgl.opengl.GL11.glShadeModel;
import static org.lwjgl.opengl.GL11.glVertexPointer;
import static org.lwjgl.opengl.GL11.glViewport;
import static org.lwjgl.util.glu.GLU.gluPerspective;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.nio.FloatBuffer;
import javax.swing.JApplet;
import org.lwjgl.BufferUtils;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.GL11;
import com.Conf;
public class CubeVA extends JApplet {
/**
*
*/
private static final long serialVersionUID = -730031275017948496L;
private Canvas canvas;
private Thread gameThread;
boolean running = false;
public void startLWJGL(){
gameThread = new Thread (){
public void run(){
running = true;
try {
Display.setParent(canvas);
Display.create();
Display.setVSyncEnabled(true);
initGL();
} catch (LWJGLException e) {
e.printStackTrace();
}
gameLoop();
}
};
gameThread.start();
}
public void stopLWJGL(){
running = false;
try {
gameThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void destroy(){
remove(canvas);
super.destroy();
}
public void init(){
setLayout(new BorderLayout());
canvas = new Canvas(){
/**
*
*/
private static final long serialVersionUID = 5972822387678455353L;
public final void addNotify(){
super.addNotify();
startLWJGL();
}
public final void removeNotify(){
stopLWJGL();
super.removeNotify();
}
};
canvas.setSize(Conf.W, Conf.H);
setSize(Conf.W, Conf.H);
canvas.setBackground(Color.BLACK);
canvas.setFocusable(true);
canvas.requestFocus();
canvas.setIgnoreRepaint(false);
add(canvas);
}
private void initGL() {
glViewport(0, 0, Conf.W,Conf.H); // Reset The Current Viewport
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, ((float)Conf.W / (float)Conf.H) , 0.1f, 100f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glShadeModel(GL11.GL_SMOOTH); // Enables Smooth Shading
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Test To Do
GL11.glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST); // Really Nice Perspective Calculations
}
float rquad; // Angle For The Quad
public void gameLoop(){
final int amountOfVertices = 8;
final int vertexSize = 3;
final int colorSize = 3;
FloatBuffer vertexData = BufferUtils.createFloatBuffer(amountOfVertices * vertexSize);
vertexData.put(new float[]{-0.5f, 0.5f, 0.0f, 0.5f, 0.5f, 0.0f, 0.5f, -0.5f, 0.0f, -0.5f, -0.5f, 0.0f, 0.5f, 0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.5f, -0.5f, -1.0f, 0.5f, 0.5f, -1.0f});
vertexData.flip();
FloatBuffer colorData = BufferUtils.createFloatBuffer(amountOfVertices * colorSize);
colorData.put(new float[]{1, 0.2f, 0.2f, 0.2f, 1, 0.2f, 0.2f, 0.2f, 1});
colorData.flip();
while(running) {
update();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();//Matrix reseting.
GL11.glTranslatef(0.0f, 0.0f, -6.0f); // Move Right And Into The Screen
GL11.glRotatef(rquad, 0.0f, 1.0f, 0.5f); // Rotate The Cube On X, Y & Z
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glVertexPointer(vertexSize, 0, vertexData);
glColorPointer(colorSize, 0, colorData);
glDrawArrays(GL_QUADS, 0, amountOfVertices);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
Display.sync(60);
Display.update();
}
Display.destroy();
}
private void update(){
rquad -= 1.55f; // Decrease The Rotation Variable For The Quad
}
}