我目前正在使用glutsolidsphere()来渲染球体。当然,在缩放之后,球体看起来是椭圆体。 那么有没有办法渲染具有固定像素半径的球体?我只想在特定位置(x,y,z)绘制一个具有一定半径像素(例如,r = 10像素)的球体,并确保其形状不受建模变换的影响。
答案 0 :(得分:1)
旋转,平移和缩放等转换不应影响球体的外观。请记住在所有3轴上正确缩放相同的值。或者你可以将顶点乘以常数标量,并且应该缩放球体而不会扭曲它。如果您仍然看到失真,可能是因为您的相机(高FOV倾向于在边缘附近扭曲)或错误的宽高比(重新调整openGL窗口大小不会保留宽高比)。
答案 1 :(得分:0)
缩放时,可以缩放x,y和z。如果您在每个维度中使用相同的值进行缩放,则它将保持为球形。
如果要应用始终提供相同大小的球体的缩放(以像素为单位),则必须根据视口大小定义进行缩放。这些是你给glViewport()的参数。
例如,缩放'x'时,使用因子k / width(其中宽度取自glViewport)。根据需要选择常量'k',具体取决于球体的大小。
可以使用glGet()来请求使用glViewport()发送的数据,但是应该避免从OpenGL读取数据。在最坏的情况下,它将等待管道冲洗。更好的想法是记住用于glViewport()的内容。
您是否意识到过剩已过时且不再推荐?而glutsolidsphere是基于弃用的固定功能管道OpenGL?