Код opengl для отображения графики человеческого тела, чтения вершин из двоичного файла

У меня есть двоичный файл, который содержит вершины и нормали для создания графики человеческого тела в opengl. Графика состоит из маленьких треугольников. Числа (числа с плавающей запятой) в двоичных файлах имеют порядок, X, Y, Z первой вершины треугольника, за которым следуют нормали (x,y,z), аналогично еще два таких множества завершают треугольник.(таким образом, каждый набор из 18 плавающих чисел в двоичных файлах образует треугольник), а двоичные файлы содержат несколько тысяч таких треугольников. Я написал код opengl в форме окон в C++, чтобы отобразить графику, далее следует функция рендеринга. Я игнорирую нормали и использую только вершины

void OpenGL::RenderScene()

{

size_t file_size;
    ifstream file;
    file.open("male_16_do`enter code here`wn.bin",ios::binary|ios::in);
    if(!file){
     cout<<"Couldnt find the file"<<endl;
    }

    file.seekg(0,ios::end);
    file_size=file.tellg();
    file_size/=(sizeof(float));
    file.seekg(0,ios::beg);


std::vector<float> data(file_size);

file.read(reinterpret_cast<char*>(&data[0]),file_size*sizeof(float)); 
for(size_t i=0;i<file_size;i++){
  //cout<<fixed<<setprecision(3)<<data[i]<<endl;
}
vector<float>::iterator iter;

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glLoadIdentity();                                   
glTranslatef(1.5f,1.0f,0.0f);
for(iter=data.begin();iter!=data.end();iter++){

glBegin(GL_TRIANGLE_STRIP); 
int i=0;
    glColor3f(1,0.0f,0.0f);                 
glVertex3f( data[i], data[i+1], data[i+2]);     
  glColor3f(1,0.0f,0.0f);   
glVertex3f(data[i+6],data[i+7], data[i+8]);                 
  glColor3f(1,0.0f,0.0f);                       
glVertex3f( data[i+12],data[i+13], data[i+14]);     

glEnd();
i=i+18;
}   
SwapBuffers(m_hDC);

}

Код кажется правильным, но при рендеринге в окне ничего не отображается, может кто-нибудь подсказать, что здесь может быть не так? Окно просмотра установлено в соответствии с шириной и высотой окна.

1 ответ

Ваш for цикл с iterator выглядит подозрительно Вы используете iterator над data так же как i:

Сделай это:

size_t dataLen = data.size();
for(size_t i = 0; i < dataLen; i+= 18) {
    glBegin(GL_TRIANGLE_LIST); // your original code mentioned TRI_STRIP. 
    glColor3f(1,0.0f,0.0f);                 
    glVertex3f( data[i], data[i+1], data[i+2]);     
    glColor3f(1,0.0f,0.0f);   
    glVertex3f(data[i+6],data[i+7], data[i+8]);                 
    glColor3f(1,0.0f,0.0f);                       
    glVertex3f( data[i+12],data[i+13], data[i+14]); 
    glEnd();
}
Другие вопросы по тегам