楼主: liuzhiyu123

OSG+Bullet GImpact碰撞检测Demo(附带源码)

[复制链接]

该用户从未签到

发表于 2013-4-24 19:35:27 | 显示全部楼层
感谢感谢 学习学习

该用户从未签到

 楼主| 发表于 2013-4-25 08:17:07 | 显示全部楼层
小发 发表于 2013-4-24 19:35
感谢感谢 学习学习

欢迎提出宝贵意见

该用户从未签到

发表于 2013-4-25 10:18:44 | 显示全部楼层
我专门登陆了来顶这个帖子的。

该用户从未签到

发表于 2013-7-16 21:18:05 | 显示全部楼层
观摩

该用户从未签到

发表于 2013-10-27 15:58:56 | 显示全部楼层
楼主太强了,顶一个!

该用户从未签到

发表于 2013-11-28 20:42:14 | 显示全部楼层
非常感谢楼主,作业正需要这个呢

该用户从未签到

发表于 2013-12-2 11:14:01 | 显示全部楼层
非常棒,好好学习一下

该用户从未签到

发表于 2014-6-27 16:55:38 | 显示全部楼层
请问如何将拖拽器部分源码make成工程文件啊?我是新手小白,求大神指导!

该用户从未签到

发表于 2014-8-15 09:46:04 | 显示全部楼层
#include <Demos/OpenGL/GL_Simplex1to4.h>
#include <Demos/OpenGL/GlutDemoApplication.h>

这些头文件都是哪来的啊??编译出错。。。。。

该用户从未签到

发表于 2014-9-28 17:48:02 | 显示全部楼层
看似很强大,先顶下楼主,感谢楼主的无私奉献

该用户从未签到

发表于 2014-11-20 11:40:49 | 显示全部楼层
it_ze 发表于 2013-4-16 20:57
Bullet不能编译,是因为我在vs2005下编译,后来根据错误提示在其官方找到了解决的办法。
我本来是想用vs2 ...

我也碰到这个问题了
Could NOT find Qt4 (missing:  QT_MOC_EXECUTABLE QT_RCC_EXECUTABLE QT_UIC_EXECUTABLE QT_INCLUDE_DIR) (found version "4.8.6")
Could NOT find Bullet (missing:  BULLET_DYNAMICS_LIBRARY BULLET_COLLISION_LIBRARY BULLET_MATH_LIBRARY BULLET_SOFTBODY_LIBRARY)
请问你当时是怎么处理的呢

我的环境:win7 32bit osg 3.0 QT 4.8 bullet 2.8
已经设置了Q_make_executable但是 还是有这么多字段找不到,这些字段是不是要自己定义呢
另外,bullet_root这个字段,应该是哪个目录呢,不管我指向编译后的lib目录还是刚下载好的源码目录,都还是报同样的错误

该用户从未签到

发表于 2014-11-20 12:24:00 | 显示全部楼层

2>..\..\..\src\osgDragger\BaseDragger.cpp(39): error C2039: 'accept' : is not a member of 'osgManipulator::MotionCommand'
在VS2010里编译 出现很多错误 其中一个是这个 关于accept的
求问大神,这个问题应该怎么解决

该用户从未签到

发表于 2014-11-20 16:50:15 | 显示全部楼层
CMake Warning (dev) at D:/Program Files/CMake/share/cmake-3.1/Modules/Qt4ConfigDependentSettings.cmake:74 (find_package):
  File D:/Program
  Files/CMake/share/cmake-3.1/Modules/Qt4ConfigDependentSettings.cmake
  includes
  F:/coding/example/osgVirtualAssembly/osgVirtualAssembly/CMakeModules/FindOpenGL.cmake
  (found via CMAKE_MODULE_PATH) which shadows D:/Program
  Files/CMake/share/cmake-3.1/Modules/FindOpenGL.cmake.  This may cause
  errors later on .

  Policy CMP0017 is not set: Prefer files from the CMake module directory
  when including from there.  Run "cmake --help-policy CMP0017" for policy
  details.  Use the cmake_policy command to set the policy and suppress this
  warning.
Call Stack (most recent call first):
  D:/Program Files/CMake/share/cmake-3.1/Modules/FindQt4.cmake:1191 (include)
  CMakeLists.txt:67 (FIND_PACKAGE)
This warning is for project developers.  Use -Wno-dev to suppress it.

Configuring done

这是我CMake configure后的log,有人来帮忙看一看吗

该用户从未签到

发表于 2014-11-27 10:32:31 | 显示全部楼层
本帖最后由 nononono 于 2014-11-27 10:34 编辑

