2015-01-20 7 views
0

Чтобы я мог загружать файлы OBJ и отображать их в моем окне openGL. До сих пор я удался:, включающий «tinyobjloader» в моем проекте OpenGL

  • создать контекст OpenGL и окно с помощью glfw3
  • создал исполняемый (of test.cc, and its associated libraries and headers), который только выводит OBJ вершину в виде текста в терминале

Я хотел бы визуально сделайте эти вершины в моем окне 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 и поместить значения в VBOs.

Было бы форме

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

затем для каждой сетки в каждой форме создают ВАО и ВБО положить в данных, установки в vertexAttributePointers и держать сколько вершин в сетке.

Затем во время визуализации вы связываете VAO и связываете правильный материал и рисуете.

+0

Код и, где его разместить, отвечает на часть моего вопроса. Однако я надеялся, что [OBJ loader] (https://github.com/syoyo/tinyobjloader) автоматизирует процесс импорта сложной геометрии, минуя необходимость организации данных в VB0s и VA0s - «Он может анализировать 10M поверх полигоны с умеренной памятью и временем ». Кроме того, «Test.cc» не упоминает VB0s/VA0s. Возможно, «obj_writer» предоставит некоторые подсказки. – user4397892