2017-05-27 1 views
0

Ich studiere OpenGL mit GLUT und GLEW-Bibliothek. Aber ich habe eine Frage zum Setzen von einheitlichen Werten in den Fragment-Shader des Programms.Setzen von einheitlichen Werten in den Fragment-Shader (OpenGL)

Hier ist ein Teil des Fragment-Shader-Codes.

#version 110 
uniform vec4 cameraPosition; 
uniform vec4 lightPosition; 

varying vec4 fragColor; 
varying vec4 fragNormal; 
varying vec4 fragPosition; 

void main() { 
    vec4 L = lightPosition - fragPosition; 
    vec4 V = cameraPosition - fragPosition; 

Ich möchte 'cameraPosition' und 'lightPosition' einheitliche Variablen setzen. Auch im Hauptprogramm habe ich etwas Code, um diese Variablen ID zu erhalten und einige Werte in die Variablen wie unten zu übergeben.

GLuint cameraPositionID = glGetUniformLocation(programID, "cameraPosition"); 
GLuint lightPositionID = glGetUniformLocation(programID, "lightPosition"); 
GLfloat camPos[4] = { 1, 1, -3, 1 }; 
GLfloat lightPos[4] = { 1, 0, 0, 1 }; 
glUniform4fv(cameraPositionID, 4, &cameraPos[0]); 
glUniform4fv(lightPositionID, 4, &lightPos[0]); 

So versuche ich campos in camera zu passieren, und LightPos in lightPosition. ist es richtig oder falsch? Wenn Sie falsch denken, haben Sie eine Ahnung davon?

Antwort

2

Der count Parameter von glUniform4fv gibt an, wie viele Elemente eines einheitlichen Arrays Sie festlegen werden - in diesem Fall wie viele vec4 s. Sie haben kein Array, also muss count eins sein. Gemäß der Spezifikation sollte Ihr Befehl einen GL_INVALID_OPERATION Fehler ergeben und keine einheitlichen Werte festlegen. (Abgesehen davon würde die Verwendung von Count 4 auch 16 Floats aus dem Speicher lesen, während Ihr Array nur 4 Floats groß ist).

Es ist auch unklar, ob Sie eine glUspeProgram(programID) getan haben, bevor Sie versuchen, diese Uniformen zu setzen. Da die Uniformen pro Programmstatus sind, gelten die Befehle nur für das aktuell gebundene Programm.

+0

Okay, es ist jetzt klar, nachdem ich 1 statt 4 in die Zählung gegeben habe. Vielen Dank :): D: D – xpathz

Verwandte Themen