-1

我有一个包含顶点和法线的二进制文件,用于在 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);

}

代码似乎是正确的,但是在渲染时窗口中没有显示任何内容,有人可以建议我这里可能有什么问题吗?视口设置为匹配窗口的宽度和高度。

4

1 回答 1

1

你的for循环iterator看起来很可疑。您正在使用iteratoroverdata以及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();
}
于 2013-10-28T01:21:25.777 回答