例如,我可以将我绘制实体的位置与屏幕相关联,然后再将它们发送到OpenGL - 或者:我给OpenGL提供相对于游戏世界的直接坐标,当然这些坐标的范围要大得多。
答案 0 :(得分:5)
没有速度问题,但您会发现准确性问题,因为您的数字之间的差异与数字的大小相比会非常小。
例如,如果模型以(0,0,0)
为中心且为10 x 10 x 10,那么模型两侧的两个点位于(-5,-5,-5)
和(5,5,5)
。如果同一模型以(1000,1000,1000)
为中心,则您的积分为(995,995,995)
和(1005,1005,1005)
。
虽然绝对差异相同,但相对于坐标的差异不是。
这可能会导致舍入错误并显示伪影。
您应该排列模型的坐标,以便模型的中心位于(0,0,0)。
答案 1 :(得分:5)
较大值的速度与相同数据类型的较小值相同。但是如果你想要超过正常的32位精度并启用类似GL_EXT_vertex_attrib_64bit的东西,那么可能会有性能损失。
允许使用较大的值,但除标准浮点精度问题外,需要注意的另一件事是深度缓冲区的精度。
深度精度是非线性分布的。因此,对于遥远的事物来说,它更精确地靠近并且不那么精确。因此,如果您希望能够为顶点坐标使用各种值,请注意,如果您打算将非常大的物体渲染到相机附近非常小的物体,您可能会看到z-fighting伪像。将近和远剪裁平面设置为尽可能接近实际场景范围将有所帮助,但可能不足以解决问题。有关更多详细信息,请参阅http://www.opengl.org/resources/faq/technical/depthbuffer.htm,尤其是最后两点。
另外,我知道您询问了顶点位置,但纹理坐标可能有超出正常浮点规则的额外精度限制。指定纹理坐标(9999999.5,9999999.5)并期望它正确包装到(0..1,0..1)范围可能无法正常工作(取决于实现/硬件)。
答案 2 :(得分:3)
无论操作数的大小如何,浮点流水线的操作速度都是恒定的。
唯一的危险是获得异常大或小的数字,其中错误失控,最终导致数字不正常。