opengl代码显示人体图形,从二进制文件中读取顶点

时间:2013-10-28 00:49:11

标签: c++ visual-studio-2010 opengl

我有一个二进制文件,其中包含在opengl中制作人体图形的顶点和法线。图形由小三角形组成。二进制文件中的数字(浮点)是三角形的第一个顶点的X,Y,Z顺序,后面跟着法线(x,y,z),同样,两个这样的集合完成一个三角形(因此二进制文件中的每18个浮点数组成一个三角形),二进制文件包含数千个这样的三角形。我用c ++编写了一个windows形式的opengl代码,用于显示图形,下面是渲染函数。我忽略法线并仅使用顶点

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 个答案:

答案 0 :(得分: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();
}