最终编译通过了,简单记录一下我遇到的问题,供后来人少走弯路。
在CMake配置的时候,感觉有三点比较重要:一个是需要勾选“Advanced”选项,这样才能设置bullet的几个库。另外CMake的时候,QT_QMAKE_EXECUTABLE项应该指向bin文件夹下的qmake.exe而不是默认值,否则找不到qt其他的库。最后一个是bullet root项,只的是bullet的源码文件夹,也就是包含Demos文件夹的那个路径。
我用vs2010,编译的时候,还需要各种包含include和lib文件和路径。除此之外注意需要修改的有四个地方。一个是,在BaseDragger.cpp中,找到所有的“command.accept(*(*itr));”,将之注销掉,替换为“(*itr)->constrain(command);”,否则会报错accept不是command的成员。另两处修改是,在头文件BaseDragger中,补充声明Node::NodeMask _intersectionMask ;void setIntersectionMask(Node::NodeMask);这两个内容.在BaseDragger.cpp中实现setIntersectionMask(),简单将收到的参数赋值给_intersectionMask就可以.最后一处,可能有些人不会碰到,就是osgCollisionDetection中的CollisionInterface,他重载了一个bullet的ContactResultCallback类,其中有一个虚函数,可能和你本机的bullet里的ContactResultCallback类中对应虚函数的参数表不一样,会造成无法实例化抽象函数的问题.按照本机的参数表修改一致就可以了
可能有些问题只是我才遇到的,可能其他人会碰到其他问题,这里只是PO出来供大家参考.
我的环境:win7 32bit,osg 3.0.0,QT 4.8.6,bullet 2.8.2

该用户从未签到

发表于 2015-1-17 22:20:29 | 显示全部楼层
本帖最后由 nononono 于 2015-1-17 22:21 编辑

发现一个bug,不知道现在的版本有没有改过来,先贴出来吧
在collisionInterface.cpp中,addcollisionObject和updateCollisionObject 一共三个方法对矩阵的处理有问题。文档里面对matrix.getRotate的注释:
"Note that this function assumes a non-scaled matrix and will return incorrect results for scaled matrixces. Consider decompose() instead."
(http://trac.openscenegraph.org/d ... fd35a363eec6d61ba04  )
也就是说,读入模型所在的matrixtransform不能带有scale,否则在转动时碰撞体不会同步一起转。困扰了一个星期的问题总算解决了。

我把上述三个方法中对应步骤修改成下面这样:      

  1.         btGImpactMeshShape * chs = new btGImpactMeshShape(indexVertexArrays);
  2.         osg::Vec3f translation = osg::Vec3f();
  3.         osg::Quat rotation = osg::Quat();
  4.         osg::Vec3f scale = osg::Vec3f();
  5.         osg::Quat so = osg::Quat();
  6.         matrix.decompose(translation, rotation, scale, so);
  7.         //osg::Vec3 scale = matrix.getScale();
  8.         chs->setLocalScaling(asBtVector3(scale));
  9.         chs->setMargin(0.04f);
  10.         chs->updateBound();

  11.         btCollisionObject* object = new btCollisionObject;
  12.         matrix = osg::Matrixf::rotate(rotation)* osg::Matrix::translate(translation);
复制代码


       

该用户从未签到

发表于 2015-6-8 08:37:50 | 显示全部楼层
感谢楼主无私共享!!!

该用户从未签到

发表于 2015-12-18 10:05:10 | 显示全部楼层
支持一下,学习中

该用户从未签到

发表于 2015-12-27 21:05:49 | 显示全部楼层
nononono 发表于 2014-11-27 10:32
最终编译通过了,简单记录一下我遇到的问题,供后来人少走弯路。
在CMake配置的时候,感觉有三点比较重要 ...

你好关于这个写过什么配置文档了吗

该用户从未签到

发表于 2016-1-14 21:55:45 | 显示全部楼层
Pursue 发表于 2015-12-27 21:05
你好关于这个写过什么配置文档了吗

我自己没有另外写过什么文档,只是在使用楼主提供的库的过程中,发现的问题,记录在这后面。

该用户从未签到

发表于 2016-3-3 11:14:16 | 显示全部楼层
nononono 发表于 2014-11-27 10:32
最终编译通过了,简单记录一下我遇到的问题,供后来人少走弯路。
在CMake配置的时候,感觉有三点比较重要 ...

兄弟,Could NOT find Bullet (missing:  BULLET_DYNAMICS_LIBRARY BULLET_COLLISION_LIBRARY BULLET_MATH_LIBRARY BULLET_SOFTBODY_LIBRARY BULLET_INCLUDE_DIR)是怎么回事,我的环境变量已经设置好了,还是无法检测

该用户从未签到

发表于 2017-4-6 12:05:42 | 显示全部楼层
求问一下,我的Qt是5.8版本,cmake的时候报错:
Found unsuitable Qt version "5.8.0" from G:/Programs/Qt/Qt5.8.0/5.8/msvc2015/bin/qmake.exe
Qt QTGUI library not found.
Qt QTCORE library not found.

意思是Qt5.8不能用吗?是必须要换成4.几的版本吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表