一、OpenGL灯光位置的控制 -- 模型视图矩阵的本质

本文详细介绍了如何在OpenGL中控制灯光位置,理解模型视图矩阵的作用。通过实例说明了灯光随摄像机移动、绕球体旋转以及设置静态灯光的方法,提供相应的代码示例,帮助读者更好地掌握OpenGL灯光的编程技巧。
摘要由CSDN通过智能技术生成

纠结了很久,终于算是可以完全控制灯光位置了,好开心~


我的理解是这样的:(可能和实际的计算过程有出入,不过这么理解的确可以正确地进行编程。)

1、其实OpenGL只有一个坐标系,叫做世界坐标系,后面说的都是世界坐标系中的坐标。

2、摄像机始终在原点。

3、我们在程序里面写的物体的坐标或者灯光的坐标,是原始坐标。

4、物体和灯光在的 最终坐标 = 其原始坐标 * 变换矩阵。变换矩阵就是 GL_MODELVIEW,模型视图矩阵。

5、修改变换矩阵的方法是用glMultiMatrix*函数乘以另外一个矩阵。当然,自己计算矩阵较麻烦,可以用 glTranslate* glRotate* glScaled* 等来自动生成一些矩阵。


举几个例子:

1、让灯光随着镜头移动,例如CS里面枪的灯光跟随着人移动!

前面说了,摄像机是不动的(始终在原点),我们希望灯光在镜头那儿,所以灯光也要在原点呀~

灯光最终坐标 = (0,0,0) 即可!

因为我们只能设置原始坐标,所以将变换矩阵设置为单位矩阵以排除其影响,于是 最终坐标 = 原始坐标 * 单位矩阵 = 原始坐标。

设置灯光位置的代码大概是下面这样的。这段代码放到哪里都行,只要保证被执行一次就行 :)

glPushMatrix() 
GLfloat final_pos[] = {0,0,0,1.0};
glLoadIdentity();
glLightfv( GL_L
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值