Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中不同深度上多个3D对象的透视投影_Python_3d_Rendering_Projection_Perspective - Fatal编程技术网

Python中不同深度上多个3D对象的透视投影

Python中不同深度上多个3D对象的透视投影,python,3d,rendering,projection,perspective,Python,3d,Rendering,Projection,Perspective,对于我的个人项目,我需要: 生成从三维对象到二维平面的透视投影(在空间中定义的点上,即相机) 获取透视投影的精确面积/点坐标o 生成多个三维对象的透视投影,其中一些对象可能位于其他对象的后面 渲染场景(只有一个图像,没有任何动画,因此不需要实时渲染) 对于第1点、第2点和第4点,我认为我已经找到了一种使用PyGame的方法,如下所述: 但对于第三点,我有点困惑,因为即使我能得到每个物体的透视投影,我怎么知道哪个物体是真正可见的,哪个(完整物体或部分)不是 我真的需要确切地知道对象的哪些部分是可

对于我的个人项目,我需要:

  • 生成从三维对象到二维平面的透视投影(在空间中定义的点上,即相机)

  • 获取透视投影的精确面积/点坐标o

  • 生成多个三维对象的透视投影,其中一些对象可能位于其他对象的后面

  • 渲染场景(只有一个图像,没有任何动画,因此不需要实时渲染)

  • 对于第1点、第2点和第4点,我认为我已经找到了一种使用PyGame的方法,如下所述:

    但对于第三点,我有点困惑,因为即使我能得到每个物体的透视投影,我怎么知道哪个物体是真正可见的,哪个(完整物体或部分)不是

    我真的需要确切地知道对象的哪些部分是可见的,哪些部分是不可见的,因此我的最终目标是让屏幕图像的矩阵清楚地定义每个对象的投影区域

    例如,如果矩阵包含我的屏幕图像的所有像素,并且我们有10个对象,那么在没有对象的情况下我们将得到0,在可以看到对象n1的情况下得到1,在可以看到对象n2的情况下得到2,等等

    我必须补充一点,我是一名精通Python和其他许多语言的开发人员,但我以前从未做过任何与游戏相关或渲染的开发

    有人能帮我走上正轨吗


    附带问题:如果你能给我指出一个比PyGame更好的透视投影和渲染优化实现,我会非常感兴趣的

    我建议将OpenGL用于此类任务。学习基本的OpenGL(这看起来非常基本)并不是一件很费力的事。看一看(众所周知的教程)和(使用Python、Qt和OpenGL的基本示例)。我想,经过一些努力,这可能需要你一天的时间来开始。

    我想也许我应该使用一种算法来处理2D空间中的碰撞?但这里的问题是,我需要Z坐标,它似乎也会随2D投影点一起返回,但这真的是一个可行的解决方案吗(我对这类游戏非常陌生)。你试过OpenGL吗?有一个Python包装器(PyOpenGL),我曾在许多项目中使用过它,并取得了巨大的成功。如果你有每个对象的透视投影,一个简单的消除隐藏表面的方法就是将它们拉回到前面。如果它们是由3d多边形组成的,那么您必须以这种方式收集、排序和绘制所有这些多边形。另一个相对简单的方法是使用Z缓冲区,它基本上跟踪图像阵列中每个像素位置处显示的曲面的Z值。当然,如果允许您使用OpenGL或Direct3D之类的工具(并为它们提供包装),所有这些都可以为您完成,可能是在硬件上。谢谢您的想法。事实上,我想我将通过从后向前绘制来消除隐藏的表面。我可以使用我想要的任何东西,但我以前从未使用过OpenGL,因为它是一个低级API,我认为对我来说操作起来相当困难。你说我可以用硬件做这件事是什么意思?OpenGL是否已经有了消除隐藏表面的现有功能?最后,我选择了Panda3D,因为它现在可以更快地原型化,如果性能需要,我可以稍后切换到直接OpenGL交互。其他的替代品还有Soya3D、PySoy或cgkit,它们都与Python一起工作,但Panda3D绝对是其中最先进的引擎。感谢链接,我不知道它们,欢迎它们。然而,这并不能回答真正的问题,所以我只是给了你更高的票数。仍然很高兴我能在链接方面帮助你——这是值得一读的。