2016-05-21 4 views
-1

Hallo Ich versuche, einen CG-Shader in GLSL-Shader zu konvertieren. Es ist ziemlich ähnlich, aber ich konnte nicht die Korrespondenz fürGLSL Korrespondenz von Punkt (Sina, 1..xxxx) in CG

dot(sina, 1..xxxx); 

Können Sie uns erklären, was diese Linie tut und mir helfen, finden GLSL äquivalent zu schreiben.

+0

Nun, könnten Sie erklären, was es tut? Ist 'Sina' eine Variable oder eine Konstante oder was? Mit welcher Version von GLSL möchten Sie es konvertieren? Was soll "1..xxxx" erreichen? –

+0

@NicolBolas: sieht so aus, als ob Cg das Skalieren von Skalarwerten erlaubt –

Antwort

1

Angenommen, dass sina ist ein 4-Komponenten-Vektor, was das Snippet tut, ist die Summe der sina s Komponenten. Die dot product ist wie folgt definiert:

enter image description here

Der .xxxx Teil des Snippets Sie auf dem Laufenden ist ein swizzle die skalare erweitert, bevor es (1. in Ihrem Fall) zu einem Vier-Komponenten-Vektor, ausgewertet, die zu führt:

dot(sina,1..xxxx) = sina.x * 1 + sina.y * 1 + sina.z * 1 + sina.w * 1 
        = sina.x + sina.y + sina.z + sina.w 

Als GLSL does not allow swizzling Skalarwerte würde die GLSL äquivalent sein:

dot(sina,vec4(1.));