glLightfv如何使用

来源:百度知道 编辑:UC知道 时间:2024/09/28 12:47:04
light0(float x,float y,float z,float a)//光
{ GLfloat light_position[] = {x,y,z,a};
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
}
我是个OpenGL初学者
正在学习中
希望哪位大虾能帮我解释下这个函数里面的函数和变量的具体意义和使用方法.
变量a代表什么?
为什么我的矩形方块贴上图后,本来有两面都有图的,可是开了光源以后,就只有一面有图了,另一面就变成黑色的了.

glLightfv(GL_LIGHT0, GL_POSITION, light_position);
这句是指定第0号光源的位置

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
这两句是告诉OPENGL在后面的渲染中使用光照,默认情况下是关闭的,另外为了使用第0号光照,需要指定GL_LIGHT0(当然还有GL_LIGHT1、GL_LIGHT2……最大数目看你的OPENGL支持了,一般支持最多八个光照)

glEnable(GL_DEPTH_TEST);
这句是启用深度测试,这样,在后面的物体会被挡着,例如房子后面有棵树,如果不启用深度测试,你先画了房子再画树,树会覆盖房子的;但启用深度测试后无论你怎么画,树一定在房子后面(被房子挡着)

glEnable(GL_COLOR_MATERIAL);
这句是启用颜色跟踪~~

==========================
你说的那个a是 {x,y,z,a}; 中的a吧,这个是齐次坐标……拜托你先看一下书……, 这个值默认是设置成1.0f的
你要设置双面绘制,要注意默认是逆时针的

light0(float x,float y,float z,float a)//光
{ GLfloat light_position[] = {x,y,z,a};
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
}
我是个OpenGL初学者
正在学习中
希望哪位大虾能帮我解释下这个函数里面的函数和变量的具体意义和使用方法.变量a代表什么?
为什么我的矩形方块贴上图后,本来有两面都有图的,可是开了光源以后,就只有一面有图了,另一面就变成黑色的了.

<