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

全部博文(7)

文章存档

2014年(2)

2011年(5)

分类: Delphi

2011-07-18 12:59:38

glShadeModel

glShadeModel函数用于控制opengl中绘制指定两点间其他点颜色的过渡模式

参数一般为GL_SMOOTH(默认),GL_FLAT

opengl默认是将制定的两点颜色进行插值,绘制之间的其他点

如果两点的颜色相同,使用两个参数效果相同

如果两点颜色不同,GL_SMOOTH会出现过渡效果,GL_FLAT 则只是以指定的某一点的单一色绘制其他所有点

如图可以对比GL_SMOOTH与GL_FLAT的区别

http://blog.csdn.net/wadejr/article/details/4504112


 

glClearDepth

opengl里面的深度缓存


在现实生活中,一个实心物体挡在另外一个实心物体的前面, 后面的那个物体有部分会被遮盖掉

那么opengl里面如何模拟这个情况呢? 每个物体的每个像素都有一个深度缓存的值(在0到1之间,可以想象成是z轴的距离)

如果glDepthFunc启用了GL_LESS(现实生活中的前景), 那么当前个物体挡住后个物体时, 由于前个物体深度值小(越靠近人的), 所以它就被画了出来, 后面的物体被挡住的像素就被忽略掉了。(当然你如果启用了GL_GREATER, 那么情况就反过来了)

这个时候再来说glClearDepth, 它给深度缓冲指定了一个初始值,缓冲中的每个像素的深度值都是这个, 比如1,这个时候你往里面画一个物体, 由于物体的每个像素的深度值都小于等于1, 所以整个物体都被显示了出来。 如果初始值指定为0, 物体的每个像素的深度值都大于等于0, 所以整个物体都不可见。 如果初始值指定为0.5, 那么物体就只有深度小于0.5的那部分才是可见的
 
 
 
glHint

glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );

真正精细的透视修正。这一行告诉OpenGL我们希望进行最好的透视修正。这会十分轻微的影响性能。但使得透视图看起来好一点。

这个函数中,我们对OpenGL进行所有的设置。我们设置清除屏幕所用的颜色,打开深度缓存,启用smooth shading(阴影平滑),等等。这个例程直到OpenGL窗口创建之后才会被调用。

http://y150988451.iteye.com/blog/813008 

 

 

用函数glDepthFunc()来设置深度测试函数

void glDepthFunc(GLenum func)

这里我们比较常用的深度测试函数有 GL_LESS GL_LEQUAL 两者的区别在于当深度相同时是显示新的象素 还是老的象素


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