我在渲染多维数据集时遇到问题。我不知道为什么但不正确。
以下是“立方体”的两张图片:
前:
备份:
这是OpenGL代码: 顶点,面,颜色..
private void initTriangle() {
float[] coords = {
-0.5f, 0.f, 0.5f,
-0.5f, 0.f, -0.5f,
0.5f, 0.f, -0.5f,
0.5f, 0.f, 0.5f,
-0.5f, 1.f, 0.5f,
0.5f, 1.f, 0.5f,
0.5f, 1.f, -0.5f,
-0.5f, 1.f, -0.5f,
};
_nrOfVertices = coords.length;
float[] colors = {
1f, 0f, 0f, 1f, // point 1 red
0f, 1f, 0f, 1f, // point 2 green
0f, 0f, 1f, 1f, // point 3 blue
1f, 1f, 1f, 1f, // point 4 white
1f, 1f, 1f, 1f, // point 5 white
1f, 0f, 0f, 1f, // point 6 white
1f, 1f, 1f, 1f, // point 7 white
1f, 1f, 1f, 1f, // point 8 white
1f, 0f, 0f, 1f, // point 9 white
1f, 1f, 1f, 1f, // point 10 white
1f, 1f, 1f, 1f, // point 11 white
1f, 1f, 1f, 1f, // point 12 white
};
short[] indices = new short[] {
1, 2, 3, // 1
3, 4, 1, // 2
5, 6, 7, // 3
7, 8, 5, // 4
1, 4, 6, // 5
6, 5, 1, // 6
4, 3, 7, // 7
7, 6, 4, // 8
3, 2, 8, // 9
8, 7, 3, // 10
2, 1, 5, // 11
5, 8, 2, // 12
};
// float has 4 bytes, coordinate * 4 bytes
ByteBuffer vbb = ByteBuffer.allocateDirect(coords.length * 4);
vbb.order(ByteOrder.nativeOrder());
_vertexBuffer = vbb.asFloatBuffer();
// short has 2 bytes, indices * 2 bytes
ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
ibb.order(ByteOrder.nativeOrder());
_indexBuffer = ibb.asShortBuffer();
// float has 4 bytes, colors (RGBA) * 4 bytes
ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length * 4);
cbb.order(ByteOrder.nativeOrder());
_colorBuffer = cbb.asFloatBuffer();
_vertexBuffer.put(coords);
_indexBuffer.put(indices);
_colorBuffer.put(colors);
_vertexBuffer.position(0);
_indexBuffer.position(0);
_colorBuffer.position(0);
}
渲染: public void onDrawFrame(GL10 gl){ //gl.glFrontFace(GL10.GL_CCW); gl.glClearColor(0f,0f,0f,1.0f);
gl.glLoadIdentity();
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
// set rotation
gl.glRotatef(_xAngle, 1f, 0f, 0f);
gl.glRotatef(_yAngle, 0f, 1f, 0f);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexBuffer);
gl.glColorPointer(4, GL10.GL_FLOAT, 0, _colorBuffer);
gl.glDrawElements(GL10.GL_TRIANGLES, _nrOfVertices, GL10.GL_UNSIGNED_SHORT, _indexBuffer);
gl.glFrontFace(GL10.GL_CCW);
}
这里的obj内容:
# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware
# File Created: 19.02.2012 13:31:12
mtllib box22.mtl
#
# object Box01
#
v -0.5000 0.0000 0.5000
v -0.5000 0.0000 -0.5000
v 0.5000 0.0000 -0.5000
v 0.5000 0.0000 0.5000
v -0.5000 1.0000 0.5000
v 0.5000 1.0000 0.5000
v 0.5000 1.0000 -0.5000
v -0.5000 1.0000 -0.5000
# 8 vertices
vn 0.0000 -1.0000 -0.0000
vn 0.0000 1.0000 -0.0000
vn 0.0000 0.0000 1.0000
vn 1.0000 0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
vn -1.0000 0.0000 -0.0000
# 6 vertex normals
vt 1.0000 0.0000 0.0000
vt 1.0000 1.0000 0.0000
vt 0.0000 1.0000 0.0000
vt 0.0000 0.0000 0.0000
# 4 texture coords
g Box01
usemtl wire_177088026
f 1/1/1 2/2/1 3/3/1
f 3/3/1 4/4/1 1/1/1
f 5/4/2 6/1/2 7/2/2
f 7/2/2 8/3/2 5/4/2
f 1/4/3 4/1/3 6/2/3
f 6/2/3 5/3/3 1/4/3
f 4/4/4 3/1/4 7/2/4
f 7/2/4 6/3/4 4/4/4
f 3/4/5 2/1/5 8/2/5
f 8/2/5 7/3/5 3/4/5
f 2/4/6 1/1/6 5/2/6
f 5/2/6 8/3/6 2/4/6
# 12 faces
希望你能帮助我。
感谢您的关注(:
答案 0 :(得分:1)
确保您的指数正确无误。
OBJ格式开始计数,索引为1.但是,数组中的实际索引将从0开始。因此,您必须从OBJ文件中的每个索引中减去1,以使其按预期工作。