如何在 C++ 中使用 OpenGL 绘制 3D 超椭圆

How to draw a 3D super-ellipse with OpenGL in c++

为了在 C++ 中使用 OpenGL 创建 3D 球体,我使用了这个函数:

glutWireSphere(GLdouble radius, GLint slices, GLint stacks);

我的代码运行得很好,显示了一个旋转的线球。
但是我不知道如何编写绘制超椭圆的函数。

我知道超椭圆的公式:

如何使用此公式绘制 3D 超椭圆?

对于 s1=s2=1 你仍然可以使用 glutWireSphere。应用变换矩阵,使 (1,0,0) 变换为 (rx,0,0)(0,1,0) 变换为 (0,ry,0)(0,0,1) 变换为 (0,0,rz)。然后简单地用 glutWireSphere(1, ..., ...) 绘制身份球体。我认为 glScalef(rx,ry,rz) 会成功。

对于一般情况,您需要使用 glBegin/glEnd 或 glDrawArrays 自己生成几何图形。查看 this question 以获取一些线索。

您需要更改的一件事:

When you're done, normalize all of the vertices to smooth out the surface. If you don't do this, you'll just get a higher-res icosahedron instead of a sphere.

不是标准化,而是将 (x,y,z) 转换为 (phi, theta, R),然后通过将 phitheta 代入您的方程式来计算新的 (x',y',z')。在进行任何细分之前,您也应该对初始二十面体执行此步骤