ich habe mir einen Körper aus 'Triangles' gebaut. Er ist im Prinzip aus zwei zusammengepappten Pyramiden aufgebaut, d.h. 8 Polygone.
Aber wenn ich ihn jetzt beleuchten will, damit er 3D wirkt (sonst kommt logischerweise nur ein Schatten), dann findet die Lichtquelle keinen Punkt, an dem sie unterschiedliche Facetten bilden kann, so wie z.B. an einer Kugel mit vielen Polygonen.
Weiß jemand, wie ich die Lichter oder andere Effekte manipulieren muss, so dass sie auch mein LowPoly-Objekt gescheit beleuchten?
Grüße,
Wulfi
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Mär 06, 2003 15:27 Beiträge: 281 Wohnort: Bochum
kommt ganz auf den zweck an, aber ich würde die shader ans herz legen. siehe wiki-tuts. dadurch kannste modelle per pixel beleuchten und nicht wie über fixed function pipe nur auf vertexbasis.
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Das OpenGL-Beleuchtungssystem funktioniert per Vertex. Wenn du damit schönere Ergebnisse erzielen möchtest musst du zwangsweise den VertexCount deines Objektes erhöhen. Wenn dein Objekt nur aus 6 Vertices besteht, dann ist die Qualität entsprechend schlecht.
Allerdings wirkt dein Objekt auch so als hättest du falsche Normalen zugewiesen.
Alternativ kannst du dich mit PerPixelLighting beschäftigen. Im Internet gibt einige Beispiele dazu.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Klar, teil jedes Dreieck in 2 Dreiecke auf, aber das wird dir beleuchtungstechnisch nichts nützen, da die Dreiecke dann immer noch die gleichen Normalen haben (ok, evtl. gibts minimale Unterschiede wegen der Distanz zur Lichtquelle). Wirklich etwas ändern würde sich nur, wenn sich auch die Normalen der Dreiecke ändern. Und solange du aber keine großen Unterschiede zwischen deinem jetztigen Model und dem Polygonreicheren hast, kannst du das um einiges leichter und effizienter mit Bumpmaps lösen (s.Wiki)
_________________ Bevor du definierst, was etwas ist, versichere dich seiner Existenz.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Je nachdem wofür dein Objekt gemacht ist sollte da in der Tat das OpenGL Licht ausreichen. Vor allem wenn man bedenkt, dass Shader/PerPixelLight einen doch nicht unerheblichen Schwierigkeitgrad besitzen. Und "einfach reinkopieren" halte ich persönlich immer für äußerst verwerflich. Mann sollte wissen was man tut. Zu mindest meistens.
Wie Magellan aber schon sagte. Ich tippe mal darauf, dass du gar keine Flächennormale gesetzt hast. Du benötigst dazu die Methoe glNormal.
Da die Normalen auch am Vertex angeheftet sind kannst du die Normalen auch so gestalten, dass sie entweder senkrecht auf einer Fläche stehen oder bei jedem Eckpunkt der Fläche unterschiedlich sind. Wie bei der Kugel zum Beispiel. Es würde auch gehen diese auf der Fläche stehen zu lassen, was aber einen wesentlich unschöneren Effekt mit sich bringen würde. Du musst im übrigen auch nicht bei jedem Vertex eine Normale setzen. OpenGL behält diese so lange bei bis sie wieder geändert wird.
PS: Du solltest erst einmal diesen weg verfolgen bevor du versucht große Sprünge zu machen.
Registriert: Do Mär 06, 2003 15:27 Beiträge: 281 Wohnort: Bochum
Bumpmapping würde dann auch unter einen punkt (shader bzw. vertex-/fragment progs) fallen... zu mindest bei der zeitgemässesten variante, Combiner sollte man jetzt AFAIK nich mehr benutzen.
also fällt bei deiner aufzählung alles unter einen punkt...
schau mal erst ob du mit der standard beleuchtung nicht bessere ergebnisse hinbekommst...
Wenns eckig aussehen soll (Also Flatshaded), kannst du auch einfach, so wie LossyEx es angedeutet hat, für jedes Dreieck die Vertices mit ner eigenen Normale ausstatten, die senkrecht auf dem Tris steht.
_________________ [18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay
hi, i'm a signature viruz, plz set me as your signature and help me spread
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Zitat:
Klar, teil jedes Dreieck in 2 Dreiecke auf, aber das wird dir beleuchtungstechnisch nichts nützen, da die Dreiecke dann immer noch die gleichen Normalen haben (ok, evtl. gibts minimale Unterschiede wegen der Distanz zur Lichtquelle). Wirklich etwas ändern würde sich nur, wenn sich auch die Normalen der Dreiecke ändern
Das stimmt so nicht. Die Normalen haben zwar Einfluß auf die Lichtberechnung aber die Position der Vertices hat diesen ebenso. Bei der Kugel sieht man das ja sehr schön. Je mehr Vertices um so schöner und genauer kommen die Glanzpunkte rüber. Solche Glanzpunkte kann mach auch problemlos auf ebenen Flächen erzeugen, wenn man genügend Vertices verwendet. Je größer die Flächen umso größere Veränderungen lassen sich mit nur wenigen neuen Vertices erzeugen.
Per Pixel sieht das Ganze natürlich besser aus. Aber der Aufwand ist auch höher.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Also erstmal danke für die Antworten.
Ich konnte endlich aufatmen, dass ich mir Shading & Co. doch nicht angucken muss, um das Modell gescheit zu beleuchten...
Ich würde auch gern auf die Normalen setzen, aber ich weiß nicht genau, in welche Richtung die Normale jedes Vertices zeigen muss, damit die Kanten ordentlich rauskommen.
Zum Thema Hintergrund & Sinn:
Es ist keine Uni-Aufgabe. Mein Studium liegt bereits hinter mir. Es ist eine reine freizeitliche Aufgabe mit vortasten Schritt für Schritt. Aktuell versuche ich eben, kleinere Objekte selbst zu gestalten und zu beleuchten.
Registriert: Do Mär 06, 2003 15:27 Beiträge: 281 Wohnort: Bochum
"Ich würde auch gern auf die Normalen setzen, aber ich weiß nicht genau, in welche Richtung die Normale jedes Vertices zeigen muss, damit die Kanten ordentlich rauskommen. "
-> über das vektor-produkt der eckpunte eines dreiecks errechnest du die korrekte normale die ja senkrecht zur fläche stehen muss. also einfach zwei der drei vertices eines dreiecks nehmen kreuz-/vektorprodukt errechnen schon haste die normale die du dann per glNormal bei jedem der drei vertices angibst.
Danke für die Info.
Ich nehme also mal an, dass man drei Punkte nimmt, daraus zwei Vektoren macht, die die Fläche der drei Punkte aufspannen, und dann das Kreuzprodukt aus den beiden Vektoren errechnet, was die Normale ergibt (Da das Kreuzprodukt einen Vektor ergibt, der senkrecht zu den zwei gegebenen steht (AFAIK)). Dann muss ich aber die Normale noch "kürzen", also auf Länge '1' normalisieren, gell? Also Vektor/Betrag(Vektor), richtig?
Eine Frage bleibt: Wenn ich zur Berechnung einer Normalen drei Punkte nehme, dann steht die Normale senkrecht auf der Fläche des Dreiecks aus diesen Punkten. Aber da ich in OpenGL Die Normalen eines Punktes (Vertex) angeben muss, weiß ich nicht so ganz, welche Relation der Punkte mit der Normalen zu den anderen dreien hat. Ist er einer davon?
Grad bei dem o.a. Körper ist das nicht so einfach, da die Normale ja eigentlich vom "Mittelpunkt" weg zeigen muss, oder? Woraus aber folgt, dass es für keinen Punkt eine Fläche gibt, die eine Normale errechnet, die dann durch den Mittelpunkt geht.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.