首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kivy3在单击对象时运行函数

Kivy3在单击对象时运行函数
EN

Stack Overflow用户
提问于 2021-05-04 00:21:59
回答 1查看 25关注 0票数 0

我有一个应用程序,我在散布中有一个渲染器,我需要知道当有人点击对象时,但因为对象不是直接在相机下面,我不知道它的X和Y坐标,只知道它的X,Y和Z。相机是垂直向下的,我有多个可移动的物体,所以我需要能够在旅途中解决它。

我尝试使用向量和矩阵,但文档不是很好,所以我在这方面遇到了很多麻烦。我也试着用数学-

代码语言:javascript
复制
bPos = obj.pos[0], obj.pos[1],  obj.pos[2]
bPos2 = .obj.pos[0] + 10, obj.pos[1] + 10., obj.pos[2] # I also don't know how to get the exact size so I tried this
cPos = self.camera.pos

pitch = atan((bPos[0] - cPos.x) / (bPos[1] - cPos.y))
yaw = atan((bPos[2] - cPos.z) / (bPos[1] - cPos.y))

x = width() / 2 + (pitch * (width() / self.camera.fov))
y = height() / 2 + (yaw * (height() / self.camera.fov))


pitch2 = atan((bPos2[0] - cPos.x) / (bPos2[1] - cPos.y))
yaw2 = atan((bPos2[2] - cPos.z) / (bPos2[1] - cPos.y))

x2 = width() / 2 + (pitch2 * (width() / self.camera.fov))
y2 = height() / 2 + (yaw2 * (height() / self.camera.fov))



with self.canvas.after: # To draw some points on so I know where it thinks the boundaries are
    Color(rgba=(0, 1, 0, 0.5))
    Rectangle(pos=(x, y), size=(10, 10))

    Color(rgba=(0, 0, 1, 0.5))
    Rectangle(pos=(x2, y2), size=(10, 10))

我的所有对象都是10 x 10 x 10。(-5到5)

整个项目在GitHub here上,但它很混乱,而且很大,相关的部分在this file的底部

EN

回答 1

Stack Overflow用户

发布于 2021-05-05 03:54:53

我已经设法做到了,我用一个Matrix.project()来做到这一点,我通过使用openGl本身而不是OpenGL来解决这个问题!

代码语言:javascript
复制
m = Matrix()

x, y, z = m.project(obj.pos[0]-5, obj.pos[1]-5, obj.pos[2]-5,
                    camera.model_matrix, camera.projection_matrix,
                    camera.pos.x, camera.pos.y, width, height)

x2, y2, z2 = m.project(obj.pos[0]+5, obj.pos[1]+5, obj.pos[2],
                       camera.model_matrix, camera.projection_matrix,
                       camera.pos.x, camera.pos.y, width, height)

在浏览kivy3 camera类时,我找到了模型和投影矩阵。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67372377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档