2011-03-25 19 views
7

क्या आप मुझे ओपनजीएल ईएस 2.0 में किसी भी अच्छे स्काईबॉक्स उदाहरण के लिए संकेत दे सकते हैं? मुझे केवल ओपनजीएल मिला है और मेरे लिए काम नहीं करता है। मैं इसे इस तरह से कर रहा हूँ: प्रारंभ:हाउटो ओपनजीएल ईएस 2.0 स्काईबॉक्स बनाते हैं?

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); 

skybox ड्राइंग:

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

संबंधित मुद्दे