JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=a2ac96c60cdee6cf5ba45ffa57a30843Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Normalvektoren für Landschaft aus Highmap

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
FH
Super JLI'ler


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 07.11.2004, 15:55    Titel: Normalvektoren für Landschaft aus Highmap Antworten mit Zitat

Hallo alle zusammen,
ich habe ein Problem bei der Generierung meiner Landschaft. Ich habe eine Landschaft aus einer Highmap erzeugt, um sie aber zu beleuchten, muss ich den Normalvektor angeben. Ich bin aber nicht gerade das Mathe-Genie und kann den Normalvektor deshalb nicht ausrechen. Im Buch steht dazu unter dem Teil "Weitere Verbesserungen" nur:
Zitat:
Beleuchtung

Eine weitere Verbesserung des Erscheinungsbildes der Landschaft können Sie erreichen, indem Sie sie beleuchten. Dazu müssen Sie den Normalvektor für jeden Vertex angeben. Die Normalvektoren können sie mithilfe der angrenzenden Vektoren berechnen. Beachten Sie, dass Sie dazu die Position der acht angrenzenden Vertices benötigen.


Ich kann weder den Text komplett verstehen (was sind die angrenzenden Vektoren Question Question Question ), noch kann ich mir eine mathematische Formel zu Berechnung der Normalvektoren herleiten.

Ich habe nur die Landschaft (also den IndexBuffer und den VertexBuffer, sowie die Highmap im BMP-Format), um die Normalvektoren zu berechnen.
Ich hoffe, mit kann jemand helfen und ich habe im richtigen Forum geschrieben (wenn nicht, sorry Crying or Very sad ).

FH
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 07.11.2004, 16:31    Titel: Antworten mit Zitat

Was für ein grottenschlechtes Buch über GameDev geht nicht auf Normalisierung von Vectoren ein?

Nagut: Normalisieren tust du einen Vector indem Du ihn durch seine Länge teilst. ganz popelig.

Was der Autor mit "Angrenzende Vertices" meint weiß ich auch nicht. Aber zum Thema:

Du erstellst ein Dreieck aus 3 Vertices und daraus kannst du dann einen Normalvector erstellen. Tja und wie kommen wir an Vertices für ein Dreieck? Antwort: Was ist denn im VertexBuffer und IndexBuffer drin?

- Patrick
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 07.11.2004, 16:38    Titel: Antworten mit Zitat

Patrick hat Folgendes geschrieben:
Was für ein grottenschlechtes Buch über GameDev geht nicht auf Normalisierung von Vectoren ein?

Es ist ein Buch für Anfänger, die weder ein DirectDraw Programm noch ein C++ Programm zuvor geschrieben haben, von daher würde mich es interessieren, wie du all dies auf 400 Seiten _verständlich_ darbieten würdest. Und außerdem ging es wie du folgerichtig bemerkt hast um Spieleprogrammierung nicht um Grafikprogrammierung, welche zwar eng beieinander liegen, aber immer noch unterschiedliche Dinge sind. Zudem bitte ich dich mit deinem Äußerungen objektiv zu bleiben, deine Meinung war nicht gefragt und interessiert (hier) auch nicht.

@FH
Ein Normalvektor ist ein Vektor der "rechtwinklig" zu einer Fläche steht, in diesem Falle ist also ein einzelnes Dreieck gemeint. Den Normalvektor berechnest du mit dem Kreuzprodukt zweier Vektoren des Dreieckes.
Das Kreuzprodukt errechnest du so:
Code:

u und v sind die beiden Vektoren
   x = u.y * v.z - u.z * v.y;
   y = u.z * v.x - u.x * v.z;
   z = u.x * v.y - u.y * v.x;

   w = 1.0f;

Danach musst den Normalvektor noch normalisieren, indem du ihn durch sein Länge teilst, ungefähr so:
Code:

float Laenge = sqrt(x*x+y*y+z*z);
x /= Laenge;
y /= Laenge;
z /= Laenge;

Wenn dir das jetzt ein wenig viel vorkommt, würde ich dir raten, erstmal dein bisher erworbenes Wissen zu festigen, bevor du dich an die Normalvektoren wagst. Wink


Zuletzt bearbeitet von Sören am 07.11.2004, 16:47, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 07.11.2004, 16:46    Titel: Antworten mit Zitat

Wie ich das machen würde? Ganzes Kapitel á 120 Seiten über Lineare Algebra und Hintergrundwissen für 3D Mathematik. Okay wäre dann auch ein Batzen aber für Spiele und Grafikprogrammierung sollte man voraussetzen das man die grundlegenden Dinge der dazugehörigen Mathematik (Vectoren rechnung, Matrizenrechnung, Kreuz/Punkt Produkt, Normalisierung usw.) anspricht und behandelt. sonst taugt das doch nichts.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 07.11.2004, 17:52    Titel: Antworten mit Zitat

wenn du das Buch kennen würdest, wüsstest du das es eigentlich nur um 2D geht.
Am Ende des Buches ist halt ein paar Seiten über 3D so als Vorgeschmack. Wer sich damit näher beschäftigen will, braucht ein wieterführendes Buch, z. B: das von Scherfgen, wo ja auch viel Mathe und so drin ist. Und ich würde auch sagen, das jeder der ein 3D Spiel proggen will allein mit dem zweiten JLI Buch nicht weit kommen kann. Gut ist es trotzdem.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 09.11.2004, 16:08    Titel: Danke+Korrektur Antworten mit Zitat

