📌  相关文章
📜  C程序使用OpenGL为控制台上绘制的不同图形着色(1)

📅  最后修改于: 2023-12-03 14:40:26.488000             🧑  作者: Mango

使用OpenGL在控制台上绘制不同图形并着色

OpenGL是一个强大的开源图形库,可以在不同的平台上进行图形渲染,并且支持多种编程语言。在本文中,我们将介绍如何使用C程序和OpenGL在控制台上绘制不同的图形并着色。

步骤一:创建窗口

在绘制任何图形之前,我们需要先创建一个窗口。以下是创建窗口的C代码:

#include <GL/glut.h>

void display() {
    glClear(GL_COLOR_BUFFER_BIT);
    glEnd();
    glFlush();
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitWindowSize(640, 480);
    glutCreateWindow("OpenGL Control Console");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

在这个代码中,我们首先导入了OpenGL的头文件,然后定义了一个 display() 函数,在这个函数中,我们清除了颜色缓冲,结束了OpenGL命令流并将其刷新到屏幕上。然后是 main() 函数,这个函数初始化了GLUT,设置了窗口的大小和标题,并将显示函数绑定到窗口中。最后,我们启动了主循环,等待用户交互。

步骤二:在窗口中绘制不同的图形

在创建窗口后,我们可以开始在窗口中绘制不同的图形。在OpenGL中,可以通过使用不同的基本几何图元(如点、线段、多边形)来创建不同的图形。

以下是使用C语言和OpenGL在控制台上创建一条线的代码:

#include <GL/glut.h>

void display() {
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_LINES);
    glColor3f(0.0, 1.0, 0.0);
    glVertex2f(0.0, 0.0);
    glVertex2f(0.5, 0.5);
    glEnd();

    glFlush();
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitWindowSize(640, 480);
    glutCreateWindow("OpenGL Control Console");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

在这个代码中,我们定义了一个 display() 函数,在这个函数中,通过 glBegin() 函数指示OpenGL开始绘制一条线,然后通过 glColor3f() 函数设置颜色为绿色,接着通过 glVertex2f() 函数设置线的两个端点坐标,最后通过 glEnd() 函数告诉OpenGL该停止绘制线。我们还可以通过类似的方式使用 glBegin()glEnd() 函数在屏幕上绘制不同的图形。

步骤三:在图形中添加颜色

除了使用 glColor3f() 函数直接设置颜色之外,还可以使用材质(Material)和光照(Lighting)等技术来为图形着色。以下是使用C语言和OpenGL在控制台上创建一个着色正方形的代码:

#include <GL/glut.h>

void display() {
    glClear(GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);

    glBegin(GL_QUADS);
    glColor3f(1.0, 0.0, 0.0);
    glVertex3f(-1.0, -1.0, 0.0);
    glColor3f(0.0, 1.0, 0.0);
    glVertex3f(-1.0, 1.0, 0.0);
    glColor3f(0.0, 0.0, 1.0);
    glVertex3f(1.0, 1.0, 0.0);
    glColor3f(1.0, 1.0, 0.0);
    glVertex3f(1.0, -1.0, 0.0);
    glEnd();

    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0};
    GLfloat light_position[] = {0.0, 0.0, 1.0, 0.0};
    glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);

    GLfloat mat_ambient[] = {0.7, 0.7, 0.7, 1.0};
    GLfloat mat_diffuse[] = {0.8, 0.8, 0.8, 1.0};
    GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0};
    GLfloat mat_shininess[] = {100.0};
    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

    glutSwapBuffers();
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitWindowSize(640, 480);
    glutCreateWindow("OpenGL Control Console");
    glutDisplayFunc(display);

    glEnable(GL_DEPTH_TEST);

    glutMainLoop();
    return 0;
}

在这个代码中,我们使用 glEnable() 函数启用了深度测试,并使用 glMatrixMode() 函数设置了模型视图矩阵。然后,我们使用 glBegin()glEnd() 函数在屏幕上绘制了一个正方形,并使用 glColor3f() 函数给每个角落设置了不同的颜色。接着,我们启用了光照和一个光源,并设置了材质的环境、漫射、高光等属性。最后,我们使用 glutSwapBuffers() 函数交换前后缓冲区,以显示出我们所绘制的正方形。

总结

在本文中,我们已经学习了如何使用C程序和OpenGL在控制台上绘制不同的图形并着色。通过使用简单的OpenGL函数,我们可以创建一个用户友好的图形应用程序。此外,我们还了解了如何在图形中添加颜色以及使用材质和光照等技术对图形进行着色。