Android OpenGL和透视图与多边形/模型大小

Android OpenGL和透视图与多边形/模型大小,android,opengl-es,camera,perspective,Android,Opengl Es,Camera,Perspective,我在安卓上玩OpenGL已经有一段时间了,我觉得我已经能够解决很多问题了。我一直在学习《你好,Android!》一书和NeHe 3D世界教程的Android端口。有趣的是,两者在实现上有点不同,因此将两者的内容拼凑在一起非常有趣。问题是,HA教程让您构建一个旋转立方体,并使用非常大的int值。立方体基本上是65536x65536。收缩这些值会显著收缩立方体。然而,内河港使用的浮筒要小得多。这个小世界的高度只有6.0,但从相机的角度看,它看起来像是你大约有1.0-2.0个单位高。我已经疯狂地比较和

我在安卓上玩OpenGL已经有一段时间了,我觉得我已经能够解决很多问题了。我一直在学习《你好,Android!》一书和NeHe 3D世界教程的Android端口。有趣的是,两者在实现上有点不同,因此将两者的内容拼凑在一起非常有趣。问题是,HA教程让您构建一个旋转立方体,并使用非常大的int值。立方体基本上是65536x65536。收缩这些值会显著收缩立方体。然而,内河港使用的浮筒要小得多。这个小世界的高度只有6.0,但从相机的角度看,它看起来像是你大约有1.0-2.0个单位高。我已经疯狂地比较和对比了这两者,试图找出这是如何做到的,但结果却是空洞无物。我可以看出NeHe代码不正常,而HA代码正常。例如,它应用一个glNormal3f函数将较大的值降到1,0,0,然后使用TRIANGLE_STRIP构建,这似乎是一种在短时间内泵送大量几何体的快速方法。作为一个OpenGL新手,我不能确定这是否是原因,或者这是否只是让以后更容易绘制和应用纹理。这可能是不相关的,但是NeHe教程将顶点/纹理缓冲区作为GL_FLOAT输入,而HA将它们作为GL_FIXED输入。将后者改为前者会导致许多丑陋的规划


我对viewport和translatef(这将我放在旋转的立方体中)做了很多工作,但我似乎不知道它们是如何管理透视图和周围多边形的大小的。有人能解释一下吗?谢谢。

我不确定这篇
HA教程是什么,但请检查他们是否使用各种OpenGL ES函数的定点版本(通常使用
x
后缀,而不是
f
)。如果是这样,请记住OpenGL ES定点格式是S15.16,因此65536映射到1.0f或1.0f左右。

我非常确定glNormal*设置顶点的法向量(用于照明),而不规范化该值。此外,这可能会帮助您理解透视图。