我正在尝试将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有关&