Seite 1 von 1

Probleme bei Darstellung von Sprites auf 3d-Umgebung

Verfasst: 15.02.2009 18:17
von Elayn
Für mein Spiel, an dem gerade arbeite, möchte ich das Terrain in 3D und alles andere in 2D machen. Aber aus einem (mir) unerfindlichen Grund fuktioniert das nicht.

Hier der Quellcode (auf das wesentliche reduziert):


Code: Alles auswählen

InitEngine3D()
InitSprite()
InitKeyboard()
InitJoystick()

Add3DArchive("data",#PB_3DArchive_FileSystem)

OpenScreen(1280,800,32,"Test")

AmbientColor(RGB(20,254,39))

LoadTexture(0,"terrain_texture.jpg")
LoadTexture(1,"terrain_detail.jpg")

CreateMaterial(0,TextureID(0))
AddMaterialLayer(0,TextureID(1))

CreateTerrain("testTerrain.tga",MaterialID(0))

CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 200, 25, 200)


LoadSprite(0,"data\testbild.bmp")

Repeat
ExamineKeyboard()
ExamineJoystick(0)

h=TerrainHeight(CameraX(0),CameraY(0))+20

MoveCamera(0,JoystickAxisX(0)/3,0,JoystickAxisY(0)/3)
CameraLocate(0,CameraX(0),h,CameraZ(0))


RenderWorld()

DisplaySprite(0,0,0)

FlipBuffers()


Until KeyboardReleased(1)
P.S.:Die Dateipfade habe ich schon überprüft.

Code-Tags ergänzt - Kaeru fecit

Verfasst: 15.02.2009 18:25
von Kaeru Gaman
Willkommen an Board.

ich hab mal die Code-Tags ergänzt bei deinem Post.
die kann man beim Schreiben mit dem Button wo "Code" draufsteht erzeugen.


... von dem Problem hab ich schon ein paar Mal gehört.
anscheinend muss man noch was bestimmtes dabei beachten, wenn man Engine3D und 2DSprites zusammen benutzt.

aber grundsätzlich funktioniert es.... irgendwie.

Verfasst: 15.02.2009 19:27
von DrShrek
Kaeru Gaman hat geschrieben: aber grundsätzlich funktioniert es.... irgendwie.
Nein nicht irgendwie...es funktioniert immer dann, wenn das DirectX9 Subsystem verwendet wird.

Verfasst: 15.02.2009 19:31
von Kaeru Gaman
aha... so war das...
ja da gabs ein paar hins und hers, deswegen hatte ich das nicht so klar in erinnerung.

daher auch das Problem mit on-the-fly per Draw erzeugen eines HUD,
weil UseBuffer mit DX9 zu langsam ist.


@Elayn

Menu "Compiler"
Menupunkt "Compiler Options"
Erstes Panel "Compiler Options"
Textfeld "Library Subsystem"
dort eintragen "DirectX9"

Danke

Verfasst: 15.02.2009 19:58
von Elayn
Dank, jetzt funktionierts mit den Sprites! <)
Aber wieso funktioniert

Code: Alles auswählen

StartDrawing(SpriteOutput(0))
aber nicht

Code: Alles auswählen

StartDrawing(ScreenOutput())
?

Verfasst: 15.02.2009 21:07
von Kaeru Gaman
weil screenoutput nicht mit der neuen version der Engine3D funktioniert.
von Startdrawing würde ich hier sowieso abraten, das ist Performanceverschwendung.
am besten fährst du, wenn du dir einen SpriteFont zusammenstellst,
und die einzelnen Buchstaben von einer Routine direkt auf den Screen displayen läßt.

Verfasst: 16.02.2009 10:00
von Vermilion
Weiterer Vorteil von SpriteFonts ist, dass die Schriftart auf jedem System vorhanden ist und gleich aussieht. Denn wenn man unter z.B. Vista immer Segue UI lädt und anzeigt, würde das wohl unter Linux oder Mac OS X oder einfach älteren Windows Versionen nicht gehen bzw. nicht gleich aussehen, weil die Schriftart (standardmäßig) nicht vorhanden ist.