lib3ds + Tao openGL не отображается модель
Всем привет, в общем проблема ясна из названия темы, в SimpleOpenGlControl не отображается модель.
Считывание 3д модели происходит библиотекой 3dslib
Вот код, может кто-то поймёт в чем дело
Lib3dsFile^ model;
Lib3dsFile ^ tmpmodel;
List<Lib3dsMesh^> mesh;
Lib3dsCamera^ camera;
List<Lib3dsFace^> face;
Lib3dsLight^ light;
Lib3dsMaterial^ material;
static float rotat=0;
//GLuint vertexVBO,normalVBO,textureVBO;
unsigned long total_face;
private: void lightup()
{
Gl::glShadeModel(Gl::GL_SMOOTH);
Gl::glEnable(Gl::GL_DEPTH_TEST);
Gl::glEnable(Gl::GL_CULL_FACE);
Gl::glFrontFace(Gl::GL_CCW);
float gambient[]={0.2,0.2,0.2,1.0};
float lightpos[]={1.0,1.0,1.0,0.0};
float lambient[]={1.0,1.0,1.0,1.0};
float ldiffuse[]={1.0,1.0,1.0,1.0};
float lspecular[]={0.3,0.3,0.3,1.0};
Gl::glLightfv(Gl::GL_LIGHT0,Gl::GL_DIFFUSE,*ldiffuse);
Gl::glLightfv(Gl::GL_LIGHT0,Gl::GL_AMBIENT,*lambient);
Gl::glLightfv(Gl::GL_LIGHT0,Gl::GL_SPECULAR,*lspecular);
Gl::glLightfv(Gl::GL_LIGHT0,Gl::GL_POSITION,*lightpos);
Gl::glLightModelfv(Gl::GL_LIGHT_MODEL_AMBIENT,*gambient);
Gl::glEnable(Gl::GL_LIGHTING);
Gl::glEnable(Gl::GL_LIGHT0);
}
private: void getfaces()
{
total_face=0;
for(long meshcount=0;meshcount<model->meshes->Count;meshcount++)
total_face+=mesh[meshcount]->nfaces;
}
private: void display()
{
Gl::glEnable(Gl::GL_DEPTH_TEST);
Gl::glDepthFunc(Gl::GL_LEQUAL);
Gl::glClear(Gl::GL_COLOR_BUFFER_BIT|Gl::GL_DEPTH_BITS);
Gl::glLoadIdentity();
lightup();
Gl::glScalef(0.5,0.5,0.5);
Gl::glTranslatef(0.0,-1500.0,-2500.0);
Gl::glRotatef(280, 1, 0, 0);
Gl::glRotatef(rotat, 0, 0, 1);
long meshcount;
for(meshcount=0;meshcount<model->meshes->Count;meshcount++)
{
for(int fd=0;fd<mesh[meshcount]->faces->Count;fd++)
face.Add(mesh[meshcount]->faces[fd]);
for(long i=0;i<mesh[meshcount]->nfaces;i++)
{
// glMaterialfv(GL_FRONT,GL_DIFFUSE,material[face[i].material]->diffuse);
// glMaterialfv(GL_FRONT,GL_AMBIENT,material[face[i].material]->ambient);
// glMaterialfv(GL_FRONT,GL_SPECULAR,material[face[i].material]->specular);
Gl::glBegin(Gl::GL_TRIANGLES);
Gl::glColor3f(50.0,100.0,0.0);
Gl::glVertex3fv(mesh[meshcount]->vertices[face[i]->index[0]]->ToArray());
Gl::glVertex3fv(mesh[meshcount]->vertices[face[i]->index[1]]->ToArray());
Gl::glVertex3fv(mesh[meshcount]->vertices[face[i]->index[2]]->ToArray());
Gl::glEnd();
}
face.Clear();
}
}
static void Timer(int value)
{
rotat+=1.0f;
if(rotat>=360)
rotat=0;
Glut::glutPostRedisplay();
// Glut::glutTimerFunc(30, Timer, 0);
Gl::glClear(Gl::GL_COLOR_BUFFER_BIT | Gl::GL_DEPTH_BUFFER_BIT);
Gl::glLoadIdentity();
}
private: void keypress(unsigned char key,int x,int y)
{
switch(key)
{
case 27:
exit(0);
break;
}
}
private: void reshape(int w,int h)
{
if(h==0) h=1;
Gl::glViewport(0,0,w,h);
Gl::glMatrixMode(Gl::GL_PROJECTION);
Gl::glLoadIdentity();
Glu::gluPerspective(45.0,w/h,0.0,1000.0);
Gl::glMatrixMode(Gl::GL_MODELVIEW);
Gl::glLoadIdentity();
}
private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e)
{
previev();
reshape(AnT->Width,AnT->Height);
model=LIB3DS::lib3ds_file_open(WndThread::directory_name);
for(int i=0;i<model->meshes->Count;i++)
mesh.Add(model->meshes[i]);
// инициализация Glut
Glut::glutInitDisplayMode(Glut::GLUT_RGB|Glut::GLUT_DOUBLE|Glut::GLUT_DEPTH);
Gl::glClearColor(0.0, 0.0, 0.0, 0.0);
Gl::glClearDepth(1.0);
Gl::glShadeModel(Gl::GL_FLAT);
Gl::glPushMatrix();
display();
Gl::glPopMatrix();
Gl::glFlush();
AnT->Invalidate();
}