一开始我也很难使用通用坐标系。
我最终做的对我来说更有意义的是使用 OpenGL 坐标系,就好像我在真实世界坐标系中使用真实对象一样。
我所做的是:我制作了一个 TARDIS(来自电视节目神秘博士)的蓝图,它的尺寸以英寸和英尺为单位构建蓝色盒子。
从那里,我采用了 GL 坐标系,对于每个“1”GL 单位,我将其设为“1”英尺,即 12 英寸。
并且 - 基于 0,0,0 作为我的 TARDIS 的中心点,我只是通过代码手工绘制了 TARDIS,正如我在蓝图上看到的那样,从我在蓝图上看到的转换精确的尺寸。
这是我所做的一个小例子:
glBegin( GL_QUADS );
glNormal3f( 1.0f, 0.0f, 0.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(15.0f/12.0f, myTop, 2.0f-(ONEINCH*0.25f));
glTexCoord2f(0.0f, 1.0f); glVertex3f(3.25f/12.0f, myTop, 2.0f-(ONEINCH*0.25f));
glTexCoord2f(1.0f, 1.0f); glVertex3f(3.25f/12.0f, myTop-(14.5f/12.0f), 2.0f - (ONEINCH*0.25f));
glTexCoord2f(1.0f, 0.0f); glVertex3f(15.0f/12.0f, myTop-(14.5f/12.0f), 2.0f - (ONEINCH*0.25f));
glEnd();
我在本练习中学到的第一件事是 - GL 单位是通用单位。因此,应用一个我更熟悉的系统 - 英尺和英寸 - 让我们更容易专注于 GL,而不是这个单位到底是什么意思?
一旦开始绘图,我就可以更有效地使用 gluPerspective,这有助于我理解视口分辨率(不要与屏幕分辨率混淆)只需要处理一次,那就是在利用gluPerspective 命令(如下)
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,250.0f);
所以回答您的问题:浮点值没有最大值,只有您正在处理的浮点数的准确度级别。
例如,在我上面的透视示例中,我将视口放在非常近的位置(0.1 GL 单位,即 1.2 英寸),并将距离设置为 250 GL 单位,或 250 英尺的距离。
我认为这部分是 OpenGL 的初衷。它是通用单位,因为如果您有一个真实世界的单位系统来再次测量它,那么三维设计会更有意义。
我的建议是:不要认为 GL 单位除了与小规模和大规模的浮点不准确性相关的误差程度之外还有界限或限制。
事实上,我建议将其与现实世界的单位进行比较。我以英尺和英寸为单位工作。公制和米是相当普遍的。如果这些对你不起作用,那就弥补一个。
这是我构建的 TARDIS:
https://universalbri.wordpress.com/2015/05/24/creators-journal-holodeck-management-system-progress-10/
我正在开发一款包含所有这些内容的游戏,一款没有战斗的星际迷航 Online,现在正在做数据库工作 (SQL Server),OpenGL 是问题的一部分:我可以使用自己的引擎而不是利用其他人的引擎。
答案是肯定的,我可以,事实上它更可取。
祝你好运