Self-made 3D innerhalb 2D-Engine?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
es_91
Beiträge: 383
Registriert: 25.01.2011 04:48

Self-made 3D innerhalb 2D-Engine?

Beitrag von es_91 »

Hi.

Es kam mir der Gedanke, es dürfte doch möglich sein, mittels mathematiischer Berechnungen eine 3D-Welt auf einem Canvas oder via Sprite-Library auf einem Screen zu rendern.

Meine Frage ist, wie ermittelt man die Screenpositionen der 3D-Punkte und wie erfährt man, ob eine Textur/Oberläche im Vordergrund oder hinter anderen Oberflächen/Texturen posioniert ist?

Ich saß im Mathe-Leistungskurs, ihr könnt also gern Formeln herballern. Mir persönlich fehlt jeglicher Ansatz...

Grüße

es_91
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Self-made 3D innerhalb 2D-Engine?

Beitrag von STARGÅTE »

es_91 hat geschrieben:Es kam mir der Gedanke, es dürfte doch möglich sein, mittels mathematiischer Berechnungen eine 3D-Welt auf einem Canvas oder via Sprite-Library auf einem Screen zu rendern.
Mittels Drawing2D und einem Canvas ist es ohne weiteres möglich eine 3D Welt zu rendern, hier ein Include von mir:
Drawing3D - Draw-Befehle für 3D-Szenen
Mit der Sprite-Library geht es leider nur eingeschränkt. Zwar ist es ohne Probleme möglich Sprites als 3D-Welt zu rendern (http://www.purebasic.fr/german/viewtopi ... 71#p336371), da jedoch die Sprites nacheinander gerendert werden, ist zwar eine Z-Sortierung möglich, aber keine Durchdringung!
es_91 hat geschrieben:Meine Frage ist, wie ermittelt man die Screenpositionen der 3D-Punkte und wie erfährt man, ob eine Textur/Oberläche im Vordergrund oder hinter anderen Oberflächen/Texturen posioniert ist?
Dazu benutzt man homogene Koordinaten, also 4-Dimensionale Vektoren, von denen 3 die drei Raumrichtungen X, Y und Z präsentieren und die 4. Komponente W = 0 (Richtung) oder W = 1 (Ort) ist. Mit zusätzlichen 4D-Matrizen können dann alle möglichen Transformationen durchgeführt werden und Schluss endlich bekommt man wieder ein 4D-Vektor, von dem X und Y deine Screenkoordinaten sind und Z und W Informationen zur Tiefe enthalten.
Weiterführende Links:
https://en.wikipedia.org/wiki/3D_projection
http://www.songho.ca/opengl/gl_projectionmatrix.html
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
es_91
Beiträge: 383
Registriert: 25.01.2011 04:48

Re: Self-made 3D innerhalb 2D-Engine?

Beitrag von es_91 »

es_91 hat geschrieben:Es kam mir der Gedanke, es dürfte doch möglich sein, mittels mathematiischer Berechnungen eine 3D-Welt auf einem Canvas oder via Sprite-Library auf einem Screen zu rendern.
>>
Hierfür danke! Ich werde mich damit auseinandersetzen, doch zuerst noch ein paar Fragen zu viewtopic.php?f=10&t=22128
STARGÅTE hat geschrieben:Das Include soll nicht als 3D-Engine benutzt werden (dafür ist es zu langsam), sondern dient zum Rendern von kleinen Szenen.
Ein Grund, warum ich hier die Frage stelle, ist das Ding mit SpiderBasic. Dort hat es derzeit keine 3D-Engine und ein Browser dürfte sowieso nochmal viel langsamer reagieren, als eine "echte" Grafik-CPU, darum frage ich Dich direkt:

Könnte Dein include irgendwie auf moderneren Rechnern noch eine 3D-Engine für Spiele/kleinere Welten und Szenerien im Browser abgeben?

Sicher verwendest Du auch Pointer, die unter SpiderBasic ja meiner Festellung nach nur sehr eingeschränkt funktionieren.

Des Weiteren:
STARGÅTE hat geschrieben:Mit der Sprite-Library geht es leider nur eingeschränkt. Zwar ist es ohne Probleme möglich Sprites als 3D-Welt zu rendern [...], da jedoch die Sprites nacheinander gerendert werden, ist zwar eine Z-Sortierung möglich, aber keine Durchdringung!
Das hieße nicht nur, dass Transparenz unmöglich wäre, sondern auch jede Art "interner" Beleuchtung, richtig ? Aber es gab doch die Möglichkeit, Sprites auch transparent darzustellen, könntest Du bitte dazu etwas sagen?



:D
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Self-made 3D innerhalb 2D-Engine?

Beitrag von STARGÅTE »

>> "Könnte Dein include irgendwie auf moderneren Rechnern noch eine 3D-Engine für Spiele/kleinere Welten und Szenerien im Browser abgeben?"
Ich denke nicht. "Heute" schreibt man keine CPU-3D-Engine mehr, dafür ist die Erwartungshaltung für das was dargestellt wird zu hoch. Was ich damit sagen will ist: Wenn deine 3D-Welt nur auch Linien besteht, ist meine Engine durchaus geeignet, aber sobald Texturen gargestellt werden sollen (was ja gehen würde) wäre die CPU-Lösung viel zu langsam.
Auch Browsergames nutzen ja nicht die CPU sondern haben ebenbürtige "echte" 3D-Engines.

>> "Das hieße nicht nur, dass Transparenz unmöglich wäre, sondern auch jede Art "interner" Beleuchtung, richtig ? Aber es gab doch die Möglichkeit, Sprites auch transparent darzustellen, könntest Du bitte dazu etwas sagen?"
(halb)-Transparente Sprites darzustellen ist ohne weiteres möglich. Man muss dabei nur auf die genaue Reihenfolge achten.
Wenn also alle anzuzeigenden Sprites (bzw. Texturflächen) erst nach Z-Tiefe sortiert werden und dann von hinten nach vorne angezeigt werden, funktioniert das.
Die Beleuchtung ist da etwas komplizierter. Da du keinerlei Zugriff auf die Pixel hast (im Rahmen der Sprite-Lib) und nicht mal die 4 Ecken des Sprites kontrollieren kannst, können nur immer ganze Sprites einheitlich in der Farbe geändert werden.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
es_91
Beiträge: 383
Registriert: 25.01.2011 04:48

Re: Self-made 3D innerhalb 2D-Engine?

Beitrag von es_91 »

Ok. Was wäre, wenn die Welt nicht aus Texturen, sondern nur aus einfarbigen Flächen bestehen würde? Kannst Du dazu derzeit eine Aussage treffen?

(Wenn ich Dich richtig verstanden habe, würde schon ein berechneter Farbverlauf/Gradient zuviel Leistung ziehen, stimmt das auch?)

_________________________________

>> Wenn deine 3D-Welt nur auch Linien besteht, ist meine Engine durchaus geeignet, aber sobald Texturen gargestellt werden sollen [...] wäre die CPU-Lösung viel zu langsam.
_________________________________


Wieder ein Dankeschön. :)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Self-made 3D innerhalb 2D-Engine?

Beitrag von STARGÅTE »

es_91 hat geschrieben:Ok. Was wäre, wenn die Welt nicht aus Texturen, sondern nur aus einfarbigen Flächen bestehen würde? Kannst Du dazu derzeit eine Aussage treffen?
Textur oder Fläche ist egal, es kommt auf die gerenderten Pixel an.
es_91 hat geschrieben:(Wenn ich Dich richtig verstanden habe, würde schon ein berechneter Farbverlauf/Gradient zuviel Leistung ziehen, stimmt das auch?)
Nein. Wenn eine Fläche eh berechnet werden muss, und Pixel für Pixel gerendert wird, ist ein "bisschen" Farbverlauf auch nicht mehr wild.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
es_91
Beiträge: 383
Registriert: 25.01.2011 04:48

Re: Self-made 3D innerhalb 2D-Engine?

Beitrag von es_91 »

Und könnte man die pixelgenaue Renderung nicht umgehen, indem man jede Textur der Reihe nach zweidimensional verzerrt und dann, rundum transparent, alle übereinanderzeichnet?
Antworten