Dear All,
I had written a following code but it gives me an exception.
if(m_Texturing && m_EnvMapOn && normals!=null){
CQ3DMatrix worldview = new CQ3DMatrix();
worldview.mul(m_ViewMatrix, m_WorldMatrix);
for (int i=0, face=0; i < nbIndex; i+=3, face++){
CQ3DVector normal = new CQ3DVector();
normal.assign(normals[face]);
normal.transformNoTrans(worldview);
if (m_NormalizeNormals){
normal.normalize(); // Maybe a scale ???
}
float UV[] = new float[2];
UV[0] = normal.m_Vector.x * 0.5f + 0.5f;
UV[1] = normal.m_Vector.y * 0.5f + 0.5f;
float norm []= new float[3];
norm[0] = normals[face].x;
norm[1] = normals[face].y;
norm[2] = normals[face].z;
m_gl.glBegin(GL.GL_TRIANGLES);
m_gl.glNormal3fv(norm,0);
m_gl.glTexCoord3fv(UV,0);
norm[0] = vertices[faces[face+faceindex].a].pos.x;
norm[1] = 0;
norm[2] = 0;
m_gl.glVertex3fv(norm,0);
norm[0] = vertices[faces[face+faceindex].b].pos.x;
m_gl.glVertex3fv(norm,0);
norm[0] = vertices[faces[face+faceindex].c].pos.x;
m_gl.glVertex3fv(norm,0);
m_gl.glEnd();
glError(m_gl.glGetError());
}
return QEDResponseCode.Q3D_RENDERER_OK;
}
SQ3DVERTEX [] Vertices = prepareVertices(vertices, nbVertices);
m_gl.glEnableClientState(GL.GL_VERTEX_ARRAY);
glError(m_gl.glGetError());
FloatBuffer buffer = FloatBuffer.allocate(3);
if(m_Texturing && !m_GenerateTexCoords){
m_gl.glEnableClientState(GL.GL_TEXTURE_COORD_ARRAY);
glError(m_gl.glGetError());
buffer.put(0,Vertices[0].u);
buffer.put(0,Vertices[1].v);
buffer.position(0);
m_gl.glTexCoordPointer(2,GL.GL_FLOAT,0,buffer);
glError(m_gl.glGetError());
}
else{
m_gl.glDisableClientState(GL.GL_TEXTURE_COORD_ARRAY);
glError(m_gl.glGetError());
}
buffer.put(0,Vertices[0].pos.x);
buffer.put(1,Vertices[0].pos.y);
buffer.put(2,Vertices[0].pos.z);
buffer.position(0);
[b]m_gl.glVertexPointer(3,GL.GL_FLOAT,0,buffer);[/b]
glError(m_gl.glGetError());
if(normals==null){
m_gl.glEnableClientState(GL.GL_NORMAL_ARRAY);
glError(m_gl.glGetError());
buffer.put(0,Vertices[0].normal.x);
m_gl.glNormalPointer(GL.GL_FLOAT,0,buffer);
glError(m_gl.glGetError());
ShortBuffer shBuf = ShortBuffer.allocate(faces.length*3);
for(int Icount=faceindex;Icount<faces.length;Icount++){
shBuf.put((short)faces[Icount].a);
shBuf.put((short)faces[Icount].b);
shBuf.put((short)faces[Icount].c);
}
shBuf.position(0);
m_gl.glDrawElements(GL.GL_TRIANGLES,(int) nbIndex,GL.GL_UNSIGNED_SHORT,shBuf);
glError(m_gl.glGetError());
m_gl.glDisableClientState(GL.GL_NORMAL_ARRAY);
glError(m_gl.glGetError());
}
else{
m_gl.glDisableClientState(GL.GL_NORMAL_ARRAY);
glError(m_gl.glGetError());
m_gl.glBegin(GL.GL_TRIANGLES);
int i;
int face;
for(i=0, face=0 ; i<nbIndex; i+=3){
buffer.put(0,normals[face].x);
buffer.put(1,normals[face].y);
buffer.put(2,normals[face].z);
m_gl.glNormal3fv(buffer);
m_gl.glArrayElement(faces[face+faceindex].a);
m_gl.glArrayElement(faces[face+faceindex].b);
m_gl.glArrayElement(faces[face+faceindex].c);
face++;
}
m_gl.glEnd();
glError(m_gl.glGetError());
m_gl.glEnableClientState(GL.GL_NORMAL_ARRAY);
glError(m_gl.glGetError());
}
m_gl.glDisableClientState(GL.GL_VERTEX_ARRAY);
glError(m_gl.glGetError());
if(m_Texturing && !m_GenerateTexCoords){
m_gl.glDisableClientState(GL.GL_TEXTURE_COORD_ARRAY);
glError(m_gl.glGetError());
}
And the exception i am getting is
Caused by: javax.media.opengl.GLException: Argument “ptr” was not a direct buffer
at com.sun.opengl.impl.GLImpl.glVertexPointer(GLImpl.java:27940)
at javax.media.opengl.DebugGL.glVertexPointer(DebugGL.java:11682)
at com.qedsoft.renderer.abstractfile.renderer.impl.CQ3DRendererOpenGL.drawFacesByIndexFlat(CQ3DRendererOpenGL.java:1083)
at com.qedsoft.renderer.abstractfile.renderer.impl.CQ3DRendererOpenGL.drawFacesByIndex(CQ3DRendererOpenGL.java:1015)
Line number 1083 is what i have saw bold in given code.
Please let me know what the problem is ?.......
Thanks To All in Advance.