Seite 1 von 8

Drawing3D - Draw-Befehle für 3D-Szenen

Verfasst: 23.03.2010 19:13
von STARGÅTE
Dieses Include ist eine Erweiterung der Drawing-Library um Linien, Dreicke, Flächen oder ganze Körper im dreidimensionalen zu zeichnen. Das ganze basiert auf reinen Drawing- und CPU-Befehlen, sodass keine zusätzlichen DLLs oder Anforderungen an die Grafikkarte nötig sind. Das Include soll nicht als 3D-Engine benutzt werden (dafür ist es zu langsam), sondern dient zum Rendern von kleinen Szenen.

Drawing3D.zip
Enthält das Inlcude, eine Demo und fünf Beispiele.

Allgemein kann ich noch dazu sagen:
  • Mit StartDrawing3D() : StopDrawing3D() wird die Umgebung geöffnet.
  • Als Normal ist alles so eingestellt, dass die Angaben in den Positionen echte Pixel sind (von Breite und Höhe)
  • Mit Drawing3DMode() kann ich #Drawing3D_Outline oder #Drawing3D_Default auswählen
  • Drawing3DPosition() und Drawing3DRotation() ändern Position und Rotation der Szene
  • Alle Farbangaben sind immer in 32-Bit anzugeben ($FF00FF00 für Grün)
  • Drawing3DBackground() Füllt die Umgebung mit der angegebenen Farbe. (wenn der Alphawert 0 ist, ist der Hintergrund echt Transparent, nützlich bei 32-Bit-Images)
  • Drawing3DLight() setzt ein Licht (mit der Angabe woher es kommt) in die Szene
  • DrawPoint3D(), DrawLine3D() und DrawTriangle3D() zeichnet ein Punkt, Linie oder Dreick (jeweils mit Vertexfarben)
  • bei DrawPlane3D(), DrawImage3D() und DrawBox3D() wird nur Position, Größe und Rotation angegeben.
  • CreateImage3D() erstellt ein Image3D aus dem Image
Hier ein Beispiel einer Drawing3D-Szene mit transparentem Hintergrund.
Bild

Re: Drawing3D - unfertiger Code für Drawing-Befehle im 3D-Ra

Verfasst: 23.03.2010 19:19
von c4s
Sieht nützlich und gut aus - Danke.

Re: Drawing3D - unfertiger Code für Drawing-Befehle im 3D-Ra

Verfasst: 23.03.2010 23:40
von Max_der_Held
wow, aber echt he :)
super sache stargate :) daraus lässt sich was machen (meiner meinung nach pbosl character)
lg
walker

Re: Drawing3D - unfertiger Code für Drawing-Befehle im 3D-Ra

Verfasst: 25.04.2010 19:46
von Josef Sniatecki
Echt cool
Dickes Lob :allright:

Wie ich sehe, werden die primitiven Körper (Kugeln und Quader) hauptsächlich durch Line3D gezeichnet. Das schärfste wären nun 3D Bezier-Kurven, da ich gesehen habe, dass die Grüne Wellenform aus deinem Beispiel ab einer bestimmten Entfernung nur aus Punkten besteht.

Ansonsten ist diese Befehlssammlung gut fürs Zeichnen von kleinen 3D-Veranschaulichungen. :)

Re: Drawing3D - unfertiger Code für Drawing-Befehle im 3D-Ra

Verfasst: 24.08.2010 14:04
von TomS
Danke, du blöder Bot. Letzte Woche hab ich mit so was angefangen und dabei liegt hier schon was seit Monaten rum. :lol:
Das Beispiel schaut nett aus, STARGÅTE :allright:

Re: Drawing3D - Demo für das kommende Include

Verfasst: 21.09.2012 14:23
von STARGÅTE
Tachchen,

nach langer Zeit hab ich mich mal wieder an meinen alten Code gesetzt und Drawing3D ein Update verpasst.
Das Include ist noch nicht fertig, aber da ich gerade "Pause" mache, möchte ich euch trotzdem mal eine Demo zukommen lassen:
BildBildBild
  • Im neuen Include ist es nun möglich auch Flächen darzustellen zu lassen, (Triangle3D, Plane3D).
  • Drawing3D besitzt nun einen Z-Buffer der auch bei transparenten Pixel für das richtige Alphablending sorgt.
  • Es können Lichter platziert werden (aktuell aber nur aus welcher Richtung sie strahlen)
Mir ist durchaus bewusst, das eine Grafikkarte sowas im Schlaf erledigen würde. Aber es war nun mal mein Ziel das ganze auf Softwareebene zu schreiben nur mit Drawingbefehlen!

Hier könnt ihr euch die Demo angucken (schon mit unfertigem Include):
Drawing3D - Demo
Mit gedrückter Maus, könnt ihr die Ansicht drehen. Bitte wirklich ohne Debugger starten, ansonsten ist der Code sehr sehr langsam.
Der Code (vorallem das Zeichnen der Dreiecke) ist auch noch nicht optimiert (soweit das auf CPU-Ebene möglich wäre), daran arbeite ich aber. Außerdem soll es noch eine Art Container geben (Cluster3D) in den man dann "reinzeichnen" kann, sodass Sachen Gruppiert werden können.

Re: Drawing3D - Demo für das kommende Include

Verfasst: 21.09.2012 17:29
von c4s
Klasse! Bin schon gespannt auf die fertige Version. :allright:

Edit:
Ich denke aber, dass den Befehlen einen eigenen Präfix oder deutlichere Namen geben solltest, denn momentan ist die Verwechslungsgefahr mit den PB-internen, "echten" 3D-Befehlen sehr groß...

Re: Drawing3D - Demo für das kommende Include

Verfasst: 21.09.2012 21:30
von STARGÅTE
Jo hab ich schon überlegt, aber die DrawingBefehle sind ja auch nur schlicht und einfach Line, Box, usw. statt DrawLine, DrawBox oder so ^^.
Aber ich kann es gerne zu DrawTriangle3D machen.

Re: Drawing3D - Demo für das kommende Include

Verfasst: 22.09.2012 15:54
von c4s
Oder einfach überall nur "Draw3D"?!
- StartDraw3D(), StopDraw3D()
- Draw3DFieldOfVision(), Draw3DCameraPosition() etc.
- PlotDraw3D(), LineDraw3D() etc.

... oder "3DD_" vorhängen:
- 3DD_Start(), 3DD_Stop()
- 3DD_FieldOfVision(), 3DD_CameraPosition() etc.
- 3DD_Plot(), 3DD_Line() etc.

Ja, ist schwierig da etwas gutes zu finden. :wink:

Mir persönlich würde wohl der Präfix am besten gefallen. Aber es ist natürlich vollkommen deine Entscheidung, schließlich sind Geschmäcker bekanntlich verschieden...

Re: Drawing3D - Demo für das kommende Include

Verfasst: 22.09.2012 16:11
von ts-soft
c4s hat geschrieben:... oder "3DD_" vorhängen:
- 3DD_Start(), 3DD_Stop()
- 3DD_FieldOfVision(), 3DD_CameraPosition() etc.
- 3DD_Plot(), 3DD_Line() etc
Da bekommst Du aber Ärger mit den Syntaxregeln von Procedure- und Variablennamen :mrgreen: