Dark
09.10.2013, 18:56
Hey lang nicht mehr hier gewesen,
ich habe folgendes Problem, ich versuche derzeit VBO's zu verstehen, und leider ist dieser teil relativ doof in meinem Buch beschrieben.
Wenn ich nun Folgenden Code in einem NEWT Window (Ka ob das wichtig ist) ausführe:
final int SIZE_OF_FLOAT = 4;
final int SIZE_OF_INT = 4;
int numOfNames = 4;
int vertexBufferSizeInBytes = SIZE_OF_FLOAT * 3 * 3;
int faceListBufferSizeInBytes = SIZE_OF_INT * 3 * 3;
ByteBuffer bb = ByteBuffer.allocateDirect(vertexBufferSizeInBytes) ;
bb.order(ByteOrder.nativeOrder());
vertices = bb.asFloatBuffer();
bb = ByteBuffer.allocateDirect(vertexBufferSizeInBytes) ;
bb.order(ByteOrder.nativeOrder());
normals = bb.asFloatBuffer();
bb = ByteBuffer.allocateDirect(faceListBufferSizeInByte s);
bb.order(ByteOrder.nativeOrder());
faceList = bb.asIntBuffer();
bb = ByteBuffer.allocateDirect(vertexBufferSizeInBytes) ;
bb.order(ByteOrder.nativeOrder());
colors = bb.asFloatBuffer();
bb = ByteBuffer.allocateDirect(numOfNames * SIZE_OF_INT);
bb.order(ByteOrder.nativeOrder());
nameBuffer = bb.asIntBuffer();
GL2 gl2 = gl.getGL2();
vertices.put(0f); vertices.put(0f); vertices.put(0f);
vertices.put(1f); vertices.put(0f); vertices.put(0f);
vertices.put(0f); vertices.put(1f); vertices.put(0f);
normals.put(0f); normals.put(0f); normals.put(1f);
normals.put(0f); normals.put(0f); normals.put(1f);
normals.put(0f); normals.put(0f); normals.put(1f);
colors.put((float)Math.random()); colors.put((float)Math.random()); colors.put((float)Math.random());
colors.put((float)Math.random()); colors.put((float)Math.random()); colors.put((float)Math.random());
colors.put((float)Math.random()); colors.put((float)Math.random()); colors.put((float)Math.random());
faceList.put(0); faceList.put(1); faceList.put(2);
vertices.flip();
normals.flip();
faceList.flip();
colors.flip();
/*vertices.rewind();
normals.rewind();
faceList.rewind();*/
gl2.glGenBuffers(numOfNames, nameBuffer);
bufferNameVertices = nameBuffer.get();
bufferNameNormals = nameBuffer.get();
bufferNameColors = nameBuffer.get();
bufferNameFaceList = nameBuffer.get();
gl2.glBindBuffer(gl2.GL_ARRAY_BUFFER, bufferNameVertices);
gl2.glBufferData(gl2.GL_ARRAY_BUFFER, vertexBufferSizeInBytes, vertices,gl2.GL_STATIC_DRAW);
gl2.glBindBuffer(gl2.GL_ARRAY_BUFFER, bufferNameNormals);
gl2.glBufferData(gl2.GL_ARRAY_BUFFER, vertexBufferSizeInBytes, normals,gl2.GL_STATIC_DRAW);
gl2.glBindBuffer(gl2.GL_ARRAY_BUFFER, bufferNameColors);
gl2.glBufferData(gl2.GL_ARRAY_BUFFER, vertexBufferSizeInBytes, colors,gl2.GL_STATIC_DRAW);
gl2.glBindBuffer(gl2.GL_ARRAY_BUFFER, 0);
gl2.glBindBuffer(gl2.GL_ELEMENT_ARRAY_BUFFER, bufferNameFaceList);
gl2.glBufferData(gl2.GL_ELEMENT_ARRAY_BUFFER, faceListBufferSizeInBytes, faceList,GL2.GL_STATIC_DRAW);
gl2.glBindBuffer(gl2.GL_ELEMENT_ARRAY_BUFFER, 0);
gl2.glEnableClientState(GL2.GL_VERTEX_ARRAY);
gl2.glEnableClientState(GL2.GL_NORMAL_ARRAY);
gl2.glEnableClientState(GL2.GL_COLOR_ARRAY);
gl2.glBindBuffer(GL2.GL_ARRAY_BUFFER, bufferNameVertices);
gl2.glVertexPointer(3 , GL2.GL_FLOAT, 0, 0);
gl2.glBindBuffer(GL2.GL_ARRAY_BUFFER, bufferNameNormals);
gl2.glVertexPointer(3 , GL2.GL_FLOAT, 0, 0);
gl2.glBindBuffer(GL2.GL_ARRAY_BUFFER, bufferNameColors);
gl2.glVertexPointer(3 , GL2.GL_FLOAT, 0, 0);
gl2.glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, bufferNameFaceList);
gl2.glDrawElements(GL2.GL_TRIANGLES,3,GL2.GL_UNSIG NED_INT,0L);
gl.glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, 0);
gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, 0);
gl2.glDisableClientState(GL2.GL_VERTEX_ARRAY);
gl2.glDisableClientState(GL2.GL_NORMAL_ARRAY);
gl2.glDisableClientState(GL2.GL_COLOR_ARRAY);
Eigtl sollte dieser Code ein Einfaches Dreieck mit Face Zeichnen, jedoch wird von JAVA ein "Fatal Error" Ausgelöst und die VM schmiert ab.
Ich hab jetzt schon mehrfach drübergeschaut, bin aber bestimmt schon betriebsblind. Evtl kennt sich ja einer Genug mit GL aus so das er mir helfen kann.
Danke schonmal.
ich habe folgendes Problem, ich versuche derzeit VBO's zu verstehen, und leider ist dieser teil relativ doof in meinem Buch beschrieben.
Wenn ich nun Folgenden Code in einem NEWT Window (Ka ob das wichtig ist) ausführe:
final int SIZE_OF_FLOAT = 4;
final int SIZE_OF_INT = 4;
int numOfNames = 4;
int vertexBufferSizeInBytes = SIZE_OF_FLOAT * 3 * 3;
int faceListBufferSizeInBytes = SIZE_OF_INT * 3 * 3;
ByteBuffer bb = ByteBuffer.allocateDirect(vertexBufferSizeInBytes) ;
bb.order(ByteOrder.nativeOrder());
vertices = bb.asFloatBuffer();
bb = ByteBuffer.allocateDirect(vertexBufferSizeInBytes) ;
bb.order(ByteOrder.nativeOrder());
normals = bb.asFloatBuffer();
bb = ByteBuffer.allocateDirect(faceListBufferSizeInByte s);
bb.order(ByteOrder.nativeOrder());
faceList = bb.asIntBuffer();
bb = ByteBuffer.allocateDirect(vertexBufferSizeInBytes) ;
bb.order(ByteOrder.nativeOrder());
colors = bb.asFloatBuffer();
bb = ByteBuffer.allocateDirect(numOfNames * SIZE_OF_INT);
bb.order(ByteOrder.nativeOrder());
nameBuffer = bb.asIntBuffer();
GL2 gl2 = gl.getGL2();
vertices.put(0f); vertices.put(0f); vertices.put(0f);
vertices.put(1f); vertices.put(0f); vertices.put(0f);
vertices.put(0f); vertices.put(1f); vertices.put(0f);
normals.put(0f); normals.put(0f); normals.put(1f);
normals.put(0f); normals.put(0f); normals.put(1f);
normals.put(0f); normals.put(0f); normals.put(1f);
colors.put((float)Math.random()); colors.put((float)Math.random()); colors.put((float)Math.random());
colors.put((float)Math.random()); colors.put((float)Math.random()); colors.put((float)Math.random());
colors.put((float)Math.random()); colors.put((float)Math.random()); colors.put((float)Math.random());
faceList.put(0); faceList.put(1); faceList.put(2);
vertices.flip();
normals.flip();
faceList.flip();
colors.flip();
/*vertices.rewind();
normals.rewind();
faceList.rewind();*/
gl2.glGenBuffers(numOfNames, nameBuffer);
bufferNameVertices = nameBuffer.get();
bufferNameNormals = nameBuffer.get();
bufferNameColors = nameBuffer.get();
bufferNameFaceList = nameBuffer.get();
gl2.glBindBuffer(gl2.GL_ARRAY_BUFFER, bufferNameVertices);
gl2.glBufferData(gl2.GL_ARRAY_BUFFER, vertexBufferSizeInBytes, vertices,gl2.GL_STATIC_DRAW);
gl2.glBindBuffer(gl2.GL_ARRAY_BUFFER, bufferNameNormals);
gl2.glBufferData(gl2.GL_ARRAY_BUFFER, vertexBufferSizeInBytes, normals,gl2.GL_STATIC_DRAW);
gl2.glBindBuffer(gl2.GL_ARRAY_BUFFER, bufferNameColors);
gl2.glBufferData(gl2.GL_ARRAY_BUFFER, vertexBufferSizeInBytes, colors,gl2.GL_STATIC_DRAW);
gl2.glBindBuffer(gl2.GL_ARRAY_BUFFER, 0);
gl2.glBindBuffer(gl2.GL_ELEMENT_ARRAY_BUFFER, bufferNameFaceList);
gl2.glBufferData(gl2.GL_ELEMENT_ARRAY_BUFFER, faceListBufferSizeInBytes, faceList,GL2.GL_STATIC_DRAW);
gl2.glBindBuffer(gl2.GL_ELEMENT_ARRAY_BUFFER, 0);
gl2.glEnableClientState(GL2.GL_VERTEX_ARRAY);
gl2.glEnableClientState(GL2.GL_NORMAL_ARRAY);
gl2.glEnableClientState(GL2.GL_COLOR_ARRAY);
gl2.glBindBuffer(GL2.GL_ARRAY_BUFFER, bufferNameVertices);
gl2.glVertexPointer(3 , GL2.GL_FLOAT, 0, 0);
gl2.glBindBuffer(GL2.GL_ARRAY_BUFFER, bufferNameNormals);
gl2.glVertexPointer(3 , GL2.GL_FLOAT, 0, 0);
gl2.glBindBuffer(GL2.GL_ARRAY_BUFFER, bufferNameColors);
gl2.glVertexPointer(3 , GL2.GL_FLOAT, 0, 0);
gl2.glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, bufferNameFaceList);
gl2.glDrawElements(GL2.GL_TRIANGLES,3,GL2.GL_UNSIG NED_INT,0L);
gl.glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, 0);
gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, 0);
gl2.glDisableClientState(GL2.GL_VERTEX_ARRAY);
gl2.glDisableClientState(GL2.GL_NORMAL_ARRAY);
gl2.glDisableClientState(GL2.GL_COLOR_ARRAY);
Eigtl sollte dieser Code ein Einfaches Dreieck mit Face Zeichnen, jedoch wird von JAVA ein "Fatal Error" Ausgelöst und die VM schmiert ab.
Ich hab jetzt schon mehrfach drübergeschaut, bin aber bestimmt schon betriebsblind. Evtl kennt sich ja einer Genug mit GL aus so das er mir helfen kann.
Danke schonmal.