OGRE调整实体的投影矩阵

stanley0614 发布于 2011/09/07 19:42
阅读 1K+
收藏 0
大家好,现在场景中有一些实体(entity),他们具有相同的视图矩阵(viewMatrix)和投影矩阵(project matrix)。现在我想在场景中加入一个新的实体,但是新实体具有不同的视图和投影矩阵,请问如何让他们显示在同一场景中? 在OpenGL中做法是:在绘制实体(对象)之前调整矩阵,绘制完成后恢复就可以了,但是在OGRE中却不可以了,请问如何才能达到和OpenGL一样的效果呢?谢谢
加载中
0
xyz555
xyz555
这个涉及坐标的转换,没有研究过ogre,但在游戏编程中的坐标转换流程是,物体坐标->世界坐标->相机坐标。不同的物体放到一个世界坐标中是通过一定比例的缩放,从而遵从一个统一的坐标系统。
s
stanley0614
我现在的问题就是不同裁剪面的实体可以在同一场景中显示吗
0
xyz555
xyz555

不同裁剪面,什么意思,在坐标转换过程中就应该进行了裁剪,裁剪是裁剪掉看不见的物体的部分或全部,对于游戏来说只有一个裁剪面,哪有什么不同裁剪面?

我估计你说的是相对于相机坐标(视点)远近不同的物体吧,这个就是相机坐标->透视坐标的变换了,最后一步就是->屏幕坐标

物体坐标(也有叫惯性坐标、局部坐标)->世界坐标->相机坐标->透视坐标(这个就是做投影,得到的也就是所谓裁剪面上的投影)->屏幕坐标

这个是一般的3d游戏编程的坐标变换流程

s
stanley0614
具体情景是这样的,现在场景中绘制三维地球,远裁剪面到地球中心,因为我们只需要看到一半的地球。现在想在场景中添加太阳,因为太阳距离我们非常远(1.5亿公里),所以绘制太阳就要修改远裁剪面,因此太阳和地球的投影矩阵不同,问题是如何使用各自的投影矩阵而又让它们在同一场景中显示!
0
xyz555
xyz555
像太阳、月亮这样的东西表示成一个点光源就好了,没必要真的按实际比例去绘制。ogre给的demo都有这样的例子。
s
stanley0614
使用OpenGL我确实已经实现了 太阳的绘制
s
stanley0614
如果按实际比例可以绘制吗,因为不同裁剪面的实体在场景中还是很多的?
0
xyz555
xyz555

在3d编程中,对物体是要进行裁剪的,因此有个视锥,这是个六面的锥体(你可以想象成去了顶的三角锥体),顶部就是近裁面(设定这个是为了裁掉过大的物体)和一个远裁面(这个裁掉已经出了视野范围或过小的物体),另外还有4个梯形面,总之超出这六个面的物体都可以裁去。剪裁面剪裁面就是将超过剪裁面的东西裁掉。

我上面的说法也有错误,“对于游戏来说只有一个裁剪面”,应该是“对于游戏来说只有一个投影面,不要把“剪裁面”和“投影面”搞混了。没有什么“不同裁剪面的实体”,剪裁面就是检测是否应该剪裁判断的一个面,裁剪面上是没有实体的,投影面上才有。太阳的表示是用一个点光源表示,难道你还真是按距离缩放后放上一个投影的球体?没必要。

我觉得楼主要真想学习3d的话找本3d的书,了解一下概念再说,比如《3d数学基础》,不能跳过一些基础的东西,直接学ogre,这样会学得云里雾里的。

s
stanley0614
@小编辑 : 本地图片上传报告 服务器出错
小编辑
小编辑
@stanley0614 : 谁说这里不能上传图片啊
s
stanley0614
参考截图中太阳是用billboard技术,太阳的位置确实是按照实际距离(1.5亿公里)绘制
s
stanley0614
这里不能上传图片,效果图你可以参考http://www.ogre3d.org/forums/viewtopic.php?f=5&t=66599
s
stanley0614
谢谢你的回答,可能你没有明白的我的意思,我现在做的是GIS可视化。在OpenGL中,我是这样做的,绘制地球时,要设置当前的视图矩阵和投影矩阵,然后就可以绘制了。在绘制太阳时,调整OpenGL的视图矩阵和投影矩阵,绘制完成太阳之后再绘还原矩阵,这样太阳和地球就可以在同一场景中。现在在OGRE中如何实现这个效果呢。
0
xyz555
xyz555
看了你那个描述不太明白你的意思,一个屏幕中怎么会有两个相机,要么你将一个屏幕分成两个(比如赛车游戏的后视镜),要么你分屏显示。就拿你放在ogre上的那个图说,比如有个垂直屏幕向里的z坐标,要得到这效果,只要将地球的直径乘视距除以z坐标就是地球显示的直径,太阳的直径乘视距除z坐标就是太阳要显示的直径,(z是相机坐标中的分量)。这样就得到这样的效果。就是投影嘛。
返回顶部
顶部