我正在用OpenGL ES 1.x开发一个适用于Android的小型应用程序。没有glBegin-glEnd功能,因此必须为要绘制的对象定义顶点(以及颜色和texcoord)数组,然后使用矩阵运算来移动,缩放和旋转它们。这对大型物体很好,没什么可抱怨的...在Android中绘制临时对象的最佳方式OpenGL ES 1.x
但是,如果想绘制小的“临时”对象(例如,从A点到B点的一条线),事情会变得有点烦人。因此,我创造了一些小的实用功能,如:
DrawHelper.drawLine(起点,终点)
我注意到两种方法可以做到这一点。我的问题是哪个版本更受欢迎?既然我们正在处理这样简单的帮助函数,并且这两种方法都很容易理解,那么即使潜在的速度增益很低,也可能从一开始就写得尽可能好。所以,请没有 “标杆和第一识别瓶颈” .. =)
方法1:
抽签助手有包含点(0,0,0)和(1,0,0)FloatBuffer。我每次用适当的模型视图矩阵绘制这条线,将两个点转换到所需的位置。
方法2:
抽签助手有一个虚拟FloatBuffer我用FloatBuffer.put在新的点,每次喂。
方法1对于较大的对象(如圆或其他几何形状)显然更好(?)。简单的线条或简单的三角形如何?
谢谢,我会记住这一点,但我不确定你的论点是否适用于所有情况。假设你想在不同的位置多次绘制一个简单的正方形。我从别处读到的内容表明,最好不要改变缓冲区的内容,而是在OpenGL中转换位置。当然,我也无法证实这是正确的。 (另外,可以想象glTranslate被优化为只发送3个参数,我不知道..) –
@ user2582805:对于多个位置的问题,您可以使用实例化。不,没有对glTranslate进行优化。 glTranslate始终在CPU上运行,并在堆栈上的当前4×4矩阵上相乘,然后必须将其传输到GPU。 – datenwolf
好吧,我想我会和那个一起去的。谢谢! –