回 帖 发 新 帖 刷新版面

主题:[原创]OpenGL入门学习——第九课

再次更新[em2]。
首先是以前学习的课程连接列表。

[url=http://www.programfan.com/club/showbbs.asp?id=184355]第一课,编写第一个OpenGL程序[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=184525]第二课,绘制几何图形[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=184769]第三课,绘制几何图形的一些细节问题[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=185032]第四课,颜色的选择[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=196017]第五课,三维的空间变换[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=196231]第六课,动画的制作[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=218828]第七课,使用光照来表现立体感[/url]
[url=http://www.programfan.com/club/showbbs.asp?id=219518]第八课,使用显示列表[/url]
第九课,使用混合来实现半透明效果  ——→  [color=0000FF]本次课程的内容[/color]

今天介绍关于OpenGL混合的基本知识。混合是一种常用的技巧,通常可以用来实现半透明。但其实它也是十分灵活的,你可以通过不同的设置得到不同的混合结果,产生一些有趣或者奇怪的图象。

=====================未完,请勿跟帖=====================

回复列表 (共17个回复)

11 楼


我是redbook和你的帖子结合着学的,它上面不懂的地方再你这儿却能看明白,所以很感谢!接下来的内容什么时候给出啊?期待ing。。。

12 楼

为什么我的电脑要  glDisable(GL_DEPTH_TEST) 这样才能使能进行blend呢?

13 楼

为什么我的电脑 要  glDisable(GL_DEPTH_TEST); 才能blend呢?

14 楼

[quote]为什么我的电脑 要  glDisable(GL_DEPTH_TEST); 才能blend呢?[/quote]
OpenGL没有理由设计成这样。
实际上很多游戏中都同时使用了混合和深度测试,并且在大多数电脑上运行良好。建议pskpl先不要怀疑你的电脑,把程序发上来,我们一起分析一下,或许是程序本身的问题。

15 楼

您好,在三维混合里面,绘制球体,感觉(0, 0, 0.5),即红色的球体离我们是最近的吧?怎么您说是最远的,而且绘制出来的也是最远的呢?百思不得其解!
默认的Opengl的坐标系,x右3为正,y上为正,z屏幕向外为正,对吧?如果这样,我就更加肯定,红球离我们最近了,因为z轴指向我们(屏幕外侧)阿,然后是绿球,最远篮球,正好和您所说的相反,谢谢!
// 以(0, 0, 0.5)为中心,绘制一个半径为.3的不透明红色球体(离观察者最远)
    glPushMatrix();
    glTranslatef(0.0f, 0.0f, 0.5f);
    glutSolidSphere(0.3, 30, 30);
    glPopMatrix();
    // 下面将绘制半透明物体了,因此将深度缓冲设置为只读
    glDepthMask(GL_FALSE);
    // 以(0.2, 0, -0.5)为中心,绘制一个半径为.2的半透明蓝色球体(离观察者最近)\
    glPushMatrix();
    glTranslatef(0.2f, 0.0f, -0.5f);
    glutSolidSphere(0.2, 30, 30);
    glPopMatrix();
    // 以(0.1, 0, 0)为中心,绘制一个半径为.15的半透明绿色球体(在前两个球体之间)
    glPushMatrix();
    glTranslatef(0.1, 0, 0);
    glutSolidSphere(0.15, 30, 30);
    glPopMatrix();

16 楼

请问一个问题:
你这里设置3个球:红球z坐标是0.5,篮球是-0.5,绿球是0.0。红球在最后面。那么就是说,我们的视点位置在z轴的负方向上,看向正方向?我怎么记得视点的初始位置应该在原点,看向z负。

17 楼

坐标是可以设置的。OpenGL默认坐标系的确是楼上两位说的那样,但是我本人更习惯Z轴垂直显示器平面向内,所以把它修改掉了。
glOrtho(-1, 1, -1, 1, 1, -1); // 默认情形
glOrtho(-1, 1, -1, 1, -1, 1); // 我设置的情形

我来回复

您尚未登录,请登录后再回复。点此登录或注册