openGL中根据读取的数据,确定投影矩阵和模型视图矩阵

15 篇文章 0 订阅

openGL中根据读取的数据,确定投影矩阵和模型视图矩阵
1 问题描述
一开始假设我们已经读入了一系列三维坐标点数据。我们的目的是通过确定openGL的投影和模型视图矩阵,从而能在窗口中居中显示这一系列的点。
问题描述

2 场景布置-果盘就类似于我们上图中的数据
场景布置

3 代码描述
要想正确绘制显示此果盘,显然我们需要确定正确的变换矩阵,即实现上述场景的正确布置。其中的关键是相机位置的摆放位置(模型视图变化)和投影变换。
考虑最简单的情况: 我们已经知道了物体的中心及半径,我们只需要将相机摆放到物体的中心点,然后再将相机前后移动下(即调焦),然后创建一个合适的投影矩阵裁剪下,就能到达我们的目的了,实际上这些都是通过对应的矩阵实现的。
那么,从代码实现的角度考虑,我们需要预定义一些变量:

  1. 旋转中心:物体旋转时候以此点为参考中心点;变量名:pivot(初始为center)

  2. 摄像机位置:照相机在世界坐标中的位置;变量名:camera

  3. 物体信息:要绘制的物体的相关信息;边界盒:box,中心点:center,包围球半径:radius

//伪代码,通过上述描述,如果要想实现场景的绘制
a) 导入数据计算,物体信息;
b) 设置camera = center;然后调用glTranslatef(-camera.x, - camera.y, - camera.z+shift);
shift代表的是需要将相机朝前后移动下。相机摆放完毕;
c) 创建视景体,gluPerspective(fov, aspect, zNear, zFar);
d) 省去其它视口变换等,因为代码比较一致且固定
接下来主要的问题就是:这些变换中的变量如何确定,实际上是根据物体的信息确定的,接下来描述每个参数值的计算。
4 变量参数计算描述
4.1.1 透视模式:
已知:物体信息,如center ,box, radius;默认相机(即坐标系)位于原点,且指向z负轴。
未知:camera—相机位置,shift–代表相机偏移位置,for-相机角度;aspect—视线范围,zNear—近平面, zFar—远截面。

计算描述:
Camera = center -shift;
shift = normal(相机朝向向量)*d;
偏移距离计算
d = 2 * radius / tan(DEG_TO_RAD(fov * 0.5));

fov = 30; 初始化指定
aspect = width/height; 窗口宽高比
zNear = 0;

CP = Distance(camera,pivot);
MP = Distance (center - pivot) + radius;

zFar = CP + MP;

5 渲染流程
实际上完整的渲染流程如下:
gl代码渲染流程

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值