2016-06-20 2 views
1

Я создал свои собственные вершины, цвета и индексы, которые будут отображаться с помощью openGL. Вот исходные коды для визуализации вершин, цветов и индексов.OpenGL Вершины и индексы для волнового фронта obj

//CODES TO SET VBO.... 
void displayCallback() {  
    glVertexPointer(...); 
    glColorPointer(...); 
    glDrawElemnts(GL_TRIANGLE_STRIP,...); 
} 

Как вы можете видеть, индексы будут строить, как и GL_TRIANGLE_STRIP Полоса будет оказана. После рендеринга я хочу сохранить объект объекта wavefront с данными вершин, индексов и цветов.

Я попытался сделать файл .obj ложным.

for(int i = 0; i < vertexSize; ++i) { 
    fprintf(fp, "v %f %f %f\n", vertices[i*3], vertices[i*3+1], vertices[i*3+2]); 
} 

fprintf("fp, "s 1\n"); 

for(int i = 0; i < indexSize; ++i) { 
    fprintf(fp, "f %d %d %d\n", indices[i*3], indices[i*3+1], indices[i*3+2]); 
} 

Я попытался вновь открыть его с помощью assimp зрителя (http://www.assimp.org/) это не удалось загрузить. Я что-то упустил?

Спасибо.

ответ

2

Пожалуйста, добавьте простой образец файла obj (как код, подобный кубу), чтобы мы могли видеть, что в нем есть файл. Для того, чтобы увидеть, что я имею в виду, что взглянуть на:

Моя ставка является то, что вы получили неправильные указатели.

  1. GL_TRIANGLE_STRIP имеет 1 вершину треугольника не за 3

    В соответствии с OpenGL doc Вершина поток n длины будет генерировать n-2 треугольники с GL_TRIANGLE_STRIP.

  2. WAVEFRONT OBJ индексы файлов, начиная с 1

    Таким образом, вы, скорее всего, индексация от 0 так проверьте, что ... и использовать +1 или нет, соответственно.

Я не знаю вашей структуры данных архитектура/топологии, но на мой взгляд, ваши лица должны быть сохранены, как это (не тестировал, так как не ваши массивы/таблицы и модели) гнал # 1, # 2 вместе:

fprintf(fp, "f %d %d %d\n", indices[0]+1, indices[1]+1, indices[2]+1); 
for(int i = 3; i < indexSize; i++) 
fprintf(fp, "f %d %d %d\n", indices[i-2]+1, indices[i-1]+1, indices[i]+1); 

Цветовые данные

Для этого волнового фронта OBJ использует материальные расширения в отдельных файлах MTL, СТЛ (я не знаком с теми, извините ...) Но в настоящее время 3D-сканеры используют недокументированные цвета кодирования непосредственно внутри OBJ файлов это делается, как это (поддерживается некоторыми зрителями):

v -5.231932 438.659877 -432.038039 0.000000 1.000000 0.000000 

Таким образом, если вершина имеет 6 координаты первого 3 являются x,y,z и последний 3 являются r,g,b так куб из связанного ответа окрашенного в красном цвете будет

v -1.0 -1.0 -1.0 1 0 0 
v +1.0 -1.0 -1.0 1 0 0 
v +1.0 +1.0 -1.0 1 0 0 
v -1.0 +1.0 -1.0 1 0 0 
v -1.0 -1.0 +1.0 1 0 0 
v +1.0 -1.0 +1.0 1 0 0 
v +1.0 +1.0 +1.0 1 0 0 
v -1.0 +1.0 +1.0 1 0 0 

f 1 2 3 4 
f 5 6 7 8 
f 1 2 6 5 
f 2 3 7 6 
f 3 4 8 7 
f 4 1 5 8 

Вы можете попробовать его в зрителе, чтобы проверить, если он поддерживает такую ​​кодировку ... Я видел на некоторых низких стоимость 3D приложениях сканера, что они где в состоянии сохранить такие файлов, но после перезагрузки i t не сможет отображать цвета ...

+0

Проблема возникла из-за неправильной индексации, начинается с 0. И теперь это разрешено. Спасибо! –

Смежные вопросы