我想绘制 10 x 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);
Run Code Online (Sandbox Code Playgroud)
问题是我只看到一条水平线。所以我觉得有些不对劲。
这是定义行的代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
对于lines 集合中的每一行,我调用onDrawFrame 中的绘图代码。
原因是因为你只画了一条线。glDrawArrays 基本上从给定的数据中绘制 opengl 图元。因此缓冲区 mVerticesBuffer 中的坐标由 glDrawArrays 绘制一次。
做你想做的事情的一个简单方法是:
一种更整洁、更有效的方法是使用推入和弹出矩阵,但为了简单起见,如果您是 opengl 的新手,这应该可行。
| 归档时间: |
|
| 查看次数: |
8804 次 |
| 最近记录: |