c++ - 如何使用 OpenGL C++ 绘制双曲面?

标签 c++ opengl

我正在尝试使用 OpenGL 在 C++ 中绘制二次曲面。

二次曲面是球体,Hyperboloides一片叶子和两片叶子。为了绘制它们,我只使用了每个的参数方程。我画的球体

例子:球体的参数方程是:

Sphere

为了用这些方程式绘制球体,我在 OpenGL 中所做的就是在原点 x0y0z0 上绘制一个球体 等于零:

void Sphere(){
    GLfloat x, y, z, alpha, beta; // Storage for coordinates and angles
    GLfloat radius = 1.0f;
    int gradation = 20;
    glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
    for (float alpha = 0.0; alpha < PI; alpha += PI/gradation)
    {
        glBegin(GL_TRIANGLE_STRIP);
        for (beta = 0.0; beta < 2.01*PI; beta += PI/gradation)
        {
            x = radius*cos(beta)*sin(alpha);
            y = radius*sin(beta)*sin(alpha);
            z = radius*cos(alpha);
            glVertex3f(x, y, z);
        }
        glEnd();
    }
    glutSwapBuffers();
}

我的结果是这个(球体):

enter image description here

问题:

通过将相同的逻辑应用于绘制双曲面,我没有得到我想要的。双曲面的参数方程如下:

enter image description here

当尝试用图片中显示的方程绘制一张纸的双曲面时,结果如下:

enter image description here

如果有人对此有任何了解,请帮助我。谢谢大家。

注意:我知道还有其他方法可以绘制双曲面,但我的绘制方法是通过其参数方程。

最佳答案

生成此输出的代码是什么,而不是生成球体的代码?请提供 MCVE。

这是我的猜测:你的循环范围只产生 z 的正值,你可以尝试 -PIPI 相反。

关于c++ - 如何使用 OpenGL C++ 绘制双曲面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39763445/

相关文章:

c++ - 如何在 OpenGL(使用 GLUT)上绘制像圆锥体一样的填充包络?

c++ - 是否有开源线程安全的 C++ 对象池实现?

linux - 随后将具有不同视觉效果的 GLX 上下文附加到同一个 X 窗口

python - tkinter 中的非顶级 opengl 小部件

c++ - 打开不同的 excel 表并使用 c++ 写入

c++ - OpenGL 圆柱体

opengl - RenderMonkey 在 GLSL 的 TEXCOORD 流映射中是否有错误?

C++ 连接函数错误 - 参数无效

c++ - 如何对使用 CGAL 设置的 3D 点执行范围搜索?

c++ - #define 以及如何使用它们 - C++