Probleme bei Darstellung von Sprites auf 3d-Umgebung

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Elayn
Beiträge: 14
Registriert: 15.02.2009 17:34

Probleme bei Darstellung von Sprites auf 3d-Umgebung

Beitrag 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
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag 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.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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"
Benutzeravatar
Elayn
Beiträge: 14
Registriert: 15.02.2009 17:34

Danke

Beitrag 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())
?
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag 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.
Antworten