DGL
https://delphigl.com/forum/

Normalenglättung
https://delphigl.com/forum/viewtopic.php?f=20&t=9786
Seite 1 von 1

Autor:  Razoron [ Mi Mär 09, 2011 18:09 ]
Betreff des Beitrags:  Normalenglättung

Hi,
es gibt ein Problem mit der Glättung der Normalen. Ich hab mir jetzt einen kleinen Shader geschrieben:

Der Vertex Shader:
Code:
varying vec4 vert_pos;
varying vec3 vert_nor;

void main() {
   vert_pos = ftransform();
   vert_nor = normalize(gl_NormalMatrix * gl_Normal);
   gl_Position = vert_pos;
}


Der Fragment Shader:
Code:
varying vec3 vert_nor;
varying vec4 vert_pos;

const vec3 light_pos = vec3(1.0, 1.0, 1.0);

void main() {
   float brightness = max(dot(vert_nor, light_pos) / (length(vert_nor) * length(light_pos)), 0.0);
   gl_FragColor = vec4(brightness, brightness, brightness, 1.0);
}


Ich habe eine mit Blender generierte Kugel mit Normalen als OBJ eingelesen. Das ist die Antwort:
Dateianhang:
wieesist.png
wieesist.png [ 10.77 KiB | 7423-mal betrachtet ]

Warum werden die Normalen nicht für jedes Face in dem Fragment Shader interpoliert?

Liebe Grüße,
Raz

Autor:  Coolcat [ Mi Mär 09, 2011 18:15 ]
Betreff des Beitrags:  Re: Normalenglättung

Zitat:
Warum werden die Normalen nicht für jedes Face in dem Fragment Shader interpoliert?

Die Normalen werden interpoliert. Allerdings bringt das nur etwas wenn die Normalen auch unterschiedlich sind. Du scheinst für alle vier Vertices eines Quads jeweils die gleiche Normale zu setzen.

Autor:  Razoron [ Mi Mär 09, 2011 18:18 ]
Betreff des Beitrags:  Re: Normalenglättung

Also werden sie von Blender falsch gesetzt?

Autor:  Coolcat [ Mi Mär 09, 2011 18:25 ]
Betreff des Beitrags:  Re: Normalenglättung

Gut möglich.

Tipp: Falls du zufällig sowieso nur einfache Kugelen rendern möchtest: Nimm doch einfach im Shader die normalisierte Vertexposition als Normale. Idealerweise hat dann natürlich die Kugel bereits den Radius 1 und wird erst später auf die gewünschte Größe skaliert.

Autor:  Razoron [ Mi Mär 09, 2011 18:26 ]
Betreff des Beitrags:  Re: Normalenglättung

Ich sehs gerade. Stimmt. Also muss ich die mir wohl selber generieren.

Autor:  Lord Horazont [ Mi Mär 09, 2011 21:13 ]
Betreff des Beitrags:  Re: Normalenglättung

Hast du mal versucht in Blender das Mesh auszuwählen und dann F9 (Editing) zu drücken, unter Links and Materials gibts nen schönen Button Set Smooth.

greetings

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/