OpenGL入門(五)使用頂點繪製圖形
阿新 • • 發佈:2018-12-30
寫在前面
最近對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;
}