使用顶点数组 可以 减少 opengl函数的 调用次数 以及共享 顶点,提高 效率。 总共 有 8组 数组,他们 是 顶点,颜色,辅助颜色,索引,法线,雾坐标,纹理坐标,边界标记。关于 每个数组的 存放 既可以 单独 存放 在数组里,也 可以 把 这些属性 作为 一个 集合 放入 数组中。
下面给出 代码:
// circle.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <gl/glut.h>
#include <cmath>
#define LENGTH 100
#define PI 3.1415926
GLfloat vertexArray[] = {0,0,0,
1,1,0,
0.5,0,0,
-0.5,0.5,0,
};
GLfloat colorArray[] = {
1,0,0,
0,1,0,
0,0,1,
0,1,1,
};
GLfloat vexColArray[] = {
0,0,0, 1,0,0,
0.5,0.5,1, 0,1,0,
0.2,-1,0, 0,0,1
};
void init(){
glClearColor(0,0,0,0);
//启用顶点 和 颜色 数组
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
//指定数组
//glVertexPointer(3,GL_FLOAT,0,vertexArray);
//glColorPointer(3,GL_FLOAT,0,colorArray);
glVertexPointer(3,GL_FLOAT,sizeof(GLfloat)*6,vexColArray);
glColorPointer(3,GL_FLOAT,sizeof(GLfloat)*6,&vexColArray[3]);
}
void display(){
glColor3f(1.0,0,0);
glClear(GL_COLOR_BUFFER_BIT);
//解引用 和 渲染
glBegin(GL_TRIANGLES);
glArrayElement(0);
glArrayElement(2);
glArrayElement(1);
glEnd();
glFlush();
}
int _tmain(int argc, _TCHAR* argv[])
{
glutInit(&argc,(char **)argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("顶点数组");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
运行截图: