我目前使用glsl來繪製天空盒,但我的程序的最終結果並不是我的期望,天空盒的六面看起來像是所有面垂直翻轉,然後垂直翻轉。如果我在某些圖像編輯器中手動垂直和垂直創建六個圖像(right.bmp,left.bmp,top.bmp等),skybox可以正常工作。爲了快速找到我的程序中的問題,我簡化了我的程序,只繪製了一面,正面。爲什麼我用opengl glsl來實現天空盒,出錯了?
我的程序截圖:
圖像鏈接:http://i1345.photobucket.com/albums/p668/nimaccc/front_zps741fc377.jpg
原始資料:
圖像鏈接:http://i1345.photobucket.com/albums/p668/nimaccc/original_zps3dbccf2e.jpg
下面是相關代碼:
vertics着色器:
attribute vec3 VertexPosition;
varying vec3 ReflectDir;
void main()
{
ReflectDir = VertexPosition;
gl_Position = gl_ModelViewProjectionMatrix * vec4(VertexPosition,1.0);
}
片段着色器:
varying vec3 ReflectDir;
uniform samplerCube CubeMapTex;
void main() {
vec4 cubeMapColor = texture(CubeMapTex,ReflectDir);
gl_FragColor= cubeMapColor;
}
我的OpenGL程序中的某些代碼:
這用於綁定我的立方體貼圖到着色器。
glActiveTexture(GL_TEXTURE5);
GLuint texID;
glGenTextures(1, &texID);
glBindTexture(GL_TEXTURE_CUBE_MAP, texID);
GLuint targets[] = {
GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
};
const char* baseFileName[] = {
"Right",
"Left",
"Top",
"Bottom",
"Front",
"Back"
};
for(int i = 0; i < 6; i++) {
string texName = string(baseFileName[i])+".bmp";
IMAGE img;
img.Load((char*)texName.c_str());
img.ExpandPalette();
glTexImage2D(targets[i], 0, GL_RGBA, img.width, img.height, 0,
img.format, GL_UNSIGNED_BYTE, img.data);
}
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_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);
m_shader->compileandlink();
m_shader->useprogram();
m_shader->setUniform("CubeMapTex", 5);
m_shader->unuseprogram();
而這是我的正面斜角,它是順時針方向的繞圈。
float extend2 = extend*.5f;
m_cube_v = new vertex_t[24];
//front
m_cube_v[0].pos[0] = -extend2;
m_cube_v[0].pos[1] = -extend2;
m_cube_v[0].pos[2] = extend2;
m_cube_v[1].pos[0] = extend2;
m_cube_v[1].pos[1] = -extend2;
m_cube_v[1].pos[2] = extend2;
m_cube_v[2].pos[0] = extend2;
m_cube_v[2].pos[1] = extend2;
m_cube_v[2].pos[2] = extend2;
m_cube_v[3].pos[0] = -extend2;
m_cube_v[3].pos[1] = extend2;
m_cube_v[3].pos[2] = extend2;
出了什麼問題?
這可能是你只需要看看你如何畫你的立方體指數。 – rwols 2013-08-17 11:02:03