如何在OpenGL ES Android中绘制网格线?

如何在OpenGL ES Android中绘制网格线?,第1张

概述我想绘制10×10网格,定义地平面,使得中心是世界坐标的原点. 这是为网格中定义的每一行调用的代码. gl.glMatrixMode(GL10.GL_MODELVIEW);gl.glLoadIdentity();gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVer 我想绘制10×10网格,定义地平面,使得中心是世界坐标的原点.
这是为网格中定义的每一行调用的代码.

gl.glMatrixMode(GL10.GL_MODELVIEW);gl.glLoadIDentity();gl.glEnableClIEntState(GL10.GL_VERTEX_ARRAY);gl.glVertexPointer(3,GL10.GL_float,mVerticesBuffer);gl.glTranslatef(x,y,z);gl.glrotatef(rz,1);gl.glrotatef(rx,1,0);gl.glrotatef(ry,0);gl.glDrawArrays(GL10.GL_lines,2);gl.gldisableClIEntState(GL10.GL_VERTEX_ARRAY);

问题是我只看到一条水平线.所以我觉得有些不对劲.

这是定义行的代码:

line line;for (int i = 0; i <= 10; i++) {    // horizontal lines    line =  new line(-50,50,1);  // blue line    line.z = (i * 100) - 50;    lines.add(line);    // draw perspective lines    line =  new line(-50,1);  // blue line    line.x = (i * 100) - 50;    line.ry = 90;     lines.add(line);}

对于lines集合中的每一行,我在onDrawFrame中调用绘图代码.

解决方法 原因是因为你只画了一行. glDrawArrays基本上从给定的数据中提取opengl原语.因此缓冲区mVerticesBuffer中的坐标由glDrawArrays绘制一次.

做你想做的事的一个简单方法是:

>旋转/平移到起始位置
>使用glDrawArrays()绘制第一行;
>使用gl.glTranslatef(somenumber,0);
>再次使用glDrawArrays()调用;
>使用gl.glrotatef(90,0);围绕y轴旋转(或者以0为中心的轴)
>(也许在轴上转回以获得相同的起始位置)
>再次执行第2,第3和第4个要点.

一个更整洁,更有效的方法是使用推送和d出矩阵,但为了简单起见,如果你是opengl的新手,这应该有效.

总结

以上是内存溢出为你收集整理的如何在OpenGL ES Android中绘制网格线?全部内容,希望文章能够帮你解决如何在OpenGL ES Android中绘制网格线?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1128288.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存