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

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
    计算机图形学代码之转换和光照_第1张图片
  • 已经有了为场景对象指定建模转换的基本机制:将矩阵模式设置为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命令

你可能感兴趣的:(算法,计算机图形学)