【问题标题】:How do I render a 3d .obj file with OpenGL and GLUT? (Mac OS X, XCode 4)如何使用 OpenGL 和 GLUT 渲染 3d .obj 文件? (Mac OS X, XCode 4)
【发布时间】:2012-09-28 20:45:49
【问题描述】:

如何渲染 .obj 文件(3d 格式)?以及如何为其添加颜色?我在 OS X 上,使用 XCode 4。这是我的小“测试实验室”。

#include <GLUT/glut.h>
#include <iostream>

void render(void);

void keyboard(unsigned char c, int x, int y);

void mouse(int button, int state, int x, int y);

int main(int argc, char ** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(500, 500);
    glutCreateWindow("Simple GLUT Application");

    glutDisplayFunc(render);
    glutKeyboardFunc(keyboard);
    glutMouseFunc(mouse);

    glutMainLoop();
}

void keyboard(unsigned char c, int x, int y) {
    if (c == 27){
        exit(0);
    }
}

void mouse(int button, int state, int x, int y) {
    if (button == GLUT_RIGHT_BUTTON){
        exit(0);
    }
}

void render(void) {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    //RENDER STUFF HERE
    glBegin(GL_POLYGON);
    glVertex3f(  0.0, -0.8,  0.5);
    glVertex3f(  0.0,  0.2,  0.5);
    glVertex3f(  0.5,  0.8, -0.5);
    glVertex3f(  0.5, -0.2, -0.5);
    glEnd();

    glutSwapBuffers();
}

【问题讨论】:

    标签: c++ xcode macos opengl glut


    【解决方案1】:

    OpenGL 是一个低级 3D API。它没有加载模型文件等高级功能。因此,要渲染一个 .obj 文件,您将编写代码来自己加载数据,然后编写 OpenGL 代码来绘制您已加载的多边形。

    有几种方法可以为您绘制的 OpenGL 基元添加颜色和纹理。您当前的代码在“立即模式”下使用 OpenGL,并且添加颜色的立即模式方法是在生成顶点之前使用 glColor*() 函数设置颜色。

    glBegin(GL_TRIANGLES);
    glColor3f(   1.0,  0.0,  0.0);
    glVertex3f(  0.0, -0.8,  0.5);
    glColor3f(   0.0,  1.0,  0.0);
    glVertex3f(  0.0,  0.2,  0.5);
    glColor3f(   0.0,  0.0,  1.0);
    glVertex3f(  0.5,  0.8, -0.5);
    glEnd();
    

    在过去几年中,OpenGL API 发生了一些重大变化。您经常在网上找到的 OpenGL 教程涵盖了使用 OpenGL 的旧方法。我强烈推荐阅读最新版本的OpenGL SuperBible:综合教程和参考一书。它详细介绍了 OpenGL 的现代用法(即非即时模式),包括一章介绍如何将 OpenGL 与 OS X 的原生窗口 API Cocoa 结合使用。

    虽然 OpenGL Superbible 的第 5 版(撰写本文时的最新版本)是在 OS X 支持新的 OpenGL 内容之前编写的,但后来添加了新功能。您需要阅读 Apple 关于在 Cocoa 或 OS X 的 GLUT 实现中启用“OpenGL Core Profile”的文档才能使用它们。

    【讨论】:

    • 对,我可以做颜色,但是自定义纹理呢,意味着将 .png 文件加载到多边形的面上?还是在超级圣经里?
    • 要创建 OpenGL 纹理,您必须自己将图像加载到 OpenGL 支持的特定格式的缓冲区中,然后要求 OpenGL 创建纹理对象,将 OpenGL 指向您放置的缓冲区图像数据。然后要在立即模式下使用纹理,您在 OpenGL 中打开纹理,然后在每个顶点上设置纹理坐标(或启用自动纹理坐标生成)......是的,OpenGL SuperBible 涵盖纹理,尽管没有使用它们立即模式(因为立即模式已过时,如果可以避免,则不应使用)。
    猜你喜欢
    • 2014-04-06
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多