从GitHub上下载PhysX3.3源代码,里面包含了snippet系列示例。相比于sample,snippet更加简单,它使用OpenGL和glut工具包作为渲染和窗口系统依赖项。此外,运行snippet不需要计算机有Nvidia显卡(sample代码使用cuda)。我们从SnippetHelloWorld开始,学习构建PhysX程序的主要步骤。
HelloWorld示例在窗口中渲染了一些堆叠起来的立方体,可以通过按B键添加立方体。按空格键可以从视角方向发射一个球,打击立方体堆使它塌陷(有点像愤怒的小鸟...)。此外,我们还可以通过wasd和鼠标来操控相机方向,从而控制球的发射方向。
除了HelloWorld,snippet示例解决方案中的项目都包含了SnippetCamera.h和SnippetRender.h头文件(以下简称Camera和Render)。Render中定义了5个渲染函数,封装了OpenGL和glut工具包的相关函数,实现了创建窗口、图形绘制、渲染启动序列等操作;Camera是一个类,封装了OpenGL视角的定位、键盘和鼠标对视角的控制等。这两个头文件中的全部成员都使用snippet命名空间。
HelloWorld项目包含SnippetHelloWorld和SnippetHelloWorldRender两个.cpp文件,其中PyhsX的主要实现都放在前者里,后者定义了许多glut接口的回调函数,在主函数renderLoop中实现了渲染进程的主循环。renderLoop的代码如下:
void renderLoop()
{
sCamera = new Snippets::Camera(PxVec3(50.0f, 50.0f, 50.0f), PxVec3(-0.6f,-0.2f,-0.7f));
Snippets::setupDefaultWind