Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 08, 2025 18:19

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Light
BeitragVerfasst: Di Aug 22, 2006 16:26 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Guten Tag,
ich bin grad dabei ne kleine Engine zu schreiben und bin am verzweifeln :D
Also es geht um die Map, die beleuchtet werden soll.

Meine vorgehensweise war - die betonung liegt dierbei auf war- folgendermaßen.
Der Boden wird mit runden Flächen aus der Lektion "Abseites Eckiger Welten" zusammengesetzt mit texturen überzogen
mir glEnable(GL_NORMALIZE) ; die Normalen generiert und das licht (hier die Sonne) einfach angeworfen.
Das Licht ist zwar an nur die Fläche reflektiert alles gleichermaßen. Also zum Licht und den normalen hab ich ein paar fragen.

Zunächst legen wir eben die Position des lichtes mal fest

Code:
  1.  
  2. const position : rray[0..3] of Single = (0,10,10,0;
  3. glLightfv(GL_LIGHT0,GL_POSITION, @position[0]);
  4.  


hier ist erstmal dier frage macht diese Position als Sonne überhaupt Sinn ?
1. Letzte wert ist null . Was beudeutet dieser Wert ? ..
nun gutt. Eine Abnahme des Licht mit der Entfernung findet nicht statt, da die Sonne SEHR stark ist ^^.

weiter geht es mim umgebungs Licht

Code:
  1.  
  2. const light_ambient : array[0..3] of Single = (0.8,0.8,0.8,1);
  3. glLightfv(GL_LIGHT0,GL_AMBIENT,@light_ambient[0] ;
  4.  

2.was bedeutet hier der letzte wert ??

3.so noch eine frage. Das ambiente licht hat keine Richtung. Das hieße doch, selbst wenn wir normalen hätten, würde kein Unterschied bei der Reflektion sein ?

deswegen setzten wir jetzt das difusse licht

Code:
  1.  
  2. const light_diffuse : array[0..3] of Single = (0.8,0.8,0.8,1);
  3. glLightfv(GL_LIGHT0,GL_DIFFUSE,@light_diffuse[0] ;
  4.  


jetzt haben wir unsere Sonne. Bravo \":D\"
Ist bis hierhin alles in Ordnung ? Oder macht etwas keinen Sinn ?

4.Jetzt kommt unsere Landschaft, die aus dreiecken beseht. Die berechnung der normalen erfolgt, so wir ich das verstanden habe, indem ich die 3 Punkte des dreiecks nehme und die multiplizieren. Also wie das funzt ka. hat da jemand ein beispiel, denn ich habe das im Tut nicht so ganz verstanden. Außerdem kann man diese normalen noch glätten oder so damit es runder aussieht ? .
Außerdem , wie berechne ich normalen für andere Flächen, z.b Runde Flächen (Abseits Eckiger Welten). oder Beispielsweise einer Viereckigen Fläche.

Oder aber mit 3ds Objekten. Sind da schon alle normalen dabei ?

Sorry sind viele fragen ich weiß \":)\"

Gruß Simon
[/b][/pascal]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 22, 2006 17:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
zu Frage 2 und 3 kann ich dir die Antwort geben:
Die Farbwerte für den ambienten und diffusen Lichtanteil sind RGBA Werte.
Der erste Wert steht also für den roten Lichtanteil, der zweite für den Grünen, der dritte für den blauen und der vierte ist der Alphawert für die Farbe, also die Intensität.

Bei den restlichen Fragen bin ich im Moment auch überfragt...

cya,
Deathball


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 22, 2006 20:24 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Deathball... Ich bin enttäuscht. ;)

Der letzte Wert bei der Position ist 0 falls dein Licht direktional ist. D.h. Das Licht kommt aus einer Richtung, und die Lichtquelle Befindet sich unendlich weit weg. Dadurch sind die Lichtstrahlen alles Parallel zueinander. Das wird vorallem bei Sonnenlicht genutzt. ;)

Mehr dazu in der Funktionsbeschreibung im Wiki: glLight (Da sollte man bei sowas immer zuerst gucken)

Zu Normalen steht auch was im Wiki: Normale

Glätten tut man diese indem man die Normalen in den Eckpunkten einer jeder Fläche berechnet. Da ein Eckpunkt an mehreren Flächen Teil hat, kann man einen Mittelwert für die Normale bestimmen. Diese wirkt dann abgerundet.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 22, 2006 21:04 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
OK. danke :)
Aber was ist mit 3ds modellen. Sind da die normalen auch schon brerechnet ?

Gut . Wie man jetzt bei dreiecken die normale berechnet is ja klar.
Wir funktioniert das aber beim runden Flächen (Abseits Eckiger Welten).
Oder ist es besser seine ganze map nicht mit dieser Technik von runden Flächen zu zeichnen, sondern alles aus dreiecken und diese mit den normalen so zu manipulieren, dass sie rund wirken ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 23, 2006 10:56 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Gut. Das mit den 3ds Modellen schein ein Problem von mehreren zu sein.

