Я пытаюсь заставить Pyglet показывать спрайт сзади, когда перспектива вращается вокруг спрайтов. Если вы запустите код, вы увидите, что спрайты исчезают, когда перспектива перемещается под углом, достаточно большим, чтобы отставать от нормали спрайта более чем на 90 градусов.
Я знаю один Вариантом было бы преобразовать координаты и текстуру для имитации вращения, но это становилось очень сложным. Может быть, есть более простой способ? Обратите внимание, что здесь используется pyglet 2.0+, поэтому перспективу проще реализовать в 3D, а для рендеринга спрайтов по умолчанию используются шейдеры.
import sys
from math import cos, sin
import pyglet
from pyglet.math import Mat4, Vec3
if __name__ == "__main__":
if len(sys.argv) == 1:
print(f'Usage: {sys.argv[0]} ')
sys.exit(1)
window = pyglet.window.Window(width=964, height=540, resizable=True)
batch = pyglet.graphics.Batch()
initial_z = 300
global time
time = 0
@window.event
def on_draw():
window.clear()
batch.draw()
@window.event
def on_resize(width, height):
window.viewport = (0, 0, width, height)
window.projection = Mat4.perspective_projection(window.aspect_ratio, z_near=0.1, z_far=1000, fov=45)
return pyglet.event.EVENT_HANDLED
@window.event
def on_refresh(dt):
global time
time += dt
x = initial_z * sin(time)
z = initial_z * cos(time)
position = Vec3(x, 0, z)
window.view = Mat4.look_at(position, target, up)
pyglet.graphics.glEnable(pyglet.graphics.GL_DEPTH_TEST)
pyglet.graphics.glEnable(pyglet.graphics.GL_CULL_FACE)
sprites = []
for i in range(1, 3):
img = pyglet.image.load(sys.argv[1])
img.anchor_x = img.width // 2
img.anchor_y = img.height // 2
sprite = pyglet.sprite.Sprite(img, batch=batch)
sprite.scale = 0.01
sprite.x = sprite.width // 2 + i * sprite.width + i * 10
y = i
if i == 2:
y = -i
sprite.y = sprite.width // 2 + y * 20
sprite.z = y * 20
sprites.append(sprite)
position = Vec3(0, 0, initial_z)
target = Vec3(0, 0, -1)
up = Vec3(0, 1, 0)
window.view = Mat4.look_at(position, target, up)
pyglet.app.run()
Подробнее здесь: https://stackoverflow.com/questions/787 ... erspective
Пиглет Python заставляет спрайт отображаться сзади в трехмерной перспективе ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Бесконечная рамка на пути в 3D/динамической перспективе? Можно ли это сделать?
Anonymous » » в форуме CSS - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-