写在前面
最近对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;
}