funky 3D - Kleine 3D Engine

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
oh... well?!
Beiträge: 98
Registriert: 21.07.2010 10:46
Computerausstattung: Intel Pentium D 2,8 GHz
2 GB RAM
ATI RADEON X700 SE

Zweitrechner :
Intel Pentium M 1,6 GHz
1 GB RAM
Intel 82852/82855 GM/GME Graphics Controller (64 MB)

funky 3D - Kleine 3D Engine

Beitrag 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/
Bild it's Monkey Buissness
Homepage
facebook
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: funky 3D - Kleine 3D Engine

Beitrag von bobobo »

DisplaySprite3D(#Sprite3D, x, y [, Transparenz])
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Re: funky 3D - Kleine 3D Engine

Beitrag 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.
Benutzeravatar
oh... well?!
Beiträge: 98
Registriert: 21.07.2010 10:46
Computerausstattung: Intel Pentium D 2,8 GHz
2 GB RAM
ATI RADEON X700 SE

Zweitrechner :
Intel Pentium M 1,6 GHz
1 GB RAM
Intel 82852/82855 GM/GME Graphics Controller (64 MB)

Re: funky 3D - Kleine 3D Engine

Beitrag 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.
Bild it's Monkey Buissness
Homepage
facebook
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Re: funky 3D - Kleine 3D Engine

Beitrag 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.
pb 4.51
Kevin
Beiträge: 236
Registriert: 11.06.2007 12:55

Re: funky 3D - Kleine 3D Engine

Beitrag 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
Benutzeravatar
oh... well?!
Beiträge: 98
Registriert: 21.07.2010 10:46
Computerausstattung: Intel Pentium D 2,8 GHz
2 GB RAM
ATI RADEON X700 SE

Zweitrechner :
Intel Pentium M 1,6 GHz
1 GB RAM
Intel 82852/82855 GM/GME Graphics Controller (64 MB)

Re: funky 3D - Kleine 3D Engine

Beitrag 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.
Bild it's Monkey Buissness
Homepage
facebook
Antworten