5
PySDL2 version: 0.9.3
SDL2 version: 2.0.3

sdl_gfx を使用して、この画像を PySDL2 のポリゴンのテクスチャとしてレンダリングしようとしています

ここに画像の説明を入力

しかし、SDL ウィンドウの右下隅に見られるように、その表示は完全に歪んでいます。

ここに画像の説明を入力

描画とレンダリングを処理する FrameBuffer クラスに実装したすべての sdlgfx 描画関数をテストするこの python プログラムがあります。アンチエイリアス処理されたポリゴン (中央の緑色の六角形ですが、これはまた別の問題です) とテクスチャ ポリゴンを除いて、それらはすべてうまく機能します。

より基本的なスクリプトを提供するために、次の手順に従ってテクスチャ ポリゴンを描画しました。

# 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 変換などを行うのは非常に困難であり、ここまで到達できて非常に満足していますが、自分でこれを解決することはできないようです。どのステップで間違いを犯しているのか、誰かが私を正しい方向に向けることができますか?

補足として、PySDLには画像をレンダリングするためのファクトリ関数があり、それらは非常にうまく機能することを知っていますが、ポリゴンのテクスチャリングオプションも機能させたいと思っています.

4

2 に答える 2

3

これは、基礎となる sdl2_gfx ライブラリの C/DLL レベルの単なるバグであることがわかりました。sdl2_gfx の自作バージョンは 1.0.0 ですが、バージョン 1.0.1 (2014 年 6 月 15 日) は既にリリースされています。sdl2_gfx 1.0.1 が利用可能な Windows と Ubuntu でテストしましたが、テクスチャ ポリゴンは正しく描画されます (ただし、オフセット パラメータの使用法はまだ少し怪しいです)。

結論: テクスチャ ポリゴンを使用する場合は、sdl2_gfx 1.0.0 を使用しないでください。そこでは機能していません。v1.0.1 を試してみてください。

于 2015-05-13T11:35:39.077 に答える