Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

n0_0ne

1x Contest-Sieger

  • »n0_0ne« ist der Autor dieses Themas
  • Private Nachricht senden

1

23.06.2009, 21:43

Gouraud shading?

Hi,
Ich soll ein gegebenes Framework (c++, opengl) aus meiner Computergrafik vorlesung von flat shading auf gouraud shading umschreiben. Allerdings steht dazu so gut wie nix im skript, und der prof ist noch nicht an der stelle, so dass ich mal nachfragen konnte, würde die aufgabe aber trotzdem schon fertigmachen...
Also soweit ich das verstanden habe, wird bei den einzelnen vertices noch ihr normalenvektor gespeichert, der vorher beim erstellen von einem objekt, zu dem es gehört berechnet wurde aus den normalen der angrenzenden flächen. Intern sieht das ganze so aus, dass pro object eine eckenliste gespeichert wird, und eine liste aus faces, die je aus 3 vertices bestehen. die normalen der einzelnen vertices kann ich denke ich berechnen, aber in der aufgabenstellung steht, dass man einige vertices (von "scharfen" kanten) mehrfach3 speichern muss, damit scharfe kanten erhalten bleiben, und nur "virtuelle" kanten glatter erscheinen (also z.B. die runde fläche eines zylinders).
Am beispiel des Zylinders müsste ich dann wohl alle vertices der kreisflächen mehrfach speichern... aber aus welchem grund, und wie sollen die sich unterscheiden? wahrscheinlich doch in dem normalenvektor?
Kann mir das bitte jemand erklären? google hat mir nicht wirklich helfen können.. was heißt denn beispielsweise mehrfach... also wie oft in abhängigkeit von was?

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

2

23.06.2009, 21:46

glShadeModel(GL_SMOOTH);
mehrfach speichern, weil ja interpoliert wird. du brauchst zwei unterschiedliche polygone für scharfe kanten, also auch doppelte vertices
"Don't trust your eyes: They are a hell of a lot smarter than you are"

n0_0ne

1x Contest-Sieger

  • »n0_0ne« ist der Autor dieses Themas
  • Private Nachricht senden

3

24.06.2009, 09:24

Also meine virtuellen kanten haben wie die scharfen kanten auch zwei unterschiedliche polygone.. und die verwenden die gleichen vertices, ich verwende sie also mehrfach... möglicherweise versteh ich auch irgendwas falsch...

4

24.06.2009, 10:30

Zitat von »"n0_0ne"«

Also meine virtuellen kanten haben wie die scharfen kanten auch zwei unterschiedliche polygone.. und die verwenden die gleichen vertices, ich verwende sie also mehrfach... möglicherweise versteh ich auch irgendwas falsch...

Du brauchst pro Fläche individuelle Normalvektoren, benutzt du die selben Vertices für alle Flächen, kann das gar nicht gehen, da du nur einmal Normalvektoren hast.
Lieber dumm fragen, als dumm bleiben!

n0_0ne

1x Contest-Sieger

  • »n0_0ne« ist der Autor dieses Themas
  • Private Nachricht senden

5

24.06.2009, 16:02

Also ich benutze natürlich nicht exakt die gleichen vertices, immer andere (aber von angrenzenden flächen werden dann auch mal das gleiche vertice genutzt), so entstehen dann auch richtige objekte...
Ich bin das ganze nochmal im kopf durchgegangen... also am beispiel vom Zylinder wäre der übergang einer kreisfläche (oben/unten) zu der "runden" fläche des zylinders wohl eine scharfe kante... und die übergänge der einzelnen seitenteile wohl virtuelle...
Das bedeutet die äußeren vertices der kreisflächen brauch ich doppelt, und dann berechne ich für das eine vertice die normale und betrachte dabei nur die normalen der seitenflächen und für das andere nur die der kreisflächen? und dementsprechend baue ich dann auch die einzelnen faces zusammen, also für die kreisfläche oben und die seitenflächen verwende ich dann jeweils das passende vertice...
Falls ihr versteht was ich schreibe, wäre das so dann richtig?

Werbeanzeige