Пиглет Python заставляет спрайт отображаться сзади в трехмерной перспективеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Пиглет Python заставляет спрайт отображаться сзади в трехмерной перспективе

Сообщение Anonymous »

Я пытаюсь заставить 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Пиглет – Как добавить в сцену этап постобработки цветения?
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Бесконечная рамка на пути в 3D/динамической перспективе? Можно ли это сделать?
    Anonymous » » в форуме CSS
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Справка OpenGL о координатах в перспективе
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Не могу исправить uncaught (в перспективе) синтаксисратор: не может преобразовать 22,42,79,4,0,0,0,0 в Bigint
    Anonymous » » в форуме Javascript
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • HTML/JavaScript, триггерная функция сзади [закрыто]
    Гость » » в форуме Javascript
    0 Ответы
    25 Просмотры
    Последнее сообщение Гость

Вернуться в «Python»