मैं एक साधारण घन के अपने वर्तमान दृश्य में प्रकाश जोड़ने की कोशिश कर रहा हूं। vertex.glslओपनजीएल शेडर त्रुटि 1282
#version 120
attribute vec4 coord3d;
attribute vec3 normal3d;
// output values that will be interpretated per-fragment
varying vec3 fN;
varying vec3 fE;
varying vec3 fL;
uniform vec4 lightPosition;
uniform mat4 mTransform;
void main()
{
fN = normal3d;
fE = coord3d.xyz;
fL = lightPosition.xyz;
if(lightPosition.w != 0.0) {
fL = lightPosition.xyz - coord3d.xyz;
}
gl_Position = mTransform*coord3d;
}
fragment.glsl
// per-fragment interpolated values from the vertex shader
varying vec3 fN;
varying vec3 fL;
varying vec3 fE;
uniform vec4 ambientProduct, diffuseProduct, specularProduct;
uniform mat4 mTransform;
uniform vec4 lightPosition;
uniform float shininess;
void main()
{
// Normalize the input lighting vectors
vec3 N = normalize(fN);
vec3 E = normalize(fE);
vec3 L = normalize(fL);
vec3 H = normalize(L + E);
vec4 ambient = ambientProduct;
float Kd = max(dot(L, N), 0.0);
vec4 diffuse = Kd*diffuseProduct;
float Ks = pow(max(dot(N, H), 0.0), shininess);
vec4 specular = Ks*specularProduct;
// discard the specular highlight if the light's behind the vertex
if(dot(L, N) < 0.0) {
specular = vec4(0.0, 0.0, 0.0, 1.0);
}
gl_FragColor = ambient + diffuse + specular;
gl_FragColor.a = 1.0;
}
:
GLuint ambientHandle = glGetUniformLocation(program->getHandle(), "ambientProduct");
glUniform4fv(ambientHandle, 1, ambientProduct);
GLuint diffuseHandle = glGetUniformLocation(program->getHandle(), "diffuseProduct");
glUniform4fv(diffuseHandle, 1, diffuseProduct);
GLuint specularHandle = glGetUniformLocation(program->getHandle(), "specularProduct");
glUniform4fv(specularHandle, 1, specularProduct);
GLuint lightPosHandle = glGetUniformLocation(program->getHandle(), "lightPosition");
glUniform4fv(lightPosHandle, 1, light.position);
GLuint shinyHandle = glGetUniformLocation(program->getHandle(), "shininess");
glUniform1f(shinyHandle, materialShininess);
यहाँ मेरी वर्दी स्थापित करने के बाद मैं कोड के इस टुकड़े के लिए glGetError() से एक 1282 त्रुटि मिलती है मेरी shaders हैं
उत्पाद और स्थिति प्रत्येक तीन जीएलएफएलओट्स की संरचना है और चमक एक फ्लोट है। मैंने हैंडल के सभी मूल्यों और मूल्यों की जांच की है जो वे गुजर रहे हैं और वे सभी मान्य लगते हैं। विचार?
--EDIT: मैंने इसे glUniform4fv कॉल में संकुचित कर दिया है। यह प्रत्येक के बाद होता है। इसके अलावा मैंने दो बार जांच की है कि प्रोग्राम-> getHandle() किसी चीज़ को इंगित कर रहा है जो वैध दिखता है।
मैं जाँच की है प्रोग्राम> getHandle एक वैध कार्यक्रम है यहाँ सब हैंडल मान हैं: कार्यक्रम संभाल 3 ambientHandle 0 diffuseHandle 1 specularHandle 5 lightPosHandle 2 shinyHandle 4
तो वे सब अच्छा लगना। परीक्षण के लिए मैं परिवेश उत्पाद के लिए नीचे की रेखाओं पर टिप्पणी कर रहा हूं। स्पष्टता के लिए मैं स्पष्ट रूप से इस लाइन के बजाय
glUniform4f(ambientHandle, ambientProd.x, ambientProd.y, ambientProd.z, ambientProd.w);
ये समय है कि रेखा के निष्पादित होने पर ambientProd के लिए मूल्य हैं उपयोग कर रहा हूँ। x = 0.200000003, y = 0.0, z = 0.200000003, w = 1.0
इस प्रोजेक्ट पर एक सहयोगी ने ग्लूसेप्रोग्राम के लिए कॉल को स्थानांतरित कर दिया। लोगों को मदद के लिए धन्यवाद।
आपके टुकड़े शेडर के लिए '# संस्करण 'निर्देश कहां है? – genpfault
गलती से – user2227713