时间:2022-10-05 03:15:47
摘要:该例子通过取得鼠标在当前窗口中的坐标来确定观察者视角转动角度及通过按键来确定观察者所在的坐标。从而给定观察者一个自由的观察视角。
关键词:建筑;3D ;OpenGL;Windows SDK
中图分类号:TP37 文献标识码:A 文章编号:1009-3044(2013)27-6180-02
本文给出一种如何使用鼠标和键盘来实现自由观察建筑模型的原理和方法。
1 程序编写过程
本文中建筑模型由下列物品组成:墙面、天花板、地基、木制构件、细节构件、桌子、太阳伞和赣州技师学院3D字体共10件模型组成(如图1效果图)。先用AutoCAD建好模型,导入3DsMax并在其中做好贴图和材质。然后建立一个Win32 程序。在程序基础上加入OpenGL 的开发环境即在预编译文件中加入OpenGL的头文件引用和lib连接库。然后设置程序基本参数如下视口大小为800*600像素,投影方式为透视投影,透视角为45度,视野透视深度近点为1.0象素,远点为1000象素。刷屏为50fpt。
2 自由的观察方法原理的描述和实现
决定一个人眼睛看到什么内容的是第一你站在什么地方,第二是你的眼睛往哪里看,第三你是直着脖子看还是歪着脖子看。具体来说是第一站在什么地方就是观察者位置坐标如上图中o1点。第二决定眼睛往哪里看就是注意力的焦点位置为o3点,第三直着脖子看还是歪着脖子看就是观察方式本例中我们使用正常观察方法。在OpenGL的体系中,Y轴向上所以该参数为(0,1,0)。
现在我们来确定视口焦点o3的位置。O3点是观视棱锥后剪裁平面的中心点,从人类的生理结构来说我们可以在水平方向上左右移动视野90度。垂直方向上移动90度,所以我们设定o3可绕o1水平和垂直方向转动90度。首先通过鼠标在窗口中的当前的位置来确定观察者水平垂直方向上的转动角度。然后根据转动角度来确定o3点的X,Y,Z值。具体方法如下。
1)求出鼠标当前坐标pt_now,程序窗口坐标,WinRect,窗口宽度screen_width和 窗口高度screen_height。
2)求出鼠标当前坐标与程序窗口坐标中心点的水平距离和垂直距离(DisX,DisY)。
3)求出距离占窗口半数的比例,根据该比例确定视口转动角度的大小(即比例乘上90度)。
4)把移动角度转化成弧度。
5)根据移动角度计算出注意力焦点o3的o3_x,o3_y及o3_z值
参加文献:
[1] (美)斯达乐.游戏开发技术系列丛书[M].徐明亮,译.北京:机械工业出版社,2008.
[2] [美]Fletcher Dunn Lan Parberry 3D数学基础图形与游戏开发[M].北京:清华大学出版社,2005.
[3] 李宁,肖一峰.3ds Max动画设计实录[M].北京:电子工业出版社,2005.
[4] [美] Richard S.Wright,Jr.BenJamin Lipchak OpenGL超级宝典[M].3版.北京:人民邮电出版社,2007.