Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64511
  • 博文数量: 7
  • 博客积分: 291
  • 博客等级: 二等列兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-23 21:22
文章分类

全部博文(7)

文章存档

2014年(2)

2011年(5)

分类: Delphi

2011-07-23 19:16:51

三种不同模式下的绘图
GL_FILL

GL_LINE

GL_POINT

 

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

// 设置正面为填充模式

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();

显示效果如下:

 

 

剔除多边形表面

 

在三维空间中,一个多边形虽然有两个面,但我们无法看见背面的那些多边形,而一些多边形虽然是正面的,但被其他多边形所遮挡。如果将无法看见的多边形和可见的多边形同等对待,无疑会降低我们处理图形的效率。在这种时候,可以将不必要的面剔除。
首先,使用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 ();

}


 

使用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 ();

}

如下图

 

 

http://www.cnblogs.com/Clingingboy/archive/2010/10/18/1854255.html

 

阅读(9136) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~