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

时间:2015-01-25 06:22:55

标签: c++ opengl 3d

要在C ++中使用OpenGL创建3D Sphere,我使用此功能:

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

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

我知道超椭圆的公式:

super-ellipse

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

1 个答案:

答案 0 :(得分:3)

对于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的一些线索。

您需要改变的一件事:

  

完成后,将所有顶点标准化以平滑曲面。   如果你不这样做,你将只获得更高分辨率的二十面体而不是球体。

取代规范化,将(x,y,z)转换为(phi, theta, R),然后通过将(x',y',z')phi替换为等式来计算新的theta。在进行任何细分之前,您还应该对初始二十面体执行此步骤