OpenGL 入门教程(五)

本文源自:http://dev.gameres.com/Program/Visual/3D/OpenGLTutorial/OpenGL_5.htm ?

如果用过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(); //清除视见矩阵
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值