跳转到内容

OpenGL 编程/基础/3D 对象

来自维基教科书,开放的书籍,面向开放的世界

OpenGL 是一个强大的图形库,允许您在 C++ 中创建 3D 图形。在本教程中,我们将讨论如何在 OpenGL 和 C++ 中绘制一个简单的 3D 对象。在本教程中,我们将使用 GLUT 库,它提供了一组用于创建简单的 OpenGL 应用程序的工具。

先决条件

[编辑 | 编辑源代码]

在我们开始之前,请确保您已安装以下软件

  • 一个 IDE,例如 Visual Studio 或 Code::Blocks
  • GLUT 库
  • OpenGL 头文件和库

要开始,请在您的 IDE 中创建一个新的 C++ 项目,并包含必要的 OpenGL 和 GLUT 头文件。这是一个例子

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

接下来,我们将为 3D 对象定义一些变量

float angle = 0.0f; // rotation angle
float x = 0.0f; // x position
float y = 0.0f; // y position
float z = -5.0f; // z position

我们将使用这些变量来操纵对象的定位和方向。

绘制简单的 3D 对象

[编辑 | 编辑源代码]

让我们从绘制一个简单的立方体开始。我们将使用 glutSolidCube 函数来创建立方体,并使用 glTranslatefglRotatef 来定位和定向它。

void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    
    // Position and rotate the cube
    glTranslatef(x, y, z);
    glRotatef(angle, 0.0f, 1.0f, 0.0f);
    
    // Draw the cube
    glutSolidCube(1.0);
    
    glutSwapBuffers();
}

glClear 函数清除颜色和深度缓冲区,glMatrixModeglLoadIdentity 分别设置当前矩阵模式和加载单位矩阵。glTranslatefglRotatef 函数用于定位和定向立方体,glutSolidCube 函数用于绘制立方体。最后,glutSwapBuffers 用于交换前后台缓冲区。我们还需要在 main 函数中设置窗口和 OpenGL 上下文

int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
    glutInitWindowSize(640, 480);
    glutCreateWindow("Simple 3D Object");
    
    glEnable(GL_DEPTH_TEST);
    
    glutDisplayFunc(display);
    glutIdleFunc(idle);
    
    glutMainLoop();
    
    return 0;
}

glutInit 函数初始化 GLUT,glutInitDisplayMode 设置显示模式。glutInitWindowSize 设置窗口大小,glutCreateWindow 创建窗口。glEnable(GL_DEPTH_TEST) 启用深度测试。最后,glutDisplayFuncglutIdleFunc 分别设置显示和空闲函数,glutMainLoop 进入 GLUT 事件处理循环。

在本教程中,我们学习了如何在 OpenGL 和 C++ 中绘制简单的 3D 对象。我们使用 GLUT 库来设置窗口和 OpenGL 上下文,并使用 glTranslatefglRotatef 来定位和定向立方体。我们还讨论了如何启用深度测试,以确保对象根据其位置正确渲染。

华夏公益教科书