3D空间OpenGL中的弯曲圆柱体(C)

时间:2020-06-23 11:32:37

标签: c opengl

我在下面写了一个函数,该函数生成一个圆柱体,该圆柱体从面向y pos的原点开始,高度为1。我怎样才能使其弯曲(向x说,这并不重要)?

void DrawCylinder(int sides, int radius)    
{
    double alpha, theta = 2 * PI / sides;
    for (alpha = 0; alpha <= 2 * PI; alpha += theta)
    {
        glColor3d(0.3 + 0.7*fabs(sin(alpha)), 0.3 + 0.7*fabs(sin(alpha)), 0.3 + 0.7*fabs(sin(alpha)));
        glBegin(GL_POLYGON);
        glVertex3d(radius*cos(alpha), 0, radius*sin(alpha)); // point 1
        glVertex3d(radius*cos(alpha), 1, radius*sin(alpha)); // point 2
        glVertex3d(radius*cos(alpha + theta), 1, radius*sin(alpha + theta)); // point 3
        glVertex3d(radius*cos(alpha + theta), 0, radius*sin(alpha + theta)); // point 4     
        glEnd();
    }
}

这里是将其视为圆环的尝试

void DrawCylinder(int sides, double cylinder_radius, int curve, double torus_radius)    
{
    double alpha, theta = 2 * PI / sides;
    double gamma, phi = 2 * PI / curve;

    for (gamma = 0; gamma <= 2*PI; gamma += phi)
    {
        for (alpha = 0; alpha <= 2 * PI; alpha += theta)
        {
            glColor3d(0.3 + 0.7*fabs(sin(alpha)), 0.3 + 0.7*fabs(sin(alpha)), 0.3 + 0.7*fabs(sin(alpha)));
            glBegin(GL_POLYGON);
            glVertex3d((torus_radius + cylinder_radius*cos(alpha))*cos(gamma), cylinder_radius*sin(alpha), (torus_radius + cylinder_radius*cos(alpha))*sin(gamma)); // point 1
            glVertex3d((torus_radius + cylinder_radius*cos(alpha))*cos(gamma + phi), cylinder_radius*sin(alpha + theta), (torus_radius + cylinder_radius*cos(alpha))*sin(gamma + phi)); // point 2
            glVertex3d((torus_radius + cylinder_radius*cos(alpha + theta))*cos(gamma + phi), cylinder_radius*sin(alpha + theta), (torus_radius + cylinder_radius*cos(alpha + theta))*sin(gamma + phi)); // point 3
            glVertex3d((torus_radius + cylinder_radius*cos(alpha + theta))*cos(gamma), cylinder_radius*sin(alpha), (torus_radius + cylinder_radius*cos(alpha))*sin(gamma)); // point 4      
            glEnd();
        }
    }   
}

我应该提到,由于某种原因,我在同时绘制4个顶点时建立了它。我想稍后再为每个多边形贴上纹理

0 个答案:

没有答案
相关问题