python屏幕坐标系的原点_关于python:将3D点投影到2D屏幕坐标

在Kivy(Python和OpenGL)环境中,作者遇到将3D点投影到2D屏幕坐标的挑战。尝试使用模型视图和投影矩阵进行转换,但结果与预期不符。问题在于矩阵乘法的顺序以及处理分量除法的方式。经过调整,作者接近了正确答案,但仍存在细微偏差。
摘要由CSDN通过智能技术生成

我正在尝试将3d点投影到屏幕坐标,以确定是否在大致相同的区域发生触摸。应当指出,我是在Kivy(Python和OpenGL)中执行此操作的。我已经看到过类似的问题,但是我仍然没有解决方案。我已经尝试了以下方法,但是数字与屏幕坐标并不接近。

def to2D(self, pos, width, height, modelview, projection):

p = modelview*[pos[0], pos[1], pos[2], 0])

p = projection*p

a = p[0]

b = p[1]

c = p[2]

a /= c

b /= c

a = (a+1)*width/2.

b = (b+1)*height/2.

return (a, b)

为了说明这不会产生好的结果,请采用以下参数

modelview = [[-0.831470, 0.553001, 0.053372, 0.000000],

[0.000000, 0.096068, -0.995375, 0.000000],

[-0.555570, -0.827624, -0.079878, 0.000000],

[-0.000000, -0.772988, -2.898705, 1.000000]]

projection = [[ 15.763722, 0.000000, 0.000000, 0.000000],

[ 0.000000, 15.257052, 0.000000, 0.000000],

[ 0.000000, 0.000000, -1.002002, -2.002002],

[ 0.000000, 0.000000, -1.000000, 0.000000]]

pos = [0.523355213060808, -0.528964010275341, -0.668054187020413] #I'm working on a unit sphere, so these are more meaningful in spherical coordinates

width = 800

height = 600

使用这些参数,to2D给出屏幕坐标(1383,-274)

我不认为问题与OpenGL和python有关&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值