0

我正在使用 OpenGL ES 1.x 为 Android 开发一个小应用程序。没有 glBegin-glEnd 功能,因此必须为要绘制的对象定义顶点(以及颜色和 texcoord)数组,然后使用矩阵运算来移动、缩放和旋转它们。这适用于大型物体,这里没有什么可抱怨的......

但是,如果想要绘制小的“临时”对象(例如,只是从 A 点到 B 点的一条线),事情就会变得有点烦人。因此,我创建了一些小的实用功能,例如:

DrawHelper.drawLine(起点、终点)

我注意到有两种可能的方法来做到这一点。我的问题是首选这些版本中的哪一个?由于我们正在处理如此简单的辅助函数,并且这两种方法都简单易懂,因此最好从一开始就将它们写得尽可能好,即使潜在的速度增益非常低。所以请不要“先进行基准测试并确定瓶颈”.. =)

方法一:

绘图助手具有包含点 (0,0,0) 和 (1,0,0) 的 FloatBuffer。我每次都使用适当的模型视图矩阵绘制这条线,将两个点转换到所需的位置。

方法二:

绘图助手有一个虚拟的 FloatBuffer,我每次都使用 FloatBuffer.put 来输入新点。

方法 1 显然 (?) 更适合较大的对象,例如圆形或其他几何形状。简单的直线或简单的三角形怎么样?

4

1 回答 1

1

您总是选择涉及较少工作的方法。应用矩阵乘法比两个向量分配需要更多的计算。此外,矩阵变换方法向 GPU 发送的数据(整个 4×4 矩阵)是发送两个 3 向量的 2.5 倍。

OTOH Java 增加了通过 FloatBuffer 的惩罚。

于 2013-10-28T13:23:08.717 回答