opengl读取3ds并显示?

发布于 2022-09-03 07:43:36 字数 1784 浏览 34 评论 0

我是按照这个教程来的:http://m.blog.csdn.net/article/details?id=50521504
现在的问题是程序能运行,但是并不能显示茶壶。

#include "stdafx.h"  
#include <gl/glut.h>  
#include <cstdlib>  
#include "TeaPot.h"
#include <gl/GL.h>

GLuint model = -1;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    
    glCallList(model);//void glCallList(GLuint list)执行一个显示列表                      //glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
    glTranslatef(0.0, 0.0, -10.0);
    glRotatef(0.0, 0.0, 1.0, 0.0);
    glFlush();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
    glutInitWindowSize(450, 450);
    glutInitWindowPosition(150, 150);
    model = GL3DS_initialize_TeaPot();
    glutCreateWindow("TeaPot");
    glutDisplayFunc(display);

    glutMainLoop();
    return EXIT_SUCCESS;
}

初始化函数

int ReturnVal;
  FILE *in;
  if (!(in = fopen("TeaPot.gl", "rb")))
    return(-1);
  if (fread(GL3DS_VERTEX_TeaPot, 31424, 1, in) != 1)
    return(-1);
  fclose(in);
  ReturnVal = glGenLists(1);
  glInterleavedArrays(GL_T2F_N3F_V3F, 0, GL3DS_VERTEX_TeaPot);
  glNewList(ReturnVal, GL_COMPILE);
    glFrontFace(GL_CCW);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    glMaterialfv(GL_FRONT, GL_AMBIENT, (GLfloat *) &GL3DS_MATERIAL_TeaPot[0]);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, (GLfloat *) &GL3DS_MATERIAL_TeaPot[4]);
    glMaterialfv(GL_FRONT, GL_SPECULAR, (GLfloat *) &GL3DS_MATERIAL_TeaPot[8]);
    glDrawElements(GL_TRIANGLES, 5952, GL_UNSIGNED_INT, &GL3DS_INDEX_TeaPot[0]);
  glEndList();
  return (ReturnVal);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑脸一如从前 2022-09-10 07:43:36

可能是没有导入成功,可以用Assimp库导入模型试试

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文