繁体   English   中英

如何使用OpenGL和GLUT渲染3d .obj文件? (Mac OS X,XCode 4)

[英]How do I render a 3d .obj file with OpenGL and GLUT? (Mac OS X, XCode 4)

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

#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();
}

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”以使用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM