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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

21

04.12.2011, 15:22

Quellcode

1
HV = normalize((camera_position-pos.xyz+lightDir)/2);

Was für eine Kameraposition steckt da drin? Außerdem willst du wohl normalisierte Vektoren mitteln und nicht die gemittelte Summe normalisieren...

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

22

04.12.2011, 15:25

Zitat

Was für eine Kameraposition steckt da drin?


Die, die aktuell benutzt wird. Aber ich war mir eh nicht sicher ob das richtig ist ^^

Zitat

Außerdem willst du wohl normalisierte Vektoren mitteln und nicht die gemittelte Summe normalisieren...


Ups

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

23

04.12.2011, 15:27

Zitat

Was für eine Kameraposition steckt da drin?


Die, die aktuell benutzt wird. Aber ich war mir eh nicht sicher ob das richtig ist ^^

Und in was für einem Koordinatensystem liegt die Kameraposition? Und in was für einem liegt pos?

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

24

04.12.2011, 15:35

pos in camera_modelview*object_modelview und camera_position in, naja keinem... ich bin mir jetzt aber nicht richtig mit welcher ich multiplizieren müsste. Object, Camera oder Light?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

25

04.12.2011, 15:40

camera_position muss ein Koordinatensystem haben, sonst hätte es keine Bedeutung. Ich vermute mal es handelt sich um Weltkoordinaten?

Allerdings vielleicht ein Hinweis: Im Viewspace befindet sich die Kamera im Ursprung...

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

26

04.12.2011, 15:48

Zitat

camera_position muss ein Koordinatensystem haben, sonst hätte es keine Bedeutung. Ich vermute mal es handelt sich um Weltkoordinaten?


Ja, sollen es sein.

Zitat

Allerdings vielleicht ein Hinweis: Im Viewspace befindet sich die Kamera im Ursprung...


Also Kamera für das Licht ignorieren?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

27

04.12.2011, 15:49

Wenn deine Vertexposition schon im Viewspace ist, dann entsprechen die Koordinaten genau dem Vektor von der Kamera zum Vertex...

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

28

04.12.2011, 16:08

Ich glaube ich hab jetzt oft genug bewiesen das ich kein Mathe kann, aber jetzt mal abgesehen davon wie man den halfway vector berechnet, das versteh ich nicht:


(Link)


Oder hängt das mit dem HV zusammen?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

29

04.12.2011, 16:16

Mit dem HV hats wohl nix zu tun, zeig mal deinen Shader.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

30

04.12.2011, 16:50

Alles:

http://cnp.marvinblum.de/index.php?id=45
http://cnp.marvinblum.de/index.php?id=46

Relevante Teil:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Vertex Shader:

uniform mat4 object_projection;
uniform mat4 object_modelview;
uniform mat3 object_normal_modelview;
uniform mat4 light_modelview;

uniform vec3 camera_position;
uniform Material material0;
uniform Light light0;

in vec3 a_Vertex;
in vec2 a_TexCoord;
in vec3 a_Normal;

out vec2 texCoord;
out vec3 N, L, HV; // Normale, Lichtrichtung, halfway vector
out vec4 ambient, diffuse;
out float attenuationDistance;

void main(void){        
    vec4 pos = object_modelview*vec4(a_Vertex, 1.0);
    N = normalize(object_normal_modelview*a_Normal);
    
    vec3 lightPos = (light_modelview*light0.position).xyz;
    L = normalize(lightPos-pos.xyz);
    attenuationDistance = length(lightPos-pos.xyz);
    //HV = (L-normalize(pos).xyz)/2;

    ambient = material0.ambient*light0.ambient;
    diffuse = material0.diffuse*light0.diffuse;
    
    texCoord = a_TexCoord;
    gl_Position = object_projection*pos;
}


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Fragment Shader:

uniform sampler2D texture0;
uniform Material material0;
uniform light light0;

in vec2 texCoord;
in vec3 N, L, HV;
in vec4 ambient, diffuse;
in float attenuationDistance;

out vec4 outColor;

void main(void){    
    vec4 color = ambient;
    vec3 n = normalize(N);
    float NdotL = max(dot(n, normalize(L)), 0.0);
    
    if(NdotL > 0.0){
        float attenuation = 1.0/(light0.constant_attenuation+ 
                                 light0.linear_attenuation*attenuationDistance+ 
                                 light0.quadratic_attenuation*attenuationDistance*attenuationDistance);

        //float NdotHV = max(dot(n, normalize(HV)), 0.0);       
            float NdotHV = 1;                                                                    
        color += material0.emissive+attenuation*diffuse*NdotL+material0.specular*light0.specular*pow(NdotHV, material0.shininess);
    }
    
    outColor = color*texture(texture0, texCoord.st);
}

Werbeanzeige