Ich glaube, ich muss mal etwas dazu sagen:
Ich weiß sehrwohl, was ein Normalvektor ist, mir war nur ein Rätsel, wie man ihn berechnet, wenn er in so einer Landschaft drinsteckt. Ich danke für die Antworten.

FH
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.11.2004, 16:17    Titel: Antworten mit Zitat

Genau so wie man ihr "normal" auch berechnet, stück für Stück! Das Terrain besteht aus Vertices, Triangles, Indices, Faces und Polygonen. Da macht man sich eine for-schleife und geht alles durch und normalisiert die vertices, triangles und fertig. Und wenn man das beim Starten des Programms macht muss mans später nicht mehr.

Anderer Lösungsansatz sind Maps zu verwenden in denen die Normaldaten drin stehen.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 09.11.2004, 16:41    Titel: Antworten mit Zitat

Hallo,

wenn du einen D3DXMesh verwendest, kannst du die Funktion D3DXComputeNormals() verwenden. Wenn du das Terrain aus einer Heightmap aufbaust, kannst du D3DXComputeNormalMap() verwenden um die Normalen zu berechnen. Ansonsten geht es auch per Hand. Dabei muss du auf die richtige Gewichtung der Normalen achten.

@Patrick:

Wenn deine Posts ein wenig weniger überheblich wären, könnte es nicht schaden und es gäbe auch nicht immer solche Reaktionen.

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.11.2004, 16:54    Titel: Antworten mit Zitat

Christian Rousselle
Nimm es mir nicht übel, aber ich sage nun mal das was ich denke und habe kein Problem damit das offen zuzugeben, dass ich darin auch ehrlich bin mit dem was ich sage.

Ich bin auch so fair und gebe den Leuten nie die Antwort vor sondern nur eine Stütze damit sie selber drauf kommen, wer lieber die Lösung haben will und "Copy 'n Paste" als GameDev ansieht hat meiner Meinung nach das Hobby oder den Beruf des Programmierers total verfehlt.

Wenn sich jemand darüber aufregt das ich ihm keine Antwort gebe weil er keine 5 cm³ nachdenken will bei dem was ich ihm gepostet habe, bitte nicht mein Problem, aber er sollte sich vor Augen halten, das man von Learning By Doing mehr hat.

Dazu zählt auch das man Selbstständig (böse böse ja ich weiß) mal nach Fehlern sucht bevor man Postet und wenn man nichts Findet, dann google anwerfen oder die Boardsuche und wenn man dann schon Postet dann doch bitte so detailiert das man einem direkt helfen kann ohne Umwege bei dem man sich neue Informationen herholen muss.

Wem das nicht passt? Bitte, aber so ist das Geschäft.

- Patrick, der sagt was er denkt.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 37
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 09.11.2004, 22:19    Titel: DANKE!!! GRÖßTENTEILS KAPIERT! Antworten mit Zitat

Hallo an alle Leser,
ich habe das mit den berechnen jetzt verstanden. Danke. Allerdings habe ich noch zwei vielleicht dumme Fragen. Ich stelle sie trotzdem, auf die Gefahr hin, mich zu blamieren:
@MiracleBoy:
Für das berechnen brauche ich ja die Vektoren. Wie und waraus kann ich die errechnen?
@Christian Rousselle:
Nach dem Aufruf von D3DXComputeNormalMap() habe ich dann die Vektoren in den Farben eines Bildes. Wie kriege ich da die Vektoren raus? Jedes umprogrammieren von D3DCOLOR_ARGB ist bisher kläglich gescheitert.

Antwortet ruhig beide, ich will ja schließlich was lernen.

Was hat "Patrick, der sagt was er denkt" denn so schlimmes geschrieben? Ich danke im immerhin für seine, wie ich finde, kosntruktive Kritik. Ein bisschen Ironie kann doch jeder vertragen, erst recht ich (als TOTALER ANFÄNGER/Mini JLI'ler). Patrick: Wenn ich einen groben Fehler mache, dann sag es mir ruhig. Ich habe noch keine lange C++ Erfahrung (1 1/2 Jahre) und noch weniger Erfahrung mit Foren (29 Tage, JLI ist bisher mein einziges Forum). Das gilt auch für alle anderen. Wenn ich einen groben, allgemeinen Fehler mache, bin ich jedem dankbar, der mich darauf aufmerksam macht. Ich will aber niemanden in seine Antworten betreffend Patrick reinreden (das kann ich auch gar nicht). Wer nun recht hat kann ich nicht sagen, dafür bin ich noch zu kurz dabei.
Apropo Fehler: Ich scheine der einzige hier zu sein, der Titel vergibt. Gibt es einen Grund warum die keiner Angibt, oder macht man das, weil alle das so machen Question

Als letztes:
Reden wir hier eigentlich von zwei verschiedenen Büchern? Ich kenne nämlich zwei, die auf das JLI verweisen.
@Jonathan_Klein:
Nennst du 79 Seiten einen kleinen Ausblick? Gib mir mal die ISBN von dem Scherfgen-Buch, wenn es dafür gut ist. Dann hol ich mir das mal.

Danke für die vielen Beiträge
FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 10.11.2004, 06:25    Titel: Antworten mit Zitat

Das Scherfgen Buch ist ganz nett wenn man schon viel C++ und ein bischen Windows erfahrung hat. Musst mal bei Amazon oder so eingeben "Scherfgen"das Buch heißt "3D Spieleprogrammierung". Inzwischen gibts auch ne Neuauflage. Eigentlich ganz gut für den 3D Einstieg auch viel mit Mahte.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum