<strong>1. 光源不动:</strong>
需要在设置完视图模型变换之后。然后再设置光源的位置并且开启。
伪代码如下:
<pre>glmatrixmode(gl_projection);
glloadidentity();
xxxxxxxxxx;
glmatrixmode(gl_modelview);
glloadidentity();
glfloat light_position []={1.0,1.0,1.0,1.0};//
glightfv(gl_light0,gl_position,light_position);//这两句代码在最i后才出现</pre>
<strong>2. 独立移动光源:</strong>
(1)在如方法1中最后再设置光源的移动。
(2)在模型矩阵变化过程中,同时来考虑光源的移动。
技巧就是巧妙运用glpushmatrix()和glpopmatrix();
伪代码如下:
<pre>glfloat light_position []={1.0,1.0,1.0,1.0};
glupushmatrix();
glulookat();
glupshmatrix();
glrotated();
gllightfv(gl_light0,gl_position,light_position);//注意gllightfv ()函数出现的位置
glupopmatrix();</pre>
然后在进行其他模型的操作。
<pre>glflush();</pre>
<strong>3. 光源和观察点一起移动:</strong>
方法就是在进行视图变换之前设置光源位置,接着进行视图变换,就会以相同的方式同时影响光源和观察点。记住光源是以视觉坐标的形式存储的。
伪代码:
<pre>glfloat light_position []={1.0,1.0,1.0,1.0};
glightfv(gl_light0,gl_position,light_position);//注意这两行代码出现在视图设置之前。此时摄像机和视点的相对位置就固定了!
glviewport();
glmatrixmode(gl_projection);
glloadidenty();</pre>
来源:CSDN,作者:kkk328
原文:https://blog.csdn.net/kkk328/article/details/7033957
版权声明:本文为博主原创文章,转载请附上博文链接!