OpenGL入门(五)使用顶点绘制图形

写在前面

最近对OpenGL编程又双叒产生了浓厚的兴趣,决定把学习OpenGL过程中学到的知识都整理到博客中来,一来方便日后查看,而来也是为了和诸位大佬共勉。有不当的地方还望诸位批评指正,谢谢。
本系列博客将使用freeglut3.0.0和glew2.1.0和vs2017,在win10平台上开发。

绘制一个三角形

OpenGL对复杂图形的绘制实际上是将模型拆分成一个个小三角形来完成的。在之前的基础上绘制一个三角形只需要将glDrawArrays方法的第一个参数改为GL_TRIANGLES即可。效果如下:

这里写图片描述

代码:

// OpenGL5.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <GL/glew.h>
#include <GL/freeglut.h>

#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")

GLclampf back_color[] = {1.0f, 1.0f, 1.0f, 0.0f};

GLfloat vertex[] = { -0.5, 0.0, 0.0,
                    0.5, 0.0, 0.0,
                    0.25, 0.5, 0.0
                    };

GLuint VBO;

void init()
{
    glClearColor(back_color[0], back_color[1], back_color[2], back_color[3]);
    glGenBuffers(1, &VBO);
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertex), vertex, GL_STATIC_DRAW);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
}

void display() 
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0, 1.0, 0.0);
    glDrawArrays(GL_TRIANGLES, 0, 3);
    glFlush();
}

int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowPosition(0, 0);
    glutInitWindowSize(800, 600);
    glutCreateWindow("顶点");

    GLuint result = glewInit();
    if (result != GLEW_OK) {
        fprintf(stderr, "Error: '%s'\n", glewGetErrorString(result));
        return 1;
    }

    init();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/renkai0406/article/details/80226140