在Vispy 3D绘图中,要获得点的位置,可以通过以下步骤实现:
app.Canvas
的自定义类,并重写on_mouse_press
方法:class MyCanvas(app.Canvas):
def __init__(self):
app.Canvas.__init__(self, size=(800, 600), title='Vispy 3D绘图')
self.points = np.random.normal(size=(100, 3)).astype(np.float32)
self.program = gloo.Program(vertex_shader='''
attribute vec3 position;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main() {
gl_Position = projection * view * model * vec4(position, 1.0);
}
''', fragment_shader='''
void main() {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
''')
self.program['position'] = gloo.VertexBuffer(self.points)
self.view = translate((0, 0, -5))
self.model = np.eye(4, dtype=np.float32)
self.program['model'] = self.model
self.program['view'] = self.view
self.program['projection'] = perspective(45.0, self.size[0] / float(self.size[1]), 2.0, 10.0)
self.show()
def on_draw(self, event):
gloo.clear(color=True, depth=True)
self.program.draw('points')
def on_mouse_press(self, event):
x, y = event.pos
viewport = (0, 0, self.size[0], self.size[1])
modelview = np.dot(self.view, self.model)
projection = self.program['projection'].reshape((4, 4))
point = gloo.pick(p1=(x, y), p2=(x, y), viewport=viewport, modelview=modelview, projection=projection)
if point is not None:
print("点击位置的点坐标:", self.points[point])MyCanvas
对象,并运行应用程序:if __name__ == '__main__':
canvas = MyCanvas()
app.run()以上代码创建了一个继承自app.Canvas
的自定义类MyCanvas
,在on_mouse_press
方法中,通过调用gloo.pick
方法获取点击位置的点坐标,并打印输出。
Vispy是一个基于OpenGL的高性能可视化库,支持2D和3D绘图。通过使用Vispy的相关函数和方法,可以轻松实现点的位置获取和其他绘图操作。
推荐的腾讯云相关产品:腾讯云GPU云服务器、腾讯云容器服务、腾讯云对象存储 COS。
更多关于Vispy的详细信息和示例代码,您可以访问腾讯云文档中的相关链接:
领取专属 10元无门槛券
手把手带您无忧上云