PyOpenGL,使用glFrustum和glTrans在屏幕上显示三维图形的问题

2024-09-30 18:17:37 发布

您现在位置:Python中文网/ 问答频道 /正文

概述:

我正在尝试创建一个与此类似的3D应用程序:

www.youtube.com/watch?v=h9kPI7_vhAU. 

我使用的是OpenCV2.2、Python2.7和pyOpenGL。 这可以通过this background maths and code snippet实现,其中x,y,z是观众眼睛的位置(从网络摄像头抓取!)在

发行日期:

当我这样做时,我渲染的对象(立方体)会沿着z轴拉伸(进入屏幕),我不太确定原因。它被比作从上面俯视一座非常高的摩天大楼(与立方体相对)。当眼睛的z位置改变时,立方体在z方向上的位置变化非常快。This是一个帧的结果,它被拉伸了!在

代码(由bigD编辑):

^{pr2}$

getEye()返回的数据示例如下:

[0.25,0.37,1]如果观众的脸靠近屏幕左下方,并且距离屏幕1米远

[-0.5,-0.1,0.5]如果观众的脸靠近屏幕右上角,距离屏幕0.5米

绘制立方体时,其高度、宽度、深度为2,其中心位于(0,0,0)。在

如果有人想做一个类似的项目,想要一个启动,或者认为问题出在代码之外,我会提供完整的代码。在


Tags: 代码com应用程序距离屏幕youtubewwwthis
1条回答
网友
1楼 · 发布于 2024-09-30 18:17:37

你得到奇怪结果的原因是:

glTranslatef(-eye[0],-eye[1],-eye[2])

这个电话应该在

^{pr2}$

因为投影矩阵和glFrustum调用一样已经准备好了,如果你用一个平移矩阵乘以它,这个平移矩阵就不再是透视投影矩阵了。模型视图矩阵必须描述所有的世界和摄像机变换。在

还要记住,如果对modelview矩阵所做的唯一转换是转换,那么您将始终盯着负Z轴。在

相关问题 更多 >