xiaozhu_zy 稍嫌羞澀的路人
註冊時間: 2009-02-24 文章: 2
50.27 果凍幣
|
發表於: 2009-2-24, PM 5:43 星期二 文章主題: 关于3D模型读入的问题 |
|
|
大家好,我是新注册的。無意中看見這個網站的。我是大陸的,有時候看不懂你們的話,不過,我還是想在這裡發布這個問題,幫幫我啊
我用VC導入3D模型——obj格式,可是只有一個模型可以成功導入,其他的模型要么顯示不出來,要么有什麽內存錯誤,不知道是怎么回事?我是用那個glm.h和glm.cpp來導出的
下面是我的源碼,請高手幫我看看啊,謝謝。其他的代碼例如opengl的設置之類的我就不帖出來了,這幾段代碼就是導出的代碼。
void COBJLoaderView::MyInit(void)
{
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
glShadeModel(GL_SMOOTH);
m_model =glmReadOBJ("data\\patriot.obj");//只有這個文件可以
// 導出,別的都不可
// 以
glmUnitize( m_model );
glmScale(m_model,1.0 );
}
void COBJLoaderView::DisplayObject(void)
{
GLfloat no_mat[] = { 0.05f, 0.05f, 0.05f, 1.0f };
GLfloat mat_ambient[] = { 0.35f, 0.35f, 0.45f, 1.0f };
GLfloat mat_diffuse[] = { 0.0f, 0.0f, 0.8f, 1.0f };
GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat no_shininess[] = { 0.0f };
GLfloat low_shininess[] = { 100.0f };
GLfloat high_shininess[] = { 10.0f };
GLfloat mat_emission[] = {0.3f, 0.2f, 0.2f, 0.0f};
GLfloat ambient[4] = { 0.2f, 0.2f, 0.3f, 1.0f };
GLfloat diffuse[4] = { 0.0f, 0.0f, 1.0f, 1.0f };
GLfloat specular[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat position[4] = { 10.0f,10.0f,10.0f, 1.0f };//创建具有某种特性的光源..所创建的光源号..光源特性(RGBA模式下)..光源特性值
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);//指针->ambient等
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR,specular);
glLightfv(GL_LIGHT0, GL_POSITION, position);
glEnable (GL_LIGHTING);//start light
glEnable (GL_LIGHT0);
//定义光照计算中用到的当前颜色材质..材质应该应用到物体的一个面(那一个面被修改)..-..
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess);
glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glmDraw(m_model,GLM_TEXTURE|GLM_SMOOTH);// COLOR
glmDelete( m_model );
glDisable(GL_LIGHTING);//off
}
void COBJLoaderView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
HWND hWnd = GetSafeHwnd();
HDC hDC = ::GetDC(hWnd);
wglMakeCurrent(hDC,m_hGLContext);//使RC成为当前
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);//使屏成为黑色
glMatrixMode(GL_MODELVIEW);//选择模型观察矩阵
glLoadIdentity();//重置使其单位化,不受其他矩阵影响
glTranslatef(0.0f,0.0f,-5.0f);
glRotatef (180,1.0,0.0,0.0);
glScalef(1.5,0.5,-0.5);//反射变换
DisplayObject();
glFlush();
SwapBuffers(hDC);//交换前后台
::ReleaseDC(hWnd,hDC); _________________ I do what I like to do! |
|