战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  257 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

   Gizmo可以理解为坐标轴,就是3D软件里3个轴并可以调整对象的各种变换属性的东西.

    绘制Gizmo其实很简单,这里只说箭头的绘制中的一些技巧.一开始我的做法是MAX里建模,如图

image

然后创建3个模型对象,以Z为父级(我的坐标系是Z朝上), X,Y分别挂接Z节点

按照Ogitor中的介绍,需要将Z关闭绘制,结果,绘制顺序有错误

image

正确的效果应该是蓝色(Z轴,朝上)盖住绿色的Y轴.

这就涉及到X,Y,Z轴模型在Z关闭后的绘制顺序,需要通过检查对象的位置,按照从远到近的顺序进行绘制.

但是一开始每个轴的单位坐标都是在箭头的下部,因此,怎么旋转摄像机,都只能出1个绘制顺序.这就是问题所在. 因此,决定重新修改箭头的本地坐标系,调整为下图所示

image

MAX中,将箭头作为本地坐标原点, 并修改排序算法,对Z关闭后的对象按照画家算法排序,如图:

image

绘制效果正确.

解决这个问题时,我查阅了Ogitor代码,并在Ogitor编辑器资源里找到了箭头资源,但是代码中并没有用到这个资源,而是改用

AxisGizmo::createMesh(Ogre::SceneManager *manager, Ogre::String name)

函数用代码方式创建Gizmo,估计也是和我碰到一样的问题吧

posted on 2011-03-11 19:06 战魂小筑 阅读(1855) 评论(0)  编辑 收藏 引用 所属分类: 渲染 Shader 引擎

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理