Egal. dazu les ich mir nochmal die fertigen Biträge durch.
Wie sieht es aber aus mit normalen bei dreiecken.
Ich glaube es ist am besten seine Welt aus vielen dreiecken zu zeichnen und diese so zu beleuchten dass e s rund erscheint ? d.h. für jedes einzelne vertex die normale berechnen? und hier schon meine erste Frage:
1. Ist das so korrekt? Oder werden outdoor welten eher nicht aus dreiecken gerendert ?

Gut. Weiter .
Um eine normale zu berechnen brauche ich immer drei Punkte.
Nehmen wir an wir haben zwei dreiecke, die aneinander liegen und ein viereck bilden.
Es gibt 4 Vertexe, a,b,c,d, wobei b und c die gemeinsamen vertexe sind.
um Normale der Fläche 1 zu berechnen nehme ich a,b,c. Um Normale der Fläche 2 zu berechnen b,c,d.
Jetzt hab ich zwei normalen und die Beleuchtung sieht sehr Eckig aus.
Wie würde ich jetzt bei diesen beiden Flächen ür jedes Vertex die Fläche berechnen.
Ich hab da was von Mittelwert gelesen aber nicht verstanden


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 23, 2006 11:51 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Kommt ganz auf die Landschaft drauf an.
Willst du eine standard Umgebung oder willst du Hölen, Kliffe, oder dinge die Künstlich erschaffen wurden.
Heightmaps finden in standard Terrain ihren Platz aber für eine ordentliche Umgebung sollten zusätzlich noch richtige Vertice Koordinaten her halten.
Ein extrem wichtiges Thema ist LOD hierzu.
Eine LOD,Heightmap,Offsetmapping,Bumptmapping umgebung kann so heftig aussehen, dass man denkt, es wäre fast echt.
LOD reduziert die Polyanzahl über die entfernung hinweg.
Heightmap liefert die Höhendaten aus den das Terrain errechnet wird.
Offset-Bumpmapping kann mit LOD kombiniert werden und die fehlenden Polygone sehr existent darstellen.

Die Berechnung würde mit in den LOD part fallen und müsste zur Laufzeit berechnet werden.
Du ermittelst du die Normal von deinem aktuellen Vertice und jedem anliegenden Vertice. http://wiki.delphigl.com/index.php/Normalen
Die Normals sollten normalisiert sein. Die ermittelten Normals werden aufaddiert und durch die Anzahl der Normalen dividiert.
Die Neue Normal ist nun eine smooth Normal und sollte temporär gespeichert werden, bis alle Normals errechnet sind.
Erst dann kopiert man die smooth Normals über die aktuellen Normals, da sonnst bei der Berechnung Fehler auftreten.
In der Regel braucht man 4 normals pro Vertice und das wird ein bischen rechenaufwendig zur laufzeit.
Wenn es ein bischen schneller sein soll, dann kannst du auch einfach die Normal jedes Polygons errechnen und diese zusammen rechnen.
So geht die ganze angelegenheit 4mal schneller, ist aber nicht so perfekt im resultat.

Ich selber halte nicht mehr so viel von diesen Techniken und setzte da lieber auf ähnliche Verfahren wie bei Indoor.
Statisches Mesh ins VBO und über Octree, Occlussion culling und Possible Visible Tree die Leistung holen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 23, 2006 12:52 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Gut, ich habe die ganze Zeit gedacht, ich könnte aus runden Flächen aus dem Kapitel "Abseits Eckiger Welten" ein Landschaft erzeugen ?!
Falsch gedacht oder ?

Nun gut, ich werde mich dann mal mit LOD, Heightmap und Bumpmapping auseinandersetzen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 23, 2006 14:00 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Beschäftige dich lieber erstmal nur mit heightmaps und LOD, Bumpmapping ist eher erweitertes wissen.
http://wiki.delphigl.com/index.php/Tutorial
Bereich Terrain und Landschaft
-alle tuts durchgehen
Bereich Rendertechniken
-beide tuts durchgehen

Wenn das alles läuft, dann kannst du die einzelnen module verbinden.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 23, 2006 14:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Im 3DS-Format werden keine Normalen gespeichert, sondern nur sog. Smoothing-Groups, aus denen dann die jeweilige 3DS-Importbibliothek recht aufwendig die Normalen errechnen muss. Der Loader von Noeska macht das z.B. nicht (liegt u.a. wohl auch daran dass die Smoothing-Groups schlecht dokumentiert und kompliziert umzusetzen sind, hab da auch mal was probiert) und berechnet die Normalen "blind", weshalb 3DS-Modelle dadurch oft falsch beleuchtet aussehen. Entweder muss man damit leben oder auf ein anderes, neueres Format umsteigen (3DS stammt noch aus DOS-Zeiten, weit vor der 3D-Beschleunigung oder gar 3D-Spielen). Ich persönlich bin auf DirectX-3D-Meshes (.x) umgestiegen und hab mir dafür nen Loader geschrieben. Da man die auch nach ASCII exportieren kann ists kein Problem nen Loader zu schreiben, und dieses Format speichert auch direkt die Normalen mit.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 23, 2006 18:43 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Nun gut. Hab mir jetzt Das Tut Heightmap und Tut HeightMap2 angeschaut.
Am anfang des Tuts Heightmap2, ist ein Bild indem sich Kenntisse aus Tut Heighmap und Tut Heightmap2 "vereinen" und eine schöne Heighmap ergeben.
Dreiecke bilden verschiedene Höhen je nachdem wie weiß die Heightmap ist. Je nachdem wie hoch das Dreieck ist, werden verschiedene Texturen genutzt. Soweit alles paletti.

