2014-05-24 91 views
1

如何创建如此的圆柱体?如何在OpenGL中设置(创建)切片圆柱体

http://www.eicac.co.uk/Images/SLICED-CYLINDER.png

我猜gluCylinder是不是一种选择?

+3

'gluCylinder()'将无法创建那种圆柱体。您必须生成顶点来描述形状。一些基本的几何不难。我认为你应该自己尝试这样做,并让我们知道你是否遇到困难。 :) –

+0

我非常肯定的是***不是***缸,两端不是垂直于革命轴。如果您导出顶部圆柱形截面的平面方程,并使用该方程计算顶点的高度,您最终必须计算自己,那么可以生成该平面。 –

回答

1

与一个色带和两个风扇创建它

让我们假设该点[0, 0, 0]是在该形状的底部和Z轴的中心向上。使用图像中的常量。

bottom cap

一个简单的光盘。

glBegin(GL_TRIANGLE_FAN) 
glVertex3d(0.0, 0.0, 0.0) // center 
for angle from 0 to π (whatever step) 
    double x = 0.5 * D * cos(angle); 
    double y = 0.5 * D * sin(angle); 
    glVertex3d(x, y, 0.0); 
glEnd(); 

侧壁

我们需要计算实际斜率功能。 这将是y = a * x + b的形式,并有点(0.0, H)(0.5*D, H2)

因此,我们必须解决的ab。我们有b = Ha = (H2 - H)/0.5 * D

double a = (H2 - H)/0.5 * D; 
double b = H; 

glBegin(GL_TRIANGLE_STRIP) 
for angle from 0 to π (whatever step) 
    double x = 0.5 * D * cos(angle); 
    double y = 0.5 * D * sin(angle); 
    double height = a * x + b; 
    glVertex3d(x, y, 0.0); 
    glVertex3d(x, y, height); 
glEnd(); 

顶盖

我们结合前面的步骤和密封顶部。

double a = (H2 - H)/0.5 * D; 
double b = H; 

glBegin(GL_TRIANGLE_FAN) 
glVertex3d(0.0, 0.0, H) // center 
for angle from 0 to π (whatever step) 
    double x = 0.5 * D * cos(angle); 
    double y = 0.5 * D * sin(angle); 
    double height = a * x + b; 
    glVertex3d(x, y, height); 
glEnd(); 
相关问题