Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

22.04.2011, 07:36

Matrizen, Vektoren und eine 3D Landschaft

Hallo Leute,

ich möchte gerne ein kleines Spielchen programmieren, so als Hobby.

Ich weiß, dass man hierzu ein SDK der Frameworks wie DirectX oder OpenGL zum Ansprechen der Grafikbeschleunigung braucht.

Dennoch möchte ich mir gerne etwas eigenes zurechtfrickeln und die entstehenden Flächen mit Voxeln füllen. Wie das genau funktionieren soll, ist erst einmal egal.

Wichtiger ist hier die Frage:

Wie erstelle ich anhand Vektoren und Matrizen genau die Daten, aus denen man hinterher ein 3D Gebilde darstellen kann, etwa eine Landschaft.

Ich weiß was Vektoren sind und wie man damit rechnet, ich kann auch technisch so wie auf dem Papier eine Matrix darstellen und auch damit rechnen.

Aber wo kommt die Magie ins Spiel, wie kombiniert man beide Themen und macht daraus nützliche Informationen für eine 3D Szene?

Ganz einfach ausgedrückt:

Was wäre das hier
http://zone.ni.com/images/reference/en-X…scenewlight.gif

dargestellt anhand von Matrizen und Vektoren?

Vielen Dank im Voraus,
Jörn Akkermann.

Crush

Alter Hase

Beiträge: 383

Wohnort: Stuttgart

Beruf: Softwareentwickler

  • Private Nachricht senden

2

22.04.2011, 08:13

Ich würde mir erstmal für sowas Simples wie einen Cube erst ein paar Beispielcodes im Internet anschauen (findet man zu Hauf).

So ganz nehm ich Dir nicht ab, daß Du mit Matrizen und Vektoren ordentlich umgehen kannst - zum Rechnen gehört ja mehr als nur ein Gitter mit Zahlen vollzumalen und die Regel fürs Ausmultiplizieren zu beherrschen. Man sollte ja auch verstehen, was man da treibt. Außerdem braucht man diese für Voxelgrafik eigentlich überhaupt nicht. Voxel kann man mit simpelster Ganzzahlarithmetik ausreichend darstellen (sind ja nur einfachste 3dimensionale Punkte) - so in etwa wie ein vereinfachter Bresenham-Algorithmus. Also der Zusammenhang mit 3D-Grafik, Matrizen, Vektoren und Voxeln ist mir nicht ganz klar.

Deine Antwort zum Bild:

Den Quader kannst Du darstellen anhand einer Positionsmatrize (alles auf einmal) oder getrennt in 3D-Translation(Verschiebe-)- und Rotations-Vektoren, 8 3D-Punkten für die Ecken - am Besten in einem Array abgelegt. einer Verbindungstabelle für die Punkte (Indizes oder Zeiger), um die Dreiecke oder auch Rechtecke zeichnen zu können, möglichst noch in oder gegen Uhrzeigersinn definiert um die Normalen berechnen und die abgewendeten Flächen erst gar nicht zeichnen zu müssen, sowie eine Objektfarbe oder auch Textur.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

22.04.2011, 08:45

Also das mit dem "Für Voxel-Grafik braucht man keine Vektoren oder Matrizen" kann ich so nicht ganz stehen lassen, denn ohne diese Dinge kannst Du keine Perspektive der Kamera auf Deine Objekte und auch nicht die Position und Bewegung von Objekten im Raum darstellen. Ob nun Polygone oder Voxel verwendet werden um die Objekte zu rendern ist von der dreidimensionalen Welt ja erst mal unabhängig. Vielleicht habe ich dich da auch nur falsch verstanden, Crush?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

4

22.04.2011, 08:46

Also mit Vektoren kann ich mittlerweile umgehen.... mit Matrizen... naja sagen wir ich rechne damit wie ein Blinder... ich habe keine Ahnung was ich mache aber das Ergebnis ist richtig... genau hier ist das Problem: man muss sich ja vorstellen können was man damit macht.


Mir fehlt hier immer noch der einleuchtende Clou.


Ich warte momentan brennend auf dieses Buch hier http://www.amazon.de/gp/product/35286650…=A3JWKAKR8XB7XF
Ich hoffe das kann mich da etwas klarer machen, dass ich mir da mehr vorstellen kann.


Haste vielleicht nen Tutorial für ne Voxelengine parat? Für ne ganz simple? Sowas hab ich bisher noch gar nicht gefunden.

Um beim Thema Voxel zu bleiben. Wie Voxel prinzipiell funktionieren ist mir anhand des Wikipedia Artikels den du geschickt hast, eindeutig klar geworden.

Um aber jetzt den Viewport bzw. die darzustellenden Voxel für die momentane Perspektive zu ermitteln, fehlt mir hier das Knowhow. Brauch man nicht wiederum Vektoren um den nächsten darzustellenden Voxel herauszubekommen?

Ich habe mir hier was zurechtgeskriptet um mal rumzuprobieren. Hierbei werden Punkte gespeichert und zwar nur die Notewendigen. Um innerhalb dieser Welt aus Punkten eine Kamera zu erschaffen, habe ich die Klasse ViewportBubble erfunden. Hier kommt das Problem: wie finde ich von der Spielerposition zum nächstdargestellten Punkt/Voxel?

Das wurde bereits während des Editierens beantwortet... Raycasting.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Joern« (22.04.2011, 09:07)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

22.04.2011, 08:59

Für voxelbasiertes Rendering verwendet man normalerweise Raycasting:
http://www.flipcode.com/voxtut/
http://www.codermind.com/articles/Voxel-…he-terrain.html

[...] denn ohne diese Dinge kannst Du keine Perspektive der Kamera auf Deine Objekte und auch nicht die Position und Bewegung von Objekten im Raum darstellen.

Naja, man kann schon ohne ;)

foreach

Frischling

Beiträge: 87

Beruf: Student

  • Private Nachricht senden

6

22.04.2011, 10:56

Hi,
Ich habe vor ca. einem Jahr auch mit Voxelgraphiken experimentiert. Ich halte Raycasting für eine Echtzeitanwendung allerdings nicht für performant genug (Die Geschwindigkeit hängt natürlich stark von der Implementierung und der Speicherung der Voxel-Daten ab). Deshalb würde ich es für eine bessere Idee halten die Voxel Daten zunächst mit dem Marching Cubes Algorithmus in Polygondaten umzuwandel und das Visualisieren dann der Graphikkarte überlassen.

Hier noch zwei Beispielbilder die von meinem alten Projekt stammen (Diese Beiden Bilder wurden beide mit Raycasting visualisiert):

(Link)
Die Voxeldaten sind in einem Array gespeichert.


(Link)
Die Voxeldaten sind in einem Octree gespeichert.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »foreach« (22.04.2011, 11:02)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

22.04.2011, 11:03

Ich halte Raycasting für eine Echtzeitanwendung allerdings nicht für performant genug (Die Geschwindigkeit hängt natürlich stark von der Implementierung und der Speicherung der Voxel-Daten ab).

Es gibt sogar ein sehr bekanntes Spiel dass das einst so gemacht hat ;)

foreach

Frischling

Beiträge: 87

Beruf: Student

  • Private Nachricht senden

8

22.04.2011, 11:07

Du hast Recht. Mir hat es wohl, durch jahrelanges Javaprogrammieren, das Gefühl für Performanceprobleme etwas verzogen.

Werbeanzeige