2016-09-27 10 views
1

次の画像を確認してください:なぜこれが起こっている私が把握することはできませんOpenGLの奇妙な赤、緑、青のライン

enter image description here

を、それだけで意味がありません、私は何度もそれをチェックして、同じことを続けています.3つの同じイメージがskyboxの両側にあり、赤、緑、青のストライプが下に落ちています。

私は間違っていますか?

バーテックスシェーダ:

#version 400 
in vec3 position; 

uniform mat4 mvp; 
out vec3 tex; 
void main(void) { 
    gl_Position = mvp * vec4(position, 1.0); 
    tex = position; 
} 

Fragmantシェーダ:

#version 400 
uniform samplerCube defuse; 
in vec3 tex; 

out vec4 out_Color; 
void main(void) { 
    out_Color = texture(defuse, tex); 
} 

キューブマップローダー

GLuint texture; 
glGenTextures(1, &texture); 
glBindTexture(GL_TEXTURE_CUBE_MAP, texture); 

int width, height, numComponents; 
unsigned char* imageData = stbi_load((path.getURL() + "posx.png").c_str(), &width, &height, &numComponents, 4); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData); 
stbi_image_free(imageData); 
imageData = stbi_load((path.getURL() + "posy.png").c_str(), &width, &height, &numComponents, 4); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData); 
stbi_image_free(imageData); 
imageData = stbi_load((path.getURL() + "posz.png").c_str(), &width, &height, &numComponents, 4); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData); 
stbi_image_free(imageData); 
imageData = stbi_load((path.getURL() + "negx.png").c_str(), &width, &height, &numComponents, 4); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData); 
stbi_image_free(imageData); 
imageData = stbi_load((path.getURL() + "negy.png").c_str(), &width, &height, &numComponents, 4); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData); 
stbi_image_free(imageData); 
imageData = stbi_load((path.getURL() + "negz.png").c_str(), &width, &height, &numComponents, 4); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData); 
stbi_image_free(imageData); 

glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_BASE_LEVEL, 0); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAX_LEVEL, 0); 
glBindTexture(GL_TEXTURE_CUBE_MAP, 0); 
return new GLTexture(texture); 
+2

最終的な引数として 'stbi_load' 4を渡します。つまり、イメージが4つのコンポーネント(正しく理解していれば)に変換されますが、イメージはRGB(3コンポーネント)のみであるとOpenGLに伝えます。あなたが使用しているOpenGLのバージョンを教えてもらえればもっと良いでしょうか? (またはあなたが使用を許可されているものまで) – tambre

+0

GL_RGBAに変更すると修正されました!助けをありがとう:) –

+0

私は答えとして投稿しました。 – tambre

答えて

0

あなたは4つのコンポーネントとテクスチャをロードするためにSTBIを指定する - 部品の必要数は最後です引数はstbi_loadです。また、テクスチャがGL_RGBであることをOpenGLに指定します。この問題を解決するには、OpenGLのテクスチャをGL_RGBAとして指定するか、可能であればテクスチャを3つのコンポーネントとしてデコードします。

関連する問題