ITPub博客

首页 > 应用开发 > IT综合 > 游戏制作详解自----OpenGL入门教程(五)(转)

游戏制作详解自----OpenGL入门教程(五)(转)

原创 IT综合 作者:post0 时间:2007-08-12 20:05:12 0 删除 编辑
游戏制作详解自----OpenGL入门教程(五)(转)[@more@]

  如果用过3DS/LIGHTWAVE等任何一种三维图形软件包,就可以发现制作一个三维场景无非以下几项工作:

  建模:制作各种物体。

  放置:将做好的各物体通过平移、旋转等放到场景空间的适当位置。

  上色:给物体模型指定颜色或表面纹理。

  打灯:在场景中适当位置放置几盏灯以照亮场景。

  摄像:在空间适当位置放上适当角度的摄像机,以得到所需的视觉效果。

  用OpenGL开发应用程序与之类似,通常是:

  

  设定视见体

  定义光源

  生成场景

  而三维图形生成的流程如下:

  

  放置几何变换:平移、旋转、缩放等

  视见变换:裁剪、消隐、投影等

  视见体设定:

  

  视见体有两种:正投影体和透视投影体,正投影视见体中的物体在屏幕上的投影不会出现近大远小的现象,而透视投影视体则与人眼的观察结果类似,离观察点越远的物体在屏幕上的投影越小,因此透视投影体中的观察结果看起来更真实一些。

  

  定义透视投影体的方法是:

  glFrustum(left,right,bottom,top,near,far);

  //物体在这六个参数界定的范围内可见,超出边界将被裁掉。

  //left,bottom,代表左下 right,top代表右上

  

  

  定义透视投影体的方法是:

  glOrtho(left,right,bottom,top,near,far);

  //物体在这六个参数界定的范围内可见,超出边界将被裁掉。

  

  综上所述,一个三维图形应用程序在建好OpenGL Pipleline之后就要向管道发如下一系列的命令,以建立一个三维观察环境:

  

  //1、设定视见体,在窗体的Resize事件时

  

  void __fastcall TForm1::FormResize(TObject *Sender)

  {

  glViewport(0, 0, Width, Height);

  //使用Form窗体的指定区域为显示区

  //如改为Width/4,Height/4,Width/2,Width/2,

  //则只用Form1的-窗体的中间1/4进行显示

  glMatrixMode(GL_PROJECTION); //切换到投影矩阵栈

  glLoadIdentity(); //清除投影矩阵

  glFrustum(1.0,-1.0,-1.0,1.0,1.0,-1.0);

  //指定透视视见体范围

  //超出部分将被裁去

  //或正投影glOrtho(1.0,-1.0,-1.0,1.0,1.0,-1.0);

  glMatrixMode(GL_MODELVIEW); //切换到模型视见矩阵栈

  glLoadIdentity(); //清除视见矩阵

  }

  

  说明:视见环境的设定还有许多其它的细节,以后会逐步介绍

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8225414/viewspace-951749/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    2018
  • 访问量
    8225741