2011-10-14 56 views
2

我正在开发一个增强现实项目,该项目使用多个标记来获取我打算覆盖的3D模型的位置。 (我从零开始使用OpenCV进行此操作,但我没有使用ARToolkit或任何其他现成的标记检测库)。桌面增强现实应用程序的3D模型操作

环境:VISUAL C++ 2008,Windows 7中,酷睿2 1GB内存,OpenCV的2.3

我想要的3D模型由用户操作因此它会变成一种模拟。

为此我计划使用OpenGL。你有什么建议,建议?模拟部分可以使用OpenGL本身完成,还是需要使用OpenSceneGraph/ODE/Unity 3D/Ogre 3D之类的东西?

如果我能生产更多的自编码系统而不是使用现成的产品,这对于一个学术项目来说更好。

+1

OpenGL是用于渲染。如果你的模拟涉及物理学,你应该考虑整合某种类型的3D物理库来确定你的虚拟物体的位置。基于这些计算,您可以使用OpenGL渲染模型。 – Pedro

+0

+1的回复。我急切地等待,直到有人回复。谢谢。到目前为止,我的范围是操纵模型,让我们说改变颜色,3D模型的大小。如果使用“场景”图表,那么它是不必要的吗?谢谢。 – coder9

+0

我自己并没有使用任何场景图库,但据我所知它用于在场景中以父子关系分级存储所有对象。假设场景图库提供了将对象从一个本地坐标系转换为另一个本地坐标系的方法,例如,当一个对象被附加到一个新的父节点上时如果你有一个复杂的场景,并且有许多处于父子关系中的对象,场景图将是有用的如果你只是想切换颜色,例如取决于哪个标记是可见的,我想这是没有必要的。 – Pedro

回答

2

看起来OpenGL足够满足您的需求(绘制具有特定颜色和大小的模型)。

如果您是OpenGL的新手,并且您不打算将其用于您的未来项目,那么使用旧的固定功能管线可能更容易,该管线已经具备照明和颜色系统,并且不会你不需要学习如何编写着色器。

对于您的项目,您需要一个纹理,您可以使用glTexSubImage2D()将相机中的图像复制到相机中,然后再将其绘制到背景中(或者,您可以使用glDrawPixels()以防您不需要任何缩放)。之后,你需要有你的模型,完整的照明法线。模型可以是例如。从Blender或3DS Max导出为ascii格式,这很容易解析。然后你可以绘制模型。在绘制模型之前可以使用glColor3f()更改颜色(确保在绘制模型时不指定不同的颜色)。模型的定位使用矩阵完成。旧的OpenGL有一些方便和易于使用的功能来旋转和翻译对象。还有用于缩放对象的功能(改变大小),因此覆盖非常容易。所有你需要的是找出相对于标记的相机位置(我相信这是在OpenCV中实现的)。

如果您要使用向前兼容的OpenGL,则需要设置顶点缓冲区对象以包含模型数据,并编写顶点和片段着色器以阴影和显示模型。这是更多的工作,您可以获得更大的灵活性。但是,如果您决定需要它们(例如,用于某些特殊效果),您也可以在旧的OpenGL中使用着色器。

学习如何使用场景图或引擎(食人魔)可能需要一些时间,我不会为你的任务推荐它。

相关问题