Aktuelle Zeit: 06.01.2025, 21:41

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 27 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Ein Mesh durch Irrlicht erstellen
BeitragVerfasst: 19.09.2007, 06:35 
Offline

Registriert: 13.03.2007, 22:45
Beiträge: 65
Hi,

ich hab sowas noch nie gemacht, brauche es nun aber dringend.
Ich habe eine Datei, in der alle Daten über das Mesh drinne stehn (Ähnlich aufgebaut wie eine .x-Datei).

Bei den Vertex-Daten sieht das pro Vertex so aus:
Zitat:
x-y-z-u-v-nx-ny-nz

Jetzt ist schon mein erstes Problem: Wofür x, y, z, u und v stehen, weiß ich. aberwas soll dieses nx, ny und nz? Was könnte das sein?

Mein eigentliches Problem ist jedoch, dass ich nicht weiß, wie man ein "leeres" Mesh erstellt und dann Vertex für Vertex und triangle für triangle hinzufügt. Also zunächst möchte ich an einem Leeren Mesh alle Vertex-Punkte hinzufügen und dann im nächsten Schritt immer drei von ihnen zu einem triangle verbinden.

Mit welchen Klassen mache ich sowas?


Vielen Dank

D.


Nach oben
 Profil  
 
BeitragVerfasst: 19.09.2007, 12:13 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
x, y und z sind die koordinaten des vertex, u und v sind die textur-koordinaten des vertex (von rechts unten statt links oben?) und nx, ny und nz sind die komponenten des normalenvektors des vertex.

ich denke du suchst nach einer möglichkeit einen MeshBuffer mit vertizes zu füllen (pointer auf die daten mit getVertices())..
http://irrlicht.sourceforge.net/docu/classirr_1_1scene_1_1_c_mesh_buffer.html

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
BeitragVerfasst: 19.09.2007, 12:54 
Offline

Registriert: 13.03.2007, 22:45
Beiträge: 65
frodenius hat geschrieben:
nx, ny und nz sind die komponenten des normalenvektors des vertex.

Hmm... "die komponenten des Normalvektors"... was heißt das jetzt genau? :oops:

Zitat:
ich denke du suchst nach einer möglichkeit einen MeshBuffer mit vertizes zu füllen (pointer auf die daten mit getVertices())..
http://irrlicht.sourceforge.net/docu/classirr_1_1scene_1_1_c_mesh_buffer.html

Welchen Datentyp hat denn der Rückgabewert von getVertices()? virtual void * sagt mir nichts... Kannst du da mal ein kleines Beispiel geben, wie ich das mache? Also z.B. 4 Punkte erstellen und diese dann zu zwei Dreiecken zu verbinden?

Vielen Dank

D.


Nach oben
 Profil  
 
BeitragVerfasst: 19.09.2007, 13:11 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
Donner hat geschrieben:
Hmm... "die komponenten des Normalvektors"... was heißt das jetzt genau? :oops:

hm je im leben vektorrechnung in der schule gehabt?
man darf bei einem vektor eigentlich nicht "koordinaten" schreiben, weil mathematisch gesehen hat ein vektor keine position, die durch koordinaten bestimmbar wäre, er verschiebt lediglich einen punkt in einen anderen.
deswegen: komponenten (x, y, z (...) entsprechend den dimension des vektorraums)
was ein normalenvektor ist weißt du dann wahtscheinlich auch nicht: im drei-dimensionalen kann man eine ebene in verschiedenen weisen darstellen, eine ist die normalform, in der der normalvektor senkrecht auf der ebene steht (also eigentlich: senkrecht zur ebene ist).
(kurzer exkurs:
skalarprodukt... nein wirklich, ich sollte nicht ausschweifen, obwohl, wenn wer will??)
der normalvektor beschreibt also die ebene, in der der vertex liegt (also aich die fläche zu der er gehört -> das polygon)
Donner hat geschrieben:
Welchen Datentyp hat denn der Rückgabewert von getVertices()? virtual void * sagt mir nichts... Kannst du da mal ein kleines Beispiel geben, wie ich das mache? Also z.B. 4 Punkte erstellen und diese dann zu zwei Dreiecken zu verbinden?

virtual heißt nur dass die funktion virtuell ist. (suche :P ) aber da CMeshBuffer eine implementation ist, ist sie zum glück nicht rein virtuell, sonst gäbs einen fehler beim aufrufen..
void* ist ein beliebiger zeiger auf beliebigen speicher.. du musst ihn noch umwandeln in einen zeiger auf vertex-objekte, nach dem vertex-typ den der buffer verwendet (getVertexType).

