Ogre Lod的一个bug及其修改
2016-04-27 18:30
295 查看
平台类型: | |
---|---|
程序设计: | |
编程语言: | |
引擎/SDK: |
Ogre:![]() istanceLodStrategy的一个Bug 问题描述: 当我把一个不在原点的Mesh加入到Entity中(Mesh的boundingbox原点不在Vector(0,0,0)点)处. 而将Entity attach到一个在原点Vector(0,0,0) Node中。 如果mesh有lod, 此时lod将会显示异常。如果Mesh 的 boundingbox中心距离Node 的位置比较远,即便是Camera 在 mesh附近也无法显示比较细节的Lod. 原因和修改: 在Real DistanceLodStrategy::getValueImpl(const MovableObject *movableObject, const Ogre::Camera *camera) const 函数中 第一句代码: Real squaredDepth = movableObject->getParentNode()->getSquaredViewDepth(camera) - Math::Sqr(movableObject->getBoundingRadius()); 仅仅计算Node 到 Camera的距离,而无法反映 Camera 到Mesh的实际距离。 修改如下: Real squaredDepth = movableObject->getParentNode()->getSquaredViewDepth(camera) - Math::Sqr(movableObject->getBoundingRadius());//保持不变 //计算 Mesh 到 Camera 的距离 Entity* entity = static_cast<Entity*>(const_cast<MovableObject*>(movableObject)); //这句不是很好 if(entity)//仅仅处理Entity对于其他的,自己添加 { //找到Node 的世界坐标 Vector3 DerivedPos = movableObject->getParentNode()->_getDerivedPosition(); //Camera的世界坐标 Vector3 Camdiff = camera->getDerivedPosition(); AxisAlignedBox meshbox = entity->getMesh()->getBounds(); //计算Mesh的世界坐标 Vector3 MeshDiff = (meshbox.getMaximum() + meshbox.getMaximum())/2.0 + DerivedPos; Vector3 diff = MeshDiff - Camdiff; //计算Camera到Mesh的距离 squaredDepth = diff.squaredLength() - Math::Sqr(movableObject->getBoundingRadius()); } |
相关文章推荐
- Flink Event Time , Processing Time 和 Ingestion Time概念
- 关于Integer的parseInt(String s, int radix)方法的使用
- iOS开发中的基于CAShapeLayer和贝塞尔曲线的圆形进度条动画
- org.hibernate.hql.ast.QuerySyntaxException: XX is not mapped [from XX]
- HDU 2136 Largest prime factor
- 电源管理芯片nxe2100驱动
- 浮动路由
- 泛型笔记,类,方法
- hibernate——继承关系以及三个subclass标签的区别
- STL 三大组件介绍
- 缓存淘汰算法--LRU算法
- C#操作Sql server数据库
- Shader之学习笔记二
- 地域划分问题
- leetcode——98——Validate Binary Search Tree
- django修改models重建数据库
- 回归树|GBDT|Gradient Boosting|Gradient Boosting Classifier
- AndroidAnnotations 注解框架的优势对比、配置及使用教程
- 递归搜索MP3文件
- 团队作业四