2015-01-20 2 views
0

OBJ 파일을로드하고 OpenGL 창에서 렌더링 할 수 있도록. 지금까지 내가 관리했습니다 :내 OpenGL 프로젝트에 "tinyobjloader"가 포함되어 있습니다.

나는 시각적 싶습니다 내 OpenGL 창에서 이러한 정점 렌더링, 그래서이 두 가지를 결합하는 것 같아요,하지만 어떻게 질문입니까? 내 OpenGL을 컨텍스트가 OBJ 가져 오기,하지 라운드 다른 방법으로 동화 가정,하지만 어디 코드에서 그것은 갈 것 :

#include <GLFW/glfw3.h> 
#include <GLUT/glut.h> 
int main(void) 
{ 
    GLFWwindow* window; 

    /* Initialize the library */ 
    if (!glfwInit()) 
     return -1; 

    /* Create a windowed mode window and its OpenGL context */ 
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); 
    if (!window) 
    { 
     glfwTerminate(); 
     return -1; 
    } 

    /* Make the window's context current */ 
    glfwMakeContextCurrent(window); 

    /* Loop until the user closes the window */ 
    while (!glfwWindowShouldClose(window)) 
    { 
     /* Render here */ 

     /* clearing */ 
     glClear(GL_COLOR_BUFFER_BIT); 

     /* Swap front and back buffers */ 
     glfwSwapBuffers(window); 

     /* Poll for and process events */ 
     glfwPollEvents(); 
    } 

    glfwTerminate(); 
    return 0; 
} 

또는 나는 외부에 링크해야합니까?

답변

2

glfwMakeContextCurrent와 while 루프 사이에 obj를 읽고 VBO에 값을 넣어야합니다. 각 모양의 각 메시가 VAO을 만들고 VBO는 데이터, 설정 vertexAttributePointers에 넣고 메시에 얼마나 많은 정점 유지를 위해

그것은 다음 양식

std::string err = tinyobj::LoadObj(shapes, materials, objStream, matSSReader); 
if (!err.empty()) { 
    glfwTerminate(); 
    return 1; 
} 

이 될 것입니다.

그런 다음 렌더링하는 동안 VAO를 바인딩하고 올바른 재료를 바인딩하고 그립니다.

+0

코드 및 위치는 내 질문의 일부입니다. 그러나 [OBJ 로더] (https://github.com/syoyo/tinyobjloader)가 복잡한 지오메트리 가져 오기 프로세스를 자동화하여 VB0s 및 VA0으로 데이터를 구성해야하는 필요성을 피할 수 있기를 기대했습니다. "10M 이상을 구문 분석 할 수 있습니다. 알맞은 기억과 시간을 지닌 다각형 ". 또한 "Test.cc"에는 VB0s/VA0s에 대한 언급이 없습니다. 아마도 "obj_writer"가 몇 가지 단서를 제공 할 것입니다. – user4397892

관련 문제