Jump to content

OpenGL Programming/Basics/3DObjects

From Wikibooks, open books for an open world

OpenGL is a powerful graphics library that allows you to create 3D graphics in C++. In this tutorial, we will be discussing how to draw a simple 3D object in OpenGL and C++. We will be using the GLUT library for this tutorial, which provides a set of tools for creating simple OpenGL applications.

Prerequisites

[edit | edit source]

Before we get started, make sure you have the following software installed:

  • An IDE such as Visual Studio or Code::Blocks
  • The GLUT library
  • OpenGL headers and libraries

Setting Up

[edit | edit source]

To get started, create a new C++ project in your IDE and include the necessary OpenGL and GLUT headers. Here's an example:

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

Next, we'll define some variables for our 3D object:

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

We'll use these variables to manipulate the position and orientation of our object.

Drawing a Simple 3D Object

[edit | edit source]

Let's start by drawing a simple cube. We'll use the glutSolidCube function to create the cube, and glTranslatef and glRotatef to position and orient it.

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

The glClear function clears the color and depth buffers, and glMatrixMode and glLoadIdentity set the current matrix mode and load the identity matrix, respectively. The glTranslatef and glRotatef functions are used to position and orient the cube, and the glutSolidCube function is used to draw the cube. Finally, glutSwapBuffers is used to swap the front and back buffers. We'll also need to set up the window and OpenGL context in the main function:

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;
}

The glutInit function initializes GLUT, and glutInitDisplayMode sets up the display mode. glutInitWindowSize sets the window size, and glutCreateWindow creates the window. glEnable(GL_DEPTH_TEST) enables depth testing. Finally, glutDisplayFunc and glutIdleFunc set the display and idle functions, respectively, and glutMainLoop enters the GLUT event processing loop.

Conclusion

[edit | edit source]

In this tutorial, we learned how to draw a simple 3D object in OpenGL and C++. We used the GLUT library to set up the window and OpenGL context, and we used glTranslatef and glRotatef to position and orient the cube. We also discussed how to enable depth testing to ensure that objects are rendered correctly based