我正在使用OpenGL ES 1.x为Android开发一个小型应用程序。没有glBegin-glEnd功能,因此必须为要绘制的对象定义顶点(以及颜色和texcoord)阵列,然后使用矩阵运算来移动,缩放和旋转它们。这适用于大型物体,这里没有什么可抱怨的...
但是,如果要绘制小的“临时”对象(例如,从A点到B点的直线),事情就会变得有些烦人。因此,我创建了一些小的实用程序函数,例如:
DrawHelper.drawLine(起点,终点)
我注意到有两种可能的方法可以做到这一点。我的问题是首选哪个版本?由于我们正在处理这样简单的辅助函数,并且这两种方法都很容易理解,因此,即使潜在的速度增益非常低,也最好从一开始就尽可能地编写它们。因此,请不要“先进行基准测试并确定瓶颈”。.=)
方法1:
绘图助手具有包含点(0,0,0)和(1,0,0)的FloatBuffer。我每次都用适当的modelview矩阵画这条线,将两个点转换到所需的位置。
方法2:
绘图助手有一个虚拟FloatBuffer,我每次都使用FloatBuffer.put来输入新点。
对于较大的对象(例如圆形或其他几何形状),方法1显然(?)更好。简单的线条或简单的三角形怎么样?
最佳答案
您总是选择涉及较少工作的方法。与两个向量赋值相比,应用矩阵乘法需要更多的计算。同样,矩阵转换方法向GPU(整个4×4-矩阵)发送的数据量是发送两个3-向量的2.5倍。
OTOH Java增加了通过FloatBuffer的惩罚。