2011-03-25 80 views
7

你能给我提示一下OpenGL ES 2.0中的任何好的SkyBox示例吗?我发现只有OpenGL,并不适合我。 我做这种方式: 初始化:如何创建OpenGL ES 2.0 SkyBox?

glUseProgram(m_programSkyBox.Program); 
glGenBuffers(1, &skyBoxVertexBuffer); 
glBindBuffer(GL_ARRAY_BUFFER, skyBoxVertexBuffer); 


float vertices[24] = { 
    -1.0, -1.0, 1.0, 
    1.0, -1.0, 1.0, 
    -1.0, 1.0, 1.0, 
    1.0, 1.0, 1.0, 
    -1.0, -1.0, -1.0, 
    1.0, -1.0, -1.0, 
    -1.0, 1.0, -1.0, 
    1.0, 1.0, -1.0, 
}; 

glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); 

glGenBuffers(1, &skyBoxIndexBuffer); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, skyBoxIndexBuffer); 


GLubyte indices[14] = {0, 1, 2, 3, 7, 1, 5, 4, 7, 6, 2, 4, 0, 1}; 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); 

绘制天空盒:

glClearColor(0.5f, 0.5f, 0.5f, 1); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glUseProgram(m_programSkyBox.Program); 

glDisable(GL_DEPTH_TEST); // skybox should be drawn behind anything else 
glBindTexture(GL_TEXTURE_CUBE_MAP, m_textures.Cubemap); 


glBindBuffer(GL_ARRAY_BUFFER, skyBoxVertexBuffer); 
glVertexAttribPointer(m_programSkyBox.Attributes.Position, 3, GL_FLOAT, GL_FALSE, 0, (void*)0); 
glEnableVertexAttribArray(m_programSkyBox.Attributes.Position); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, skyBoxIndexBuffer); 
glDrawElements(GL_TRIANGLE_STRIP, 14, GL_UNSIGNED_BYTE, 0); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 
glEnable(GL_DEPTH_TEST); 

纹理加载工作。着色器正确编译,看起来像这样: 顶点着色器:

attribute vec4 position; 
varying mediump vec3 texCoord; 
void main() { 
    texCoord.xyz = position.xyz; 
} 

片段着色器:

uniform samplerCube Sampler; 

varying mediump vec3 texCoord; 

void main() { 
    mediump vec3 cube = vec3(textureCube(Sampler, texCoord.xyz)); 
    gl_FragColor = vec4(cube, 1.0); 
} 

但我不能得到立方可见。我做错了什么? 谢谢

回答

3

我的错,我发现了这个问题。我没有在顶点着色器中“创建”顶点。它应该是这样的:

uniform mat4 modelViewMatrix; 
    uniform mat4 projectionMatrix; 

    attribute vec4 position; 
    varying mediump vec4 texCoord; 
    void main() { 
     texCoord = position; 
     gl_Position = projectionMatrix * modelViewMatrix * position; 

    } 
+0

结局。您是否有创建GL_TEXTURE_CUBE_MAP纹理的来源? – sgtHale 2014-04-25 05:54:28