Opengl 将模型加载到项目后,其形状会有所不同

Opengl 将模型加载到项目后,其形状会有所不同,opengl,glut,Opengl,Glut,我有Barrack.obj对象和Barrack.mtl文件。还有几个.tga文件。 我想将此对象加载到我的opengl项目中。 为此,我解析.obj和.mtl文件。然后绘制模型并像这样设置材质(模型对象中的方法draw) 其中函数draw void draw() { glPushMatrix(); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glCallList(g_persp); gluLookAt( 0, 3, 3,

我有
Barrack.obj
对象和
Barrack.mtl
文件。还有几个
.tga
文件。 我想将此对象加载到我的opengl项目中。 为此,我解析
.obj
.mtl
文件。然后绘制模型并像这样设置材质(模型对象中的方法
draw

其中函数
draw

void draw()
{
glPushMatrix();

glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);

glCallList(g_persp);

gluLookAt(  0, 3, 3,    //  eye pos
            0, 0, 0,    //  aim point
            0, 1, 0);   //  up direction

glRotatef(angle, 0.0, 1.0, 0.0);
glColor4f(1.0, 1.0, 1.0, 1.0);
glScalef(0.1, 0.1, 0.1);
model.draw(); // method draw mentioned earlier

glCallList(g_ortho);

glPopMatrix();

glutSwapBuffers();
}
有什么问题?为什么屋顶上有山峰? 在assimpviewer中,模型如下所示

重塑函数

void reshape(int w, int h)
{
if(h == 0) 
{
    h = 1;
}

screenWidth = w;
screenHeight = h;

glDeleteLists(g_persp, 1);
glDeleteLists(g_ortho, 1);

glViewport(0, 0, w, h);

g_persp = glGenLists(1);
g_ortho = glGenLists(1);

glNewList(g_persp, GL_COMPILE);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(45, (float)w / h, 0.1, 100);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

glEndList();

glNewList(g_ortho, GL_COMPILE);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    glOrtho(0, w, h, 0, -100, 100);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

glEndList();
}

它可能只是模型设计者用于某些计算的构造多边形。它们很可能在obj文件中被标记为不可见,如果您有权访问加载代码,则在加载模型时只需过滤掉它们

这可能只是模型设计者用于某些计算的构造多边形。它们很可能在obj文件中被标记为不可见,如果您有权访问加载代码,则在加载模型时只需过滤掉它们

您需要绑定并加载纹理!是 啊我的错。我忘了做这个。所以我改变了这个问题,将标题改为“加载后看起来很奇怪的对象”,好吧,现在这不再是一个真正的问题了。你需要绑定并加载纹理!是 啊我的错。我忘了做这个。所以我改变了这个问题,把标题改为“加载后看起来很奇怪的对象”,现在这不再是一个问题了。这些标志看起来怎么样?搜索shadow_obj或trace_obj:如果不是,我会寻找一种完全透明的材料或纹理我刚想到奇怪的山峰可能只是单独一组中的通风口,而你的程序assimpviewer只是显示第一组这些标志的样子?搜索shadow_obj或trace_obj:如果不是,我会寻找一种完全透明的材料或纹理。我突然想到,奇怪的峰值可能只是单独一组中的通风口,而您的程序AssimViewer只显示第一组
void draw()
{
glPushMatrix();

glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);

glCallList(g_persp);

gluLookAt(  0, 3, 3,    //  eye pos
            0, 0, 0,    //  aim point
            0, 1, 0);   //  up direction

glRotatef(angle, 0.0, 1.0, 0.0);
glColor4f(1.0, 1.0, 1.0, 1.0);
glScalef(0.1, 0.1, 0.1);
model.draw(); // method draw mentioned earlier

glCallList(g_ortho);

glPopMatrix();

glutSwapBuffers();
}
void reshape(int w, int h)
{
if(h == 0) 
{
    h = 1;
}

screenWidth = w;
screenHeight = h;

glDeleteLists(g_persp, 1);
glDeleteLists(g_ortho, 1);

glViewport(0, 0, w, h);

g_persp = glGenLists(1);
g_ortho = glGenLists(1);

glNewList(g_persp, GL_COMPILE);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(45, (float)w / h, 0.1, 100);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

glEndList();

glNewList(g_ortho, GL_COMPILE);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    glOrtho(0, w, h, 0, -100, 100);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

glEndList();
}