0

我目前正在使用 glutsolidsphere() 来渲染一个球体。当然,缩放后,球体看起来是一个椭球体。那么有没有办法渲染一个具有固定像素半径的球体?我只想在某个位置(x,y,z)绘制一个具有一定像素半径(例如,r = 10 像素)的球体,并确保其形状不会受到建模转换的影响。

4

2 回答 2

1

旋转、平移和缩放等变换不应影响球体的外观。请记住在所有 3 个轴上按相同的值正确缩放。或者您可以将顶点乘以一个常数标量,这样就可以缩放球体而不会使其变形。如果您仍然看到失真,可能是因为您的相机(高 FOV 往往会在边缘附近失真)或错误的纵横比(重新调整 openGL 窗口的大小不会保留纵横比)。

于 2012-07-30T14:19:44.173 回答
0

缩放时,您可以缩放 x、y 和 z。如果在每个维度上使用相同的值进行缩放,它将保持为球体。

如果要应用始终提供相同大小的球体的缩放(以像素为单位),则必须根据视口大小定义进行缩放。这些是你给 glViewport() 的参数。

例如,当缩放“x”时,使用因子 k/width(其中宽度取自 glViewport)。根据球体的大小,根据需要选择常量“k”。

可以使用 glGet() 请求通过 glViewport() 发送的数据,但应避免从 OpenGL 读取数据。在最坏的情况下,它将等待管道刷新。一个更好的主意是记住 glViewport() 使用了什么。

您是否意识到 glut 已经过时且不再推荐?那个 glutsolidsphere 基于已弃用的固定功能管道 OpenGL?

于 2012-07-30T14:16:09.090 回答