会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
游戏开发 > 程序设计 > 3D图形
OpenGL 入门教程(五)
发表日期:2007-01-22 16:43:53作者: 出处:  


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

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

返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.00279