1

我想在我的个人项目中使用 Panda3D,但是在阅读了文档和一些示例源代码之后,我仍然有几个问题:

  • 如何仅渲染一帧并将其保存在文件中?事实上,我需要渲染 2 个不同的图像:一个对象,以及一个包含多个对象的场景,包括前一个对象,但每个对象只有一个帧,并且它们都需要保存为图像文件。

  • 该应用程序将使用 Python 编码,并且需要非常可扩展(可供数千名用户使用)。Panda3D 适合这里吗?(关于我的 Python 程序,它几乎是一个恒定的复杂性,所以这里没有问题,3D 模型将是低多边形的,每个场景大约 5 到 20 个)。

  • 我需要计算每个物体到相机的透视投影。是否可以直接访问顶点和面(位置、参数等)?

  • 我可以重新着色我的 3D 对象吗?我需要为整个对象设置一个简单的颜色,但每个对象设置不同的颜色。是否可以?

另请注意,我是图形和游戏开发领域的新手,但我了解一些 3D 建模和 3D 理论,以及计算机成像理论。

谢谢你读我。

PS:我目前的主要替代方案是使用 Soya3D 或 PySoy,但它们似乎并没有得到非常积极的开发和优化,所以虽然它们的内存占用都较小,但我不知道它们是否真的会比Panda3D,因为它们不是很优化......

4

2 回答 2

4
  • 您可以使用 截取场景的屏幕截图self.win.saveScreenshot(Filename)。例子:

    from panda3d.core import Filename
    
    file_name = Filename('whatever.png')) 
    self.win.saveScreenshot(file_name) 
    
  • 我自己从未使用过 Panda3D Networking API,但它应该在客户端做得很好。拥有数千名用户的服务器端的性能可能没有那么好,但您可以使用其他更适合重型网络的技术(如 C 或 NodeJS)对服务器软件进行编码。

  • 是的,您可以访问和修改顶点并将它们分组为面。默认顶点数据允许您设置顶点位置、法线、颜色和纹理坐标,但如果需要,您可以设置自己的自定义顶点格式。看一下手册:Panda3D 手册:创建和填充 GeomVertexData

  • 是的,可以使用设置对象颜色object.setColor(r,g,b,a)。更多信息:Panda3D 手册:着色和重新着色

希望能帮助到你!

于 2012-10-19T21:51:56.580 回答
2
  • 您可以使用启用了 setOneShot 的缓冲区,使其仅呈现单个帧。您可以通过将“window-type”PRC 变量设置为“none”来启动不带窗口的 Panda3D,然后自己打开一个屏幕外缓冲区。(注意:没有主机窗口的屏幕外缓冲区可能不被普遍支持。)如果您将“窗口类型”设置为“屏幕外”,base.win实际上将是一个缓冲区(这可能比必须设置自己的要容易一些),之后,您可以调用base.graphicsEngine.render_frame()以渲染单个帧,同时避免任务管理器的开销。由于双缓冲,您必须调用它两次。
  • 是的。迪士尼将 Panda3D 用于他们的一些 MMORPG。我必须补充一点,Panda 的高级网络接口的文档记录很差。
  • 您可以使用 计算从对象到相机nodepath.get_transform(base.cam)的转换,这是一个 TransformState 对象,您可以选择使用 将其转换为矩阵ts.get_mat()。这速度惊人的快,因为 Panda 为转换维护了一个组合缓存,因此不必多次发生这种情况。lens.get_projection_mat()您可以使用或逆使用获取投影矩阵(从视图空间到剪辑空间)lens.get_projection_mat_inv()。您还可以使用 Geom 接口访问单个顶点数据,这在 Panda3D 手册中有详细描述。
  • 您可以使用set_color更改对象的基本颜色(替换任何顶点颜色),或者您可以使用set_color_scale着色对象,即。应用与现有颜色相乘的颜色。如果您使用灯光并希望为漫反射、镜面反射和环境组件使用不同的颜色,您也可以应用材质对象。
于 2013-03-16T13:32:18.087 回答