计算机图形学代码之转换和光照

GL_ModelView

  • 使用GL_MODELVIEW矩阵和Object 坐标相乘所得。在OpenGL中用GL_MODELVIEW将对象对象空间(Object Space)变换到视觉空间(eye space)。GL_MODELVIEW
  • 矩阵是模型矩阵(Model Matrix)和视觉矩阵(View Matrix)的组合 (Mview * Mmodel)。其中,Model 变换指的是将Object Space转换到World Space
    在这里插入图片描述
  • 已经有了为场景对象指定建模转换的基本机制:将矩阵模式设置为gl_modelview,然后根据需要发出命令更改当前矩阵

模型转换

glRotatef
void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z);
  • 围绕矢量(x,y,z)逆时针旋转指定的度数。
  • 如果(x,y,z)指向观察者,则旋转将逆时针显示。
glScalef
glScalef(GLfloat x,GLfloat y,GLfloat z)
  • 按照每个轴进行放大缩小
glTranslatef
void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
  • 按照特定的向量转换
glPushMatrix
  • 对于矩阵栈进行修改
  • 推入一个和当前矩阵相同的矩阵入栈
glPopMatrix
  • 弹出当前栈顶矩阵

光照

  • 没有光照,场景会非常沉闷,同时也无法呈现3D感
  • 每一个光源有三个不同的可设置的参数:环境光(ambient)、漫反射(diffuse)和镜面反射(specular)
  • 每个组件为照明公式的该部分设置灯光的颜色
  • 在OpenGL中,光源的组件不同于任何普通光源:
    • 环境光:所有灯光的总和,因为每个灯光可能对环境光有贡献
    • 公式中每个术语中用于光的颜色可能不同
  • 想要使用OpenGL的任意光源,都必须要使用这样一个函数
void glEnable(GL_LIGHTING)
  • 与GL_DEPTH_TEST一样,这会影响当前窗口,因此必须在创建窗口后完成
  • 然后必须单独启用和配置每个单独的光照
  • 最低限度,如果启用光照和GL_LIGHT0,你会得到一个白光,我们可以用下列两行代码来开启它们
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
  • 对于额外的光源,开启并设置GL_LIGHT1, GL_LIGHT2等等(最多八个光源)
  • 更高级的灯光效果需要的不仅仅是启用一个或多个灯光 - 它们还需要配置一系列glLightfv命令
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值