2017-11-15 3 views
-1

Ich folge "Interactive Computer Graphics" von Ed Angel, speziell den Code für rotierende Würfel mit Textur. Die Vertex-Shader für diese (wie im Buch) ist wie folgt:Was die Vertex- und Fragment-Shader sein sollten, um einen Würfel mit Textur in der Version 440 zu zeichnen

#version 150 
in vec4 vPosition; 
in vec4 vColor; 
in vec2 vTexCoord; 

out vec4 color; 
out vec2 texCoord; 
uniform vec3 theta; 
void main() 
{ 
........ 
........ 
// code for rotation 
........ 
color = vColor; 
texCoord = vTexCoord; 
gl_Position = rz * ry * rx * vPosition; 
} 

Und das Fragment-Shader-Code ist:

#version 150 
in vec4 color; 
in vec2 texCoord; 
out vec4 fColor; 
uniform sampler2D texture; 
void main() 
{ 
fColor = color * texture2D(texture, texCoord); 
} 

[Der Link für den gesamten Code ist here. Schauen Sie sich einfach den Code für example 8 an.

Ich versuche, dies mit #version 440 core zu implementieren. Wenn ich das mache, bekomme ich nur einen schwarzen Würfel. Die Textur wird nicht angezeigt.

Welche Änderung an dem obigen Code sollte ich vornehmen, um die Textur korrekt anzuzeigen?

+0

Ändern Sie Textur2D in Textur (aber das ist eine Nebensache). Wenn die Shader nicht mit der Version kompatibel sind, erhalten Sie einen Compilerfehler. – BDL

+0

@BDL Ich habe das auch versucht. Aber das Ergebnis ist das Gleiche. – Majis

+0

Versuchen Sie mit 'fColor = vec4 (1.0);' Wenn Sie auf diese Weise einen weißen Würfel erhalten, liegt das Problem wahrscheinlich an der Art, wie Ihre Textur erstellt/hochgeladen/gebunden wird. – bernie

Antwort

0

Diese Zeile in der CPP-Code:

glutInitContextVersion(3, 2); 

ist Ihr Problem. Glsl-Version 440 erfordert einen OpenGL 4.4-Kontext. Ändern Sie ihn auf:

glutInitContextVersion(4, 4); 

und modernisieren Ihre Shader-Code nach:

GLSL Specification

Und es sollte funktionieren.

+0

Ich habe das bereits in meinem Code getan, aber das Ergebnis ist das gleiche. Wenn der Code für das Laden der Textur für die GSL-Version 440 gleich ist, denke ich, dass ich ihn korrekt codiert habe. Mit dem Shader-Code, siehe meine Antwort auf @bernie. – Majis

+0

Welche Dev Tools benutzen Sie (und welche GPU haben Sie)? –

+0

Und in Übereinstimmung mit den anderen Antworten, post Ihre Textur laden, einrichten und Verwendung Code –

Verwandte Themen