Я совершенно не знаком с OpenGL, и мне трудно разобраться, как работают текстуры и шейдеры привязки к VBOs.openGL texture/shader binding
Я использую текстуры и шейдерные структуры Cinder. Вот часть моего метода рисования:
mShader.bind();
myImage.bind();
glPushMatrix();
glTranslated(scaledX, scaledY, scaledZ);
gl::draw(sphere.getVBO());
glPopMatrix();
glPushMatrix();
glTranslated(0, 0, zshift - 200);
mDisc.draw();
glPopMatrix();
В приведенном выше коде, если я закомментировать вызов mShader.bind(), моя сфера VBO будет отображать текстуру (myImage). Мой шейдер работает отлично для простых (нетекстурированных) фигур, но когда я привязываю шейдер перед рисованием любых фигур с обернутыми текстурами, он блокирует отображение текстур.
Это проблема с шейдером, который я использую, или это что-то еще, что я не понимаю? (... есть еще много, я не понимая)
Благодаря
редактировать:
вот шейдеры я использую:
(осколочная):
uniform sampler2DShadow depthTexture;
varying vec3 N, V, L;
varying vec4 q;
void main(void)
{
vec3 normal = normalize(N);
vec3 R = -normalize(reflect(L, normal));
vec4 ambient = gl_FrontLightProduct[0].ambient;
vec4 diffuse = gl_FrontLightProduct[0].diffuse * max(dot(normal, L), 0.0);
vec4 specular = gl_FrontLightProduct[0].specular * pow(max(dot(R, V), 0.0), gl_FrontMaterial.shininess);
vec3 coord = 0.5 * (q.xyz/q.w + 1.0);
float shadow = shadow2D(depthTexture, coord).r;
gl_FragColor = ((ambient + (0.2 + 0.8 * shadow) * diffuse) + specular * shadow);
}
(верт):
varying vec3 N, V, L;
varying vec4 q;
uniform mat4 shadowTransMatrix;
void main(void)
{
vec4 eyeCoord = gl_ModelViewMatrix * gl_Vertex;
V = normalize(-eyeCoord.xyz);
L = normalize(gl_LightSource[0].position.xyz - eyeCoord.xyz);
N = gl_NormalMatrix * gl_Normal;
q = shadowTransMatrix * eyeCoord;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Показать свой шейдерный код. Большую часть времени вам понадобится другой шейдер для текстурирования. Также этот код смешивает VBOs и шейдеры с устаревшими функциями. –
"* Я использую текстуры и шейдерные структуры Cinder. *« Если вы хотите понять, как работает OpenGL, вам нужно подвергать себя * OpenGL *, а не классам, которые * скрывают * OpenGL. –
Я добавил шейдеры. Я ворую в проекте для класса psyc и очень ограниченное время.Я скоро изучу OpenGL, но на данный момент я просто пытаюсь понять достаточно, чтобы сжечь что-то приличное вместе. – jag