PySDL2 version: 0.9.3
SDL2 version: 2.0.3
Я пытаюсь сделать это изображение в качестве текстуры на полигоне в PySDL2 с помощью SDL_gfx(Py) SDL2: Рисунок текстурированного многоугольника
но его дисплей полностью искажен, как может можно увидеть в нижнем правом углу в окне СВД:
у меня есть this python program, в котором я проверяю аль l sdlgfx, которые я реализовал в a FrameBuffer class, который заботится о рисовании и рендеринге. Все они хорошо работают, за исключением сглаженного многоугольника (средний зеленый шестиугольник, но это другой вопрос в другое время) и текстурированный многоугольник.
Чтобы обеспечить более базовый сценарий, я следовал за этими шагами, чтобы нарисовать текстурированный полигон:
# Initialize SDL2 and window
import sdl2
import sdl2.ext
import sdl2.sdlgfx
import ctypes
sdl2.ext.init()
window = sdl2.ext.Window(size=(800,600))
window.show()
# Create renderer and factories
renderer = sdl2.ext.Renderer(window)
renderer.clear(0)
renderer.present()
# Create sprite factory to create textures with later
texture_factory = sdl2.ext.SpriteFactory(renderer=renderer)
# Create sprite factory to create surfaces with later
surface_factory = sdl2.ext.SpriteFactory(sdl2.ext.SOFTWARE)
# Determine path to image to use as texture
RESOURCES = sdl2.ext.Resources(__file__, "LSD/resources")
image_path = RESOURCES.get_path("Memory.jpeg")
# set polygon coordinates
x = 100
row4 = 470
vx = [x, x+200, x+200, x]
vy = [row4-50, row4-50, row4+50, row4+50]
# Calculate the length of the vectors (which should be the same for x and y)
n = len(vx)
# Make sure all coordinates are integers
vx = map(int,vx)
vy = map(int,vy)
# Cast the list to the appropriate ctypes vectors reabable by
# the sdlgfx polygon functions
vx = ctypes.cast((sdl2.Sint16*n)(*vx), ctypes.POINTER(sdl2.Sint16))
vy = ctypes.cast((sdl2.Sint16*n)(*vy), ctypes.POINTER(sdl2.Sint16))
# Load the image on an SoftwareSprite
# The underlying surface is available at SoftwareSprite.surface
texture = surface_factory.from_image(image_path)
## RENDER THE POLYGON WITH TEXTURE
sdl2.sdlgfx.texturedPolygon(renderer.renderer, vx, vy, n,\
texture.surface, 0, 0)
# Swap buffers
renderer.present()
# Handle window close events
processor = sdl2.ext.TestEventProcessor()
processor.run(window)
sdl2.ext.quit()
Это выше пример сценария просто выводит:
я нахожу все это довольно сложной для работы с SDL2 с конверсиями ctype и всеми, и я очень доволен, что добрался до этого, но мне, похоже, не удается решить эту проблему самостоятельно. Кто-нибудь знает, на каком этапе я делаю ошибку, или кто-нибудь может указать мне в правильном направлении?
Как и у sidenote, я знаю, что PySDL имеет фабричные функции для рендеринга изображений, и они работают очень хорошо, но я действительно хочу получить возможность текстурирования многоугольников.
Спасибо за ваш ответ! К сожалению, я все еще получаю такое же искаженное отображение текстуры после реализации этого цикла событий. Странно, что отображение изображений и т. Д. Работает, так как я также полагаю, что это делается как рендеринг текстуры под капотом? –