pip install vispy
python
import numpy as np
from vispy import app, gloo
from vispy.util.transforms import perspective, translate, rotate
from vispy.io import load_data_file
from vispy.geometry import create_sphere
python
scene = gloo.Program(vertex_shader=vertex_shader, fragment_shader=fragment_shader)
scene['model'] = np.eye(4)
scene['view'] = translate((0, 0, -5))
scene['projection'] = perspective(45.0, 1.0, 0.1, 100.0)
python
vertices, normals, indices = create_sphere(accuracy=3)
scene.bind(gloo.VertexBuffer(vertices.astype(np.float32)))
scene.bind(gloo.IndexBuffer(indices.astype(np.uint32)))
@canvas.connect
def on_draw(event):
gloo.clear()
scene.draw()
canvas.show()
app.run()
python
from vispy.visuals.transforms import MatrixTransform
view = MatrixTransform()
@canvas.connect
def on_resize(event):
width, height = event.size
canvas.context.set_viewport(0, 0, width, height)
view.set_size((width, height))
@canvas.connect
def on_mouse_move(event):
if event.is_dragging:
dx, dy = event.delta
view.rotate(dy, (1, 0, 0), anchor=(0, 0, 0))
view.rotate(dx, (0, 1, 0), anchor=(0, 0, 0))
scene['view'] = view.matrix
@canvas.connect
def on_key_press(event):
if event.key == 'Escape':
app.quit()
view.add_child(scene)
scene.parent = view
app.run()