教程 3
第一个三角形
原文:http://ogldev.atspace.co.uk/www/tutorial03/tutorial03.html
CSDN完整版专栏: http://blog.csdn.net/column/details/13062.html
背景
这篇教程非常简短,我们只是扩展前一个教程来渲染一个三角形。
这篇教程中我们依然使用那个单位化的盒子模型。可见的点必须在这个盒子内,这样他们将可以通过视窗的变换映射到窗口中可见的坐标上。当俯视Z坐标轴的负方向时这个单位化盒子看上去如下图:
点(-1.0, -1.0)映射到盒子的左下角,(-1.0,1.0)映射到左上角等等。如果将三角形的顶点往盒子外扩展移到盒子外,这个三角形将会被裁剪,只能看到三角形的一部分。
源代码详解:
(1)
Vector3f Vertices[3];
Vertices[0] = Vector3f(-1.0f, -1.0f, 0.0f);
Vertices[1] = Vector3f(1.0f, -1.0f, 0.0f);
Vertices[2] = Vector3f(0.0f, 1.0f, 0.0f);
这我们扩展上个教程中的顶点数组使其包含三个顶点;
(2)glDrawArrays(GL_TRIANGLES, 0, 3);
在绘制函数中有两个变化:画三角形而不是点,画三个顶点而不是一个。
示例Demo
#include <stdio.h>
#include <GL/glew.h>
#include <GLUT/freeglut.h>
#include "ogldev_math_3d.h"
GLuint VBO;
/**
* 渲染回调函数
*/
static void RenderScenceCB(){
glClear(GL_COLOR_BUFFER_BIT);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
glutSwapBuffers();
glFlush();
}
/**
* 创建顶点缓冲器
*/
static void CreateVertexBuffer()
{
Vector3f Vertices[3];
Vertices[0] = Vector3f(-1.0f, -1.0f, 0.0f);
Vertices[1] = Vector3f(1.0f, -1.0f, 0.0f);
Vertices[2] = Vector3f(0.0f, 1.0f, 0.0f);
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
}
/**
* 主函数
*/
int main(int argc, char ** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(480, 320);
glutInitWindowPosition(100, 100);
glutCreateWindow("Tutorial 03");
glutDisplayFunc(RenderScenceCB);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GLenum res = glewInit();
if (res != GLEW_OK) {
fprintf(stderr, "Error: '%s'\n", glewGetErrorString(res));
return 1;
}
CreateVertexBuffer();
glutMainLoop();
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
运行效果