画出图中红线表示的三角形,三个点的坐标分别为(-1,-1,0),(1,-1,0),(0,1,0) [ 1.顶点数组使其包含三个顶点;
Vector3f Vertices[3]; //创建含有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); 代码如下:
#include <stdio.h>
#include <GL/glew.h> // GLEW扩展库,注意glew.h必须要写在前面
#include <GL/freeglut.h> // freeGLUT图形库
#include “ogldev_math_3d.h” //用于OpenGL的3d数学库,这里主要用到了顶点这个数据结构,里面报错的代码可以先注释掉
GLuint VBO; //全局GLuint引用变量,来操作顶点缓冲器对象
//渲染回调函数
static void RenderCallBack()
{
glClear(GL_COLOR_BUFFER_BIT); //清空颜色缓存
glEnableVertexAttribArray(0); //开启顶点属性
glBindBuffer(GL\_ARRAY\_BUFFER, VBO); //绑定GL\_ARRAY\_BUFFER缓冲器
glVertexAttribPointer(0, 3, GL\_FLOAT, GL\_FALSE, 0, 0); // 管线解析bufer中的数据
glDrawArrays(GL\_TRIANGLES, 0, 3); ////画三角形,3个顶点
glDisableVertexAttribArray(0); //禁用顶点数据
glutSwapBuffers(); //交换前后缓存
}
//创建顶点缓冲器
static void CreateVertexBuffer()
{
Vector3f Vertices[3]; //创建含有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); //绑定GL\_ARRAY\_BUFFER缓冲器
glBufferData(GL\_ARRAY\_BUFFER, sizeof(Vertices), Vertices, GL\_STATIC\_DRAW); //绑定顶点数据
}
//入口函数
int main(int argc, char ** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); //显示模式:双缓冲、RGBA
glutInitWindowSize(400, 400);
glutInitWindowPosition(100, 100);
glutCreateWindow("这是一个三角形");
glutDisplayFunc(RenderCallBack); //开始渲染
// 检查GLEW是否就绪,必须要在GLUT初始化之后!
GLenum res = glewInit();
if (res != GLEW\_OK) {
fprintf(stderr, "Error: '%s'\\n", glewGetErrorString(res));
return 1;
}
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //缓存清空后的颜色值
CreateVertexBuffer(); //创建顶点缓冲器
glutMainLoop(); //通知开始GLUT的内部循环
return 0;
}
结果如下: 参考链接: http://ogldev.atspace.co.uk/www/tutorial03/tutorial03.html http://blog.csdn.net/cordova/article/details/52494549