分享
 
 
 

游戏制作详解自----OpenGL入门教程(九)

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

OpenGL中用表面来表示物体,一个物体就是一组平面。光线照射在平面上会产生反射,入射线与反射线的角平分线就是法线,它垂直于平面。面法线有两种可能的方向,我们称面有两侧。当描述封闭物体的外表面时,法线应该从内部指向外部;而表示在物体内部时,法线应该从外部指向内部。

用glNormal*(N_Vector);指定当前法向矢量。此后的顶点都会使用该法向,直到再次改变。

面的法向矢量是怎么确定的呢?右手手指沿顶点顺序握拳,拇指竖立所指方向即为一个面的法向,如果面对该平面,以逆时针序指定顶点,则法向指向你。当你用这样的顺序指定平面的顶点时,OpenGL能够正确的计算出法向矢量。法矢与顶点坐标一样要经过模型视矩阵变换,这样物体坐标系内的法向矢量就可以正确的变成世界坐标系内的法向矢量,保证最终生成的图像是正确的。

当一个顶点属于多个平面时,该顶点的法向应该取所在所有平面法向的平均值,以使表面棱角部份平滑自然的,否则会有一道黑线。

我们把平面的法向所指一侧称为前面,另一侧称为后面,可以为两侧分别指定不同的属性,所以glMaterial*命令的第一个参数必须是GL_FRONT/GL_BACK/GL_FRONT_AND_BACK之一。

下面这组图片展示了法向对场景的影响,角度表示图像是绕Y旋转多少后观察到的:

头两行中两三角法向从两者之间指向外部,简称外法向。

前三角的面法向(0,0,1),后三角的面法向(0,0,-1),光射线方向(0,0,-1)

第一行中,前三角,后三角呈现的是其GL_FRONT部份的材质

第二列中,两个三角形的前后关系已经反过来了。

三四两行中两三角法向从两者外部指向两者之间的内部,简称内法向。

前三角的面法向(0,0,-1),后三角的面法向(0,0,1),光射线方向(0,0,-1)。

第五行前两图中两三角法向相同均为(0,0,1)。

外法向的平面组可用来表示物体外观(外表面),第五行最后一张图则是这样表示的一个立方体。

内法向则适于表示从内部观察物体(灯光、视点均在内部,内表面),程序从略。

双三角场景的

绘制程序代码如下:

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glEnable(GL_LIGHTING);glEnable(GL_DEPTH_TEST);

glEnable(GL_COLOR_MATERIAL);

glEnable(GL_LIGHT0);

glLoadIdentity();

glRotatef(rot,0,1,0);//全局变量rot即为旋转角度

glBegin(GL_TRIANGLES);

glNormal3f(0.0,0.0,1.0);//法向与光射线指向同侧

glColor3f(1.0,0.0,0.0);

glVertex3f(-1.0,0.0,-0.30);

glColor3f(0.0,1.0,0.0);

glVertex3f(0.0,1.0,-0.30);

glColor3f(0.0,0.0,1.0);

glVertex3f(1.0,0.0,-0.30);

glNormal3f(0.0,0.0,-1.0);//法向与光射线指向相反

glColor3f(1.0,0.0,0.0);

glVertex3f(-1.0,0.0,0.0);

glColor3f(0.0,1.0,0.0);

glVertex3f(0.0,1.0,0.0);

glColor3f(0.0,0.0,1.0);

glVertex3f(1.0,0.0,0.0);

glEnd();

使用OpenGL默认的光照(光源在0,0,1沿-Z轴方向的白色平行光)和默认的平行投影。为简化代码,打开了GL_COLOR_MATERIAL直接用glColor设定顶点材质。另外为便于阅读图片做了减肥。

以上图片是在PII266/FireGL 1000pro/Win2000环境下获取的。

这两段代码都放在TOpenGL Panel的OnPaint事件里执行。

检讨:右边代码的法向全反了,如果你运行它就会发现虽然看起来仍是一个立方体,但是前后左右上下全都反过来了。这是因为各面法向朝里,前面的后侧对着我们,它不可见,看到的前面实际是后面前侧,而正常情况下后面应该会被前面挡住。

立方体场景的

绘制程序代码如下:

glBegin(GL_QUADS);

glNormal3f(0,0,-1);

glColor3f(1,0,0);

glVertex3f(0,0,0);

glVertex3f(1,0,0);

glVertex3f(1,1,0);

glVertex3f(0,1,0);

glNormal3f(-1,0,0);//右

glColor3f(0,1,0);

glVertex3f(1,0, 0);

glVertex3f(1,0,-1);

glVertex3f(1,1,-1);

glVertex3f(1,1, 0);

glNormal3f(0,-1,0);//上

glColor3f(0,0,1);

glVertex3f(0,1, 0);

glVertex3f(1,1, 0);

glVertex3f(1,1,-1);

glVertex3f(0,1,-1);

glNormal3f(0,0,1); //后

glColor3f(1,1,0);

glVertex3f(0,1,-1);

glVertex3f(1,1,-1);

glVertex3f(1,0,-1);

glVertex3f(0,0,-1);

glNormal3f(1,0,0);//左

glColor3f(0,1,1);

glVertex3f(0,1, 0);

glVertex3f(0,1,-1);

glVertex3f(0,0,-1);

glVertex3f(0,0, 0);

glNormal3f(0,1,0);//下

glColor3f(1,0,1);

glVertex3f(0,0,-1);

glVertex3f(1,0,-1);

glVertex3f(1,0, 0);

glVertex3f(0,0, 0);

glEnd();

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有