안녕, 나는 OpenGL을 즉를 사용하여 두 개체를 표시하려고 예상대로 행동하지., 1) 두 개의 텍스처 (A 나무 상자 패턴과 웃는)의 혼합으로 큐브을 회전 전경 및 2) 직사각형 플레이트은 단지 하나의 텍스처 (어두운 회색 목재)를 배경으로합니다. 나는 직사각형 판의 표시에 적용되는 코드의 일부, 모두 텍스처 (나무 상자 및 웃는) 표시회전하는 큐브를 주석 처리합니다. 그렇지 않으면 큐브 만 표시 나무 상자 질감 및 어두운 회색 나무 질감도 즉 웃는 질감 회전 큐브 사라지고, 직사각형 판에 표시된다. 1) http://oi68.tinypic.com/2la4r3c.jpg (직사각형 플레이트 코드 부분) 및 2) http://i67.tinypic.com/9u9rpf.jpg (직사각형 플레이트 코드 부분이 주석 처리되지 않은) 이미지를 찾으십시오. 코드의 relavant 부분은이 코드에 관한 두 가지 질문이 OpenGL을 사용하여 두 개체를 표시합니다. 텍스처
// Rotating Cube ===================================================
// Texture of wooden crate
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture1);
glUniform1i(glGetUniformLocation(ourShader_box.Program, "ourTexture1"), 0);
// Texture of a smiley
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture2);
glUniform1i(glGetUniformLocation(ourShader_box.Program, "ourTexture2"), 1);
// lets use the box shader for the cube
ourShader_box.Use();
// transformations for the rotating cube ---------------------------------
glm::mat4 model_box, model1, model2;
glm::mat4 view_box;
glm::mat4 perspective;
perspective = glm::perspective(45.0f, (GLfloat)width_screen/(GLfloat)height_screen, 0.1f, 200.0f);
model1 = glm::rotate(model_box, (GLfloat)glfwGetTime()*1.0f, glm::vec3(0.5f, 1.0f, 0.0f));
model2 = glm::rotate(model_box, (GLfloat)glfwGetTime()*1.0f, glm::vec3(0.0f, 1.0f, 0.5f));
model_box = model1 * model2;
view_box= glm::translate(view_box, glm::vec3(1.0f, 0.0f, -3.0f));
GLint modelLoc_box = glGetUniformLocation(ourShader_box.Program, "model");
GLint viewLoc_box = glGetUniformLocation(ourShader_box.Program, "view");
GLint projLoc_box = glGetUniformLocation(ourShader_box.Program, "perspective");
glUniformMatrix4fv(modelLoc_box, 1, GL_FALSE, glm::value_ptr(model_box));
glUniformMatrix4fv(viewLoc_box, 1, GL_FALSE, glm::value_ptr(view_box));
glUniformMatrix4fv(projLoc_box, 1, GL_FALSE, glm::value_ptr(perspective));
// --------------------------------------------------------------------
// Draw calls
glBindVertexArray(VAO_box);
glDrawArrays(GL_TRIANGLES, 0, 36);
glBindVertexArray(0);
// Rectangular Plate =====================================================
// Background Shader
ourShader_bg.Use();
// Texture of dark grey wood
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, texture_wood);
glUniform1i(glGetUniformLocation(ourShader_bg.Program, "ourTexture3"), 2);
// Transformations -------------------------------------------
glm::mat4 model_bg;
glm::mat4 view_bg;
GLint modelLoc_bg = glGetUniformLocation(ourShader_bg.Program, "model");
GLint viewLoc_bg= glGetUniformLocation(ourShader_bg.Program, "view");
GLint projLoc_bg = glGetUniformLocation(ourShader_bg.Program, "perspective");
glUniformMatrix4fv(modelLoc_bg, 1, GL_FALSE, glm::value_ptr(model_bg));
glUniformMatrix4fv(viewLoc_bg, 1, GL_FALSE, glm::value_ptr(view_bg));
glUniformMatrix4fv(projLoc_bg, 1, GL_FALSE, glm::value_ptr(perspective));
// -----------------------------------------------------------
// Draw calls
glBindVertexArray(VAO_bg);
glDrawArrays(GL_TRIANGLES, 0, 6);
glBindVertexArray(0);
// =================================================================
아래에 붙여 넣습니다.
- 왜 스마일리가 사라지고 있습니까?
- 여러 개체를 렌더링하는 방법은 다음과 같습니다. OpenGL은 객체에 관심이 없다는 것을 알고 있습니다. 단지 정점에만 관심이 있지만,이 경우에는 분리 된 분리 객체입니다. 그래서, 하나의 VAO에 바인드 된 두 개의 VBO 또는 각각의 오브젝트에 대해 두 개의 VAO에 바인드 된 별도의 VBO로 구성해야합니까? 아니면 어느 쪽이든 상관 없다 - 코더의 선택과 코드의 우아함에 달려 있는가?
정말 고마워요 ..... 아름답게 작동했습니다. – ram