Seite 1 von 1

funky 3D - Kleine 3D Engine

Verfasst: 07.04.2011 15:56
von oh... well?!
Bin dabei eine Engine für 3D Effekte zu programmieren. Die Engine benutzt lediglich die Sprite3D Befehle.

Hab blöderweise noch nich rausgefunden wie man etwas in den Z-Buffer schreibt. Desshalb ist das Ganze noch etwas langsam, weil die Polygonen nach ihrem Z-Wert sortiert werden und dann von hinten nach vorne gezeichnet werden. Desshalb funktioniert auch das Cell-Rendering nicht richtig. Wenn jemand ne Lösung weiß (außer einfach Ogre 3D zu verwenden), wäre ich ihm sehr verbunden mir diese mit zu teilen. Vielleicht kann mir auch jemand mitteilen wofür die Z-Koardinate beim DisplaySprite3D Befehl gut ist. die ist nämlich weder für den Z-Buffer noch für irgendwelche Fluchtpunktartigen Verformungen gut.
Danke schonmal im Vorraus.

Bild

Demoprogramm:
http://www.xup.in/dl,11025563/finky_3D.rar/

Re: funky 3D - Kleine 3D Engine

Verfasst: 07.04.2011 16:14
von bobobo
DisplaySprite3D(#Sprite3D, x, y [, Transparenz])

Re: funky 3D - Kleine 3D Engine

Verfasst: 08.04.2011 08:39
von X0r
Wenn jemand ne Lösung weiß (außer einfach Ogre 3D zu verwenden), wäre ich ihm sehr verbunden mir diese mit zu teilen. Vielleicht kann mir auch jemand mitteilen wofür die Z-Koardinate beim DisplaySprite3D Befehl gut ist. die ist nämlich weder für den Z-Buffer noch für irgendwelche Fluchtpunktartigen Verformungen gut.
PB-Hilfe?

Außerdem ist es doch sehr fragwürdig dein Programm als 3D Engine zu bezeichnen, wenn es selbst Funktionen einer Grafik-Engine verwendet.

Re: funky 3D - Kleine 3D Engine

Verfasst: 08.04.2011 11:33
von oh... well?!
bobobo hat geschrieben:DisplaySprite3D(#Sprite3D, x, y [, Transparenz])
Sorry, gemeint war natürlich der optionale z-Parameter beim TransformSprite3D Befehl.
X0r hat geschrieben:Außerdem ist es doch sehr fragwürdig dein Programm als 3D Engine zu bezeichnen, wenn es selbst Funktionen einer Grafik-Engine verwendet.
Da hast du Recht, desshalb habe ich beim Topic auch Kleine 3D Engine geschrieben. Hab nur gedacht, weil es alle Funktionen enthält, die für die wirkliche Darstellung eines dreidimensionalen Raumes benötigt werden (Offset,Drehung,Fluchtpunkt einer Kameraperspektive). Mit den Sprite3D Befehlen kann man ja nich wirklich was Dreidimensionales machen. kanns aber auch gerne nochmal ganz umbenennen falls das unbedingt erwünscht wird.
X0r hat geschrieben:PB-Hilfe?
Ja, daran hab ich wohl auch als erstes gedacht. Aber zum Thema z-Buffer steht da ja wirklich garnichts drin, und über den z-parameter des TransformSprite3D Befehl steht auch nur drin, dass er optional ist und dass man alle angeben muss sofern man einen angegeben hat.

Re: funky 3D - Kleine 3D Engine

Verfasst: 08.04.2011 14:05
von gnasen
oh... well?! hat geschrieben:Vielleicht kann mir auch jemand mitteilen wofür die Z-Koardinate beim DisplaySprite3D Befehl gut ist. die ist nämlich weder für den Z-Buffer noch für irgendwelche Fluchtpunktartigen Verformungen gut.
Die Sprite3D Befehle nutzen ja wie der Name schon vermuten lässt 3D Befehle zur Darstellung.
Allerdings wird der Z-Wert soweit ich weiss, nicht genutzt um die "Reihenfolge" der Sprites zu beeinflussen. Die Befehle sollen sich wie die normalen Sprite Befehle verhalten und dort entscheidet ja auch die Reihenfolge.
Nützlich ist der Wert aber dennoch, sagen wir du möchtest ein Sprite um die Y-Achse des Bildschirms drehen. Dafür müsstest du die 4 Ecken des Sprites als Koordinaten nehmen und durch eine Rotationsmatrix jagen. Das Ergebnis wäre ein 3 dimensionaler Vektor, bei dem die Entfernung in Z Richtung sehr wichtig ist, damit einmal Perspektive in das ganze hineinkommt und andererseits die Textur nicht verzerrt wird.

Re: funky 3D - Kleine 3D Engine

Verfasst: 08.04.2011 14:29
von Kevin
gnasen hat geschrieben:
oh... well?! hat geschrieben:Vielleicht kann mir auch jemand mitteilen wofür die Z-Koardinate beim DisplaySprite3D Befehl gut ist. die ist nämlich weder für den Z-Buffer noch für irgendwelche Fluchtpunktartigen Verformungen gut.
Die Sprite3D Befehle nutzen ja wie der Name schon vermuten lässt 3D Befehle zur Darstellung.
Allerdings wird der Z-Wert soweit ich weiss, nicht genutzt um die "Reihenfolge" der Sprites zu beeinflussen. Die Befehle sollen sich wie die normalen Sprite Befehle verhalten und dort entscheidet ja auch die Reihenfolge.
Nützlich ist der Wert aber dennoch, sagen wir du möchtest ein Sprite um die Y-Achse des Bildschirms drehen. Dafür müsstest du die 4 Ecken des Sprites als Koordinaten nehmen und durch eine Rotationsmatrix jagen. Das Ergebnis wäre ein 3 dimensionaler Vektor, bei dem die Entfernung in Z Richtung sehr wichtig ist, damit einmal Perspektive in das ganze hineinkommt und andererseits die Textur nicht verzerrt wird.
Hier gibt's ein Beispiel

Re: funky 3D - Kleine 3D Engine

Verfasst: 08.04.2011 15:23
von oh... well?!
@Kevin :
Ok, danke. Jetzt merkt ich zum ersten mal das der z-Parameter tatsächlich einen Sinn hat.

Aber ein z-Buffer lässt sich damit dann wohl nicht benutzen... Dann werd ich wohl irgendwie ne andere Lösung finden müssen.