我想绘制10×10网格,定义地平面,使得中心是世界坐标的原点。 这是为网格中定义的每一行调用的代码。
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVerticesBuffer);
gl.glTranslatef(x, y, z);
gl.glRotatef(rz, 0, 0, 1);
gl.glRotatef(rx, 1, 0, 0);
gl.glRotatef(ry, 0, 1, 0);
gl.glDrawArrays(GL10.GL_LINES, 0, 2);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
问题是我只看到一条水平线。所以我觉得有些不对劲。
这是定义行的代码:
Line line;
for (int i = 0; i <= 10; i++) {
// horizontal lines
line = new Line(-50, 0, 0, 50, 0, 0, 0, 0, 1, 1); // blue line
line.z = (i * 100) - 50;
lines.add(line);
// draw perspective lines
line = new Line(-50, 0, 0, 50, 0, 0, 0, 0, 1, 1); // blue line
line.x = (i * 100) - 50;
line.ry = 90;
lines.add(line);
}
对于lines集合中的每一行,我在onDrawFrame中调用绘图代码。
答案 0 :(得分:3)
原因是你只画了一行。 glDrawArrays基本上从给定的数据中提取opengl原语。因此缓冲区mVerticesBuffer中的坐标由glDrawArrays绘制一次。
做你想做的事的一个简单方法是:
更简洁,更有效的方法是使用推送和弹出矩阵,但为了简单起见,如果你是opengl的新手,这应该有效。
答案 1 :(得分:1)
给你的解决方案似乎很好,应该努力解决你的问题。 也许最好的解决方案是生成一次顶点并将其存储在一个文件中,您可以一次读取文件并一次渲染网格,这在性能和速度方面会更好。