如何在现代opengl中绘制圆柱体

时间:2015-10-01 09:06:07

标签: c++ opengl math shader

我的问题很简单,如何在现代OpenGL中绘制圆柱?我将GLFW与OpenGL 3.x一起使用。我的想法首先是创建一个函数,计算底部和顶部的顶点位置作为圆,然后在这些顶点之间绘制线。但我不知道如何实现这一点..有没有人有一个很好的解决方案?

2 个答案:

答案 0 :(得分:1)

您可以使用三角形条带并在底部生成一个顶点,然后在顶部生成一个顶点。这应该很容易产生副作用。然后只用三角形扇子生成帽子,你就不要了。为了简化操作,您可以使用模型视图矩阵将圆柱移动到您想要的位置。这样你只需要在x / y平面上有一个圆或类似的东西,所以数学很简单。

考虑到性能,请考虑使用预编译对象和/或顶点数组。

答案 1 :(得分:1)

我现在已经使用了一段时间了,我希望它能在将来帮助人们。

struct {
   GLfloat x,z, y_start, y_end;
}each_pole; // struct
std::vector<each_pole> each_pole_vector; // vector of structs

//Cylinder with y axis up
GLfloat cylinder_height = 1.0f,
        cylinder_radius = 0.5f,
        nr_of_points_cylinder = 360.f;

for (int i = 0; i < nr_of_points_cylinder; ++i)
{
    GLfloat u = i / (GLfloat)nr_of_points_cylinder;

    //Where the cylinder is in the x and z positions (3D space) 
    each_pole.x = center.x 
    + cylinder_radius*cos(2*M_PI*u); 
    each_pole.z = center.z 
    + cylinder_radius*sin(2*M_PI*u); 

    each_pole.y_start = 0.0f;
    each_pole.y_end = cylinder_height;

    each_pole_vector.push_back(each_pole);

}

return each_pole_vector;