我想實現一個天空盒,但不知何故沒有渲染。 在初始化過程中,我簡單地構建一個立方體的3個位置座標系,從(-1,-1,-1)加載到(1,1,1)。紋理也正在加載,可能會將其添加到立方體貼圖。 通過渲染我只傳遞ModelViewProj但沒有翻譯,縮放或任何應用到它,只有投影。OpenGL ES 2.0立方體貼圖不顯示紋理
有人看到它爲什麼不起作用嗎?我忘記了什麼或明白了什麼錯誤?
初始化VBO:
加載紋理:
glGenTextures(1, &(_TextureID));
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_CUBE_MAP, _TextureID);
for (int face = 0; face < 6; ++face) {
[self getImage:[NSString stringWithFormat:@"%i",face]];
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);
}
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MAG_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);
// glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,(INT)的寬度,(INT)高度,0,GL_RGBA,GL_UNSIGNED_BYTE,的imageData);
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
free(imageData);
繪製星空圖:
glDepthMask(GL_FALSE);
glBindVertexArrayOES(_vertexArray);
glUseProgram(prog);
glEnable(GL_TEXTURE_CUBE_MAP);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_CUBE_MAP, _TextureID);
GLuint projMatrix = glGetUniformLocation(prog, "modelViewProjectionMatrix");
GLuint normalMatrix = glGetUniformLocation(prog, "normalMatrix");
GLuint samplerCube =glGetUniformLocation(prog, "cubeMap");
glUniformMatrix4fv(projMatrix, 1, 0, _modelViewProj.m);
glUniform1i(samplerCube, 0);
glDrawArrays(GL_TRIANGLES, 0, _NumTriangles);
glDepthMask(GL_TRUE);
頂點着色器:
attribute vec4 position;
attribute vec3 texCoord;
attribute vec3 normal;
varying lowp vec3 vTexCoord;
uniform mat4 modelViewMatrix;
uniform mat4 modelViewProjectionMatrix;
uniform mat3 normalMatrix;
void main()
{
vTexCoord = texCoord;
gl_Position = modelViewProjectionMatrix * position;
}
片段着色器:
uniform samplerCube cubeMap;
varying lowp vec3 vTexCoord;
void main()
{
lowp vec4 texCol = textureCube(cubeMap, vTexCoord);
lowp vec4 color = vec4(1.0,0.0,0.0,1.0);
gl_FragColor = vec4(texCol.rgba);
}
這是孔信息
GLfloat skyboxVertices[108] = {
// Positions
-1.0f, 1.0f, -1.0f,
-1.0f, -1.0f, -1.0f,
1.0f, -1.0f, -1.0f,
1.0f, -1.0f, -1.0f,
1.0f, 1.0f, -1.0f,
-1.0f, 1.0f, -1.0f,
-1.0f, -1.0f, 1.0f,
-1.0f, -1.0f, -1.0f,
-1.0f, 1.0f, -1.0f,
-1.0f, 1.0f, -1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, -1.0f, 1.0f,
1.0f, -1.0f, -1.0f,
1.0f, -1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f, -1.0f,
1.0f, -1.0f, -1.0f,
-1.0f, -1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, -1.0f, 1.0f,
-1.0f, -1.0f, 1.0f,
-1.0f, 1.0f, -1.0f,
1.0f, 1.0f, -1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, -1.0f,
-1.0f, -1.0f, -1.0f,
-1.0f, -1.0f, 1.0f,
1.0f, -1.0f, -1.0f,
1.0f, -1.0f, -1.0f,
-1.0f, -1.0f, 1.0f,
1.0f, -1.0f, 1.0f
};
你的紋理的大小是多少? –
1024x1024是每個紋理的大小 – DomiDiDongo
它看起來像你沒有設置紋理座標的頂點屬性。 –