zoukankan      html  css  js  c++  java
  • OpenGL学习笔记(7)多边形绘制

    绘制模式

    在绘制多边形时除了默认的填充方式,还可以使用点和线

    使用glPolygonMode函数来设置模式

    image

    三种不同模式下的绘图
    GL_FILL

    image
    GL_LINE

    image

    GL_POINT

    image

    多边形的两面

    如果以顺时针绘制则是反面,逆时针绘制则是正面

    // 设置正面为填充模式
    glPolygonMode(GL_FRONT, GL_FILL); 
    // 设置反面为线形模式
    glPolygonMode(GL_BACK, GL_LINE); 
    
    // 设置逆时针绘制一个正方形
    glBegin(GL_POLYGON);              
        glVertex2f(-0.5f, -0.5f);
        glVertex2f(0.0f, -0.5f);
        glVertex2f(0.0f, 0.0f);
        glVertex2f(-0.5f, 0.0f);
    glEnd();
    // 设置顺时针绘制一个正方形
    glBegin(GL_POLYGON);             
        glVertex2f(0.0f, 0.0f);
        glVertex2f(0.0f, 0.5f);
        glVertex2f(0.5f, 0.5f);
        glVertex2f(0.5f, 0.0f);
    glEnd();
    显示效果如下
    image

    切换正反面

    可以使用glFrontFace函数来调换正面与反面的概念

    glFrontFace(GL_CCW);  // 设置CCW方向为“正面”,CCW即CounterClockWise,逆时针
    glFrontFace(GL_CW);   // 设置CW方向为“正面”,CW即ClockWise,顺时针

    下面为使用glFrontFace(GL_CW)的效果

    image

    剔除多边形表面

    下面的话转的
    在三维空间中,一个多边形虽然有两个面,但我们无法看见背面的那些多边形,而一些多边形虽然是正面的,但被其他多边形所遮挡。如果将无法看见的多边形和可见的多边形同等对待,无疑会降低我们处理图形的效率。在这种时候,可以将不必要的面剔除。
    首先,使用glEnable(GL_CULL_FACE);来启动剔除功能(使用glDisable(GL_CULL_FACE)可以关闭之)
    然后,使用glCullFace来进行剔除。
    glCullFace的参数可以是GL_FRONT,GL_BACK或者GL_FRONT_AND_BACK,分别表示剔除正面、剔除反面、剔除正反两面的多边形。
    注意:剔除功能只影响多边形,而对点和直线无影响。例如,使用glCullFace(GL_FRONT_AND_BACK)后,所有的多边形都将被剔除,所以看见的就只有点和直线。

    着色模型

    即颜色可以渐变色,如默认情况下

    void display(void)
    {
       glClear(GL_COLOR_BUFFER_BIT);
       glColor3f (1.0, 0.0, 0.0);
       glBegin(GL_POLYGON);
       glVertex2f(120,100);
       glVertex2f(280,100);
       glVertex2f(150,240);
       glEnd();
       glFlush ();
    }

    image

    使用glShadeModel函数指定着色模型,默认为GL_FLAT即单色,GL_SMOOTH则可以使得颜色平滑,即渐变色

    GL_SMOOTH模式

    void display(void)
    {
       glClear(GL_COLOR_BUFFER_BIT);
       glColor3f (1.0, 0.0, 0.0);
       glBegin(GL_POLYGON);
       glVertex2f(120,100);
       glColor3f (1.0, 1.0, 0.0);
       glVertex2f(280,100);
       glColor3f (0.0, 1.0, 1.0);
       glVertex2f(150,240);
       glEnd();
       glFlush ();
    }

    如下图

    image

  • 相关阅读:
    MVC OnActionExecuting,OnResultExecuted 的用法
    MindManager脑图之项目管理甘特图
    jQuery.Autocomplete实现自动完成功能(经典)
    常见26个jquery使用技巧详解(比如禁止右键点击、隐藏文本框文字等)
    用ATL创建COM组件详细解说
    STL中的常用的vector,map,set,Sort用法
    绘图效率完整解决方案——三种手段提高GDI/GDI+绘图效率
    C++面试
    iOS开发UI篇—iOS开发中三种简单的动画设置
    OS开发UI篇—IOS开发中Xcode的一些使用技巧
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1854255.html
Copyright © 2011-2022 走看看