ein beispiel kann ich dir leider nicht geben :oops: da ich keine ahnung von sowas habe.. habe mich noch nie in meinem leben enger mit roher 3d-programmierung befasst.. (relativiert das meinen post? tja widerspruch macht 42 ;))

ich empfehl dir das erst mal zu machen (mir auch, langsam wirds ja peinlich als moderator in einem forum über eine 3d-engine..)

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
BeitragVerfasst: 19.09.2007, 15:14 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Zu dem Thema ganz nett:
http://www.geocities.com/SiliconValley/2151/math3d.html

Aber ich hab von Vektorrechnung auch keine Ahnung, hatten wir halt noch nicht wirklich in der Schule (Anfang 11., in der 10. kam das mal kurz nebenbei)

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 19.09.2007, 15:25 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
>.<
ich hatte nichtmal einen winzigen einblick in die vectorrechnung inner schule


Nach oben
 Profil  
 
BeitragVerfasst: 19.09.2007, 16:03 
Offline

Registriert: 13.03.2007, 22:45
Beiträge: 65
Kann niemand ein kleines Beispiel geben? o.O^^


Nach oben
 Profil  
 
BeitragVerfasst: 20.09.2007, 18:20 
Offline
Moderator

Registriert: 25.02.2007, 14:35
Beiträge: 323
Wohnort: Münster
Vielleicht hilft dir dieses Tutorial ein wenig weiter:
http://www.irrlicht3d.de/forum2/viewtopic.php?f=21&t=15


Nach oben
 Profil  
 
BeitragVerfasst: 06.10.2007, 22:11 
Offline
Benutzeravatar

Registriert: 24.07.2007, 23:11
Beiträge: 283
wie und was muss ich dann beim normalvektor angeben das es passt

_________________
Be Fluffy!
kemomi.de


Nach oben
 Profil  
 
BeitragVerfasst: 07.10.2007, 08:36 
Offline

Registriert: 23.09.2007, 16:47
Beiträge: 35
Normalen sind für die Beleuchtung gut.
Ein Polygon wird nach dem Winkel zur Sonne schattiert, das sollte eigentlich logisch sein. Dir ist aber bestimmt schon aufgefallen, dass zwischen Polygonen ein weicher Übergang ist (nennt sich gouraud shading, bei harten Übergängen flat shading). Das liegt daran, dass zwischen den Winkeln der Polygone interpoliert wird, dadurch sieht das Modell runder aus.

In Wirklichkeit sind aber nicht die Winkel des Polygons gespeichert, sondern die Normalen der drei Vertices (pl. von Vertex) des Polygons. Normalen sind praktisch "Richtungen", in die ein Vertex zeigt und dementsprechend wird ein Polygon an den drei jeweiligen Ecken beleuchtet. Wenn alle in die gleiche Richtung zeigen, wirkt das Polygon flach, zeigen sie in leicht versch. Richtungen wird das Polygon schattiert und erscheint rund.

Vertices zwischen zwei Polygonen haben eine Normale, die zwischen beiden Polygonen liegt und so einen weichen Übergang schafft.

Schwierige zu erklären ohne Bilder, aber leider habe ich gerade nicht die Möglichkeit dazu.


Nach oben
 Profil  
 
BeitragVerfasst: 07.10.2007, 20:58 
Offline
Benutzeravatar

Registriert: 24.07.2007, 23:11
Beiträge: 283
um an das normaliesierte zeug zu kommen reicht da:
Code:
video::S3DVertex(vector3df(Map[ii].x2,Map[ii].y2,Depth), vector3df(Map[ii].x2,Map[ii].y2,Depth).normalize(),SColor(100,200,200,0),vector2df(0,0));


sowas zb?

_________________
Be Fluffy!
kemomi.de


Nach oben
 Profil  
 
BeitragVerfasst: 07.10.2007, 21:26 
Offline

Registriert: 23.09.2007, 16:47
Beiträge: 35
Du füllst gerade den Normalenvektor mit den gleichen Werten wie den Positionsvektor. das geht natürlich nicht. In einer Woche kann ich dir ne bebilderte Erklärung geben, aber bis dahin wird das hier wohl schon jemand beantwortet haben.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 27 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de