zoukankan      html  css  js  c++  java
  • 【OpenGL】二次曲面图

    说是二次曲面图,其实从视觉效果上看还是三维图。通过glu实用库,我们可以轻松的画出球形、锥形、扇面、圆柱形,而不用像画立方体或立体三角形一样一个面一个面的去画。

    要画二次曲面图形,首先我们要创建一个GLUquadricObj(二次曲面声明类型)。

    具体如下:

    //声明对象
    GLUquadricObj	*uquadric;
    //初始化二次曲面并创建一个指向二次曲面的指针
    uquadric = gluNewQuadric();
    //在二次曲面的表面创建平滑的法向量
    gluQuadricNormals(uquadric,GL_SMOOTH);
    //允许二次曲面使用纹理
    gluQuadricTexture(uquadric,TRUE);
    

    创建完二次曲面声明并初始化之后,我们就可以利用这个指针绘制多个曲面图形了。

    圆柱形

     void gluCylinder( GLUquadric* quad,    --创建的二次曲面指针
        GLdouble base,                                 --底面圆形的半径
        GLdouble top,                                   --顶面圆形的半径
        GLdouble height,                               --圆锥的高度
        GLint slices,                                      --纬线 环绕z轴的细分面(数字越大越平滑,相应的速度越慢)
        GLint stacks )                                    --经线 沿着z轴的细分面(数字越大越平滑,相应的速度越慢)

    圆锥

    圆锥的实现函数和圆柱体是一样的,只要将顶面圆形的半径设为0就可以了。

    圆面

    void gluDisk(
        GLUquadricObj *qobj,      --创建的二次曲面指针
        GLdouble innerRadius,     --内圆的半径
        GLdouble outerRadius,     --外圆的半径
        GLint slices,              --沿半径的细切面(数字越大越平滑,相应的速度越慢)
        GLint loops              --绕圆心的细切面(数字越大越平滑,相应的速度越慢)
    );

    球体

    void gluSphere(
        GLUquadricObj *qobj,    --创建的二次曲面指针
        GLdouble radius,        --球半径
        GLint slices,            --纬线细分面(数字越大越平滑,相应的速度越慢)
        GLint stacks            --经线细分面(数字越大越平滑,相应的速度越慢)
    );

    扇形

    void gluPartialDisk(
        GLUquadricObj *qobj,        --创建的二次曲面指针
        GLdouble innerRadius,       --内圆的半径
        GLdouble outerRadius,       --外圆的半径
        GLint slices,                --沿半径的细切面(数字越大越平滑,相应的速度越慢)
        GLint loops                --绕圆心的细切面(数字越大越平滑,相应的速度越慢)
        GLdouble startAngle,         --扇形开始的角度
        GLdouble sweepAngle        --扇形转过的角度
    );

  • 相关阅读:
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    PHP serialize() 函数
    PHP print_r() 函数
  • 原文地址:https://www.cnblogs.com/nonkicat/p/2987125.html
Copyright © 2011-2022 走看看