Wie werden die zwei Tuts denn genau verbunden?

Im ersten Tut werden erstmal die Triangles geszeichnet anhand der Heightmap. Normalen werden berechnet, Licht wird angeschaltet usw.


Im zweiten Tut wird ein Bittmap erstellt. Jedes einzelne Pixel de Bitmap wird Prozentual mit verschiedenen HöhenImages belegt (also der Farbwert). Ich bekomme am schluss ein BILD. nur ein Bitmap eben ohne jegliches OpenGL sozusagen.
(Normalen wurden jetzt noch nicht berechnet. Auch kein licht und schatten, ich denke das ist auch nicht nötig wenn man diese Bitmap nur als Textur nutzen will. Ich eläutere gleich wie ich das mit der Textur meine)

wie werden nun diese zwei Komponenten nun zsammengesetz?
wird einfach das entstandene Bitmap über die ganzen Triangles gelegt ?

Reicht das ?

Achja und noch ne kleine Frage am rande. Ich mach mri jetzt schon sorgen wegen der performance :D
Ich will auch später die Sich begrenzen, dass nicht alles gerendert wird. Aber dazu gibts bestimmt was in den Rendertechniken. Aber mal angenommen wir haben 140000 Treiecke, die alle 60 mal pro sekunde gezeichnet werden. Dazu wird bei jedem zeichnen die Normale,nicht nur für jedes Dreieck, sonder für jeden Vertex berechnet.
SCHAFFT DER DAS ? ..

Hoffe ihr habt meine frage verstanden ^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 00:31 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Du berechnest die Normale nur einmal und speicherst sie dann ;)
Aber im dritten Tutorial wird noch erklärt, wie man Dreiecke spart indem man ein LOD-System einbaut.

Edit1:
Zu der Frage wegen Terrain2:
Ja, du erhälst "einfach" eine Textur, die du auf die Heightmap legst. "Mehr" nicht ;)

Edit2:
Übrigens kann der Originaltext weg, weil du ja kein Licht haben solltest, da die Schatten schon in der Textur für die Heightmap eingearbeitet sind, somit brauchst du die Normalen auch nicht mehr, da sie schon bei der Erstellung der Textur eingeflossen sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 10:19 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Wow,
das heißt also ich brauch garnichmehr ide Normalen für mein Terrain zu Berechnen.
Praktisch nur noch für Objekte , die später reinkommen. Häuser, ect. ?!

Das Spart viel Performance oder ?

Jop. Zu dem 3 Tutorial komm ich noch ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 11:22 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Achso. Noch eine frage zu drei bildern.
Bild 1:
Bild
sehr große dreiecke, dadurch Grobe Langschaft
Wenn man jetzt darüber diese Textur aus Heightmap2 legt, soll es so aussehen ?
Bild

ich denke hier sind die Dreiecke viel kleiner und viel mehr oder? ist das nötig oder reichen da die groben dreiecke ?
Weil hier sind nur 14 fps. Das ist zu wenig ^^.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 11:33 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
die demo ist nur so langsam, weil hier knallhart mit aller gewalt alles per hand auf der cpu gerechnet wird massenhaft divisionen auftauchen und nirgends, aber wirklich nirgends optimiert wurde sondern nur das ziel war, die landschaft möglichst billig anzuzeigen - von der FPS lasse man sich bei dem Bild nicht beeindrucken ;-) Zur Auflösung der landschaft auf dem Bild kann ich im Nachhinein leider nichts mehr sagen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 24, 2006 14:23 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
Also für mich ist die Landschaft folgendermaßen aufgebaut.

1). Texture wird berechnet mit allen schatten und lichteinfällen und als Textur eben gespeichert.
2). Dann werden 104000 Dreiecke gezeichnet und die Dextur drübergelegt. Gibs doch nicht viel zu rechnen ?!

also ich mein divisionen. hm. Wo sollen da die divisionen sein ? und wie kann ich die verhindern. also optimieren, wie du sagtest ?
Wäre eine Optimieren (mal abgesehen von dem Kapitel Rendertechnik und Terrain Teil 3) z.b. Cullface und displaylisten, also glgenlist und sowas eben ?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]