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

Aktuelle Zeit: Fr Jul 18, 2025 14:24

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 28 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Low-Poly Beleuchtung?
BeitragVerfasst: Di Jan 17, 2006 15:13 
Offline
DGL Member

Registriert: Di Jan 17, 2006 09:22
Beiträge: 15
Hallo,

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 15:21 
Offline
DGL Member
Benutzeravatar

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.

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 15:23 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 15:36 
Offline
DGL Member

Registriert: Di Jan 17, 2006 09:22
Beiträge: 15
Danke für eure Antworten!
Ich werd mich mal bzgl. PerPixelLighting und Shader informieren.

Gibt es Möglichkeiten, ein Triangle-Objekt (bzw. mit Hilfe von drei Punkten) Polygonreicher zu gestalten?

Grüße,
Wulfi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 15:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 16, 2003 15:20
Beiträge: 198
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 15:49 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 15:50 
Offline
DGL Member

Registriert: Di Jan 17, 2006 09:22
Beiträge: 15
Oh danke,
dann habe ich jetzt bereits 3 Tipps:
- PerPixelLighting
- Shader (Ich denke mal, das fällt zusammen mit Punkt 1)
- BumpMaps

Werd mich mal kümmern, danke =)
Bei weiteren Ideen oder Tipps immer her damit! :D

Grüße,
Wulfi


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 16:11 
Offline
DGL Member
Benutzeravatar

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...

_________________
www.extrawurst.org


Zuletzt geändert von Extrawurst am Di Jan 17, 2006 16:12, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 16:12 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Zitat:
- BumpMaps

fällt zusammen mit Punkt 2 was
Zitat:
fällt zusammen mit Punkt 1

:wink:

Wie soll es denn aussehen? Rund oder eckig?

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 :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 17:21 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 17, 2006 17:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Stellt sich sowieso erst mal die Frage was du damit überhaupt anstellen möchtest und was es später darstellen soll?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 18, 2006 01:35 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Sieht mir nach nem Klassischen "Computergrafik1" Projekt aus, was man bei uns an der Uni abgeben muss. In CG2 kommen dann Shader rein.

Nochwas: FlatShading hat in OpenGL nix mit Normalen zu tun. Siehe Wiki: glShadeModel.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 18, 2006 07:12 
Offline
DGL Member

Registriert: Di Jan 17, 2006 09:22
Beiträge: 15
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.

Grüße


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 18, 2006 08:15 
Offline
DGL Member
Benutzeravatar

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.

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 18, 2006 08:28 
Offline
DGL Member

Registriert: Di Jan 17, 2006 09:22
Beiträge: 15
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. :?:


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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
[ Time : 0.009s | 16 Queries | GZIP : On ]