ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OpenGL学习笔记(7)多边形绘制

2021-05-29 15:03:28  阅读:190  来源: 互联网

标签:glVertex2f 多边形 OpenGL 0.0 0.5 笔记 1.0 GL


绘制模式

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

使用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

标签:glVertex2f,多边形,OpenGL,0.0,0.5,笔记,1.0,GL
来源: https://www.cnblogs.com/whl0071/p/14825289.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有