Frage

Ich bin eine Android-Anwendung zu entwickeln.

Ich habe die folgenden Vertex-Shader.

"attribute vec4 vertexPosition; 
attribute vec4 vertexNormal; 
attribute vec2 vertexTexCoord; 

varying vec2 texCoord; 
varying vec4 normal; 

uniform mat4 modelViewProjectionMatrix; 

void main() 
{ 
   gl_Position = modelViewProjectionMatrix * vertexPosition; 
   normal = vertexNormal; 
   texCoord = vertexTexCoord; 
} 
";

Und das ist die Fragment-Shader:

precision mediump float; 

varying vec2 texCoord; 
varying vec4 normal; 

uniform sampler2D texSampler2D;

void main()
{ 
   gl_FragColor = texture2D(texSampler2D, texCoord); 
} 
";

Gibt es ein Problem, wenn ich vertexTexCoord ungebunden? Ich glaube, ich muss einen anderen Vertex- und Fragment-Shader verwenden, wenn mein Modell, keine Textur aufweisen, ist es nicht?

Danke.

War es hilfreich?

Lösung

Ja sollten Sie einen anderen Shader für Modelle ohne Textur haben. Ansonsten denke ich, Sie Implementierung abhängiges Verhalten erfahren.

Bezug zu, dass OpenGL-Dokumentation sagt:

  

Aktive Attribute, die nicht sind   ausdrücklich wird gebunden gebunden durch die   Linker wenn glLinkProgram genannt wird. Die Standorte können zugeordnet werden abgefragt   von glGetAttribLocation aufrufen.

Also, wenn Vertex-Attribute aktiviert sind wird es versuchen, vertexTexCoord von einem der Attribute zu erhalten. Ich bin sicher nicht das, was passiert, wenn nicht mehr als die Anzahl der Attribute für untextured Modell benötigt aktiviert sind und Sie sollten sich nicht auf etwas Derartiges. Verwenden Sie einen anderen Shader.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top