glArrayElement,,glDrawElements和glDrawArrays: 这三个 都是 使用 顶点 数组 绘制的 OpenGl函数。
glArrayElement 每次 只能 使用 一组 顶点数据,并且 必须 在 GLbegin 和 glend 之间 绘制。
glDrawElements 每次 可以 绘制 多组 顶点数据,顺序 可以 任意 存放,无 glBegin 和 glend 的限制。
glDrawArrays 每次 可以绘制 多组顶点数据,必须 从 起点 到 终点 按顺序 绘制,无 glBegin 和 glend 限制。
其实 还有 几个 使用 顶点数组 绘制的 函数 ,在我使用的 这个版本(opengl 3.3) 被删除了。
查看版本等信息:
const GLubyte* name = glGetString(GL_VENDOR); //返回负责当前OpenGL实现厂商的名字
const GLubyte* biaoshifu = glGetString(GL_RENDERER); //返回一个渲染器标识符,通常是个硬件平台
const GLubyte* OpenGLVersion =glGetString(GL_VERSION); //返回当前OpenGL实现的版本号
const GLubyte* gluVersion= gluGetString(GLU_VERSION); //返回当前GLU工具库版本
介绍完了,直接上代码:
// vertexPointer.cpp : 定义控制台应用程序的入口点。
//使用顶点数组 进行 渲染
//
#include "stdafx.h"
#include
void init(){
glClearColor(0,0,0,0);
//开启顶点,颜色数组
glEnableClientState(GL_VERTEX_ARRAY);
glEnable(GL_COLOR_ARRAY);
}
//用 glArrayElement方式绘制
void useGlArrayElement(){
static GLfloat vertexs[] = {
-1,-1,0,
-0.5,-0.5,0,
-1,-0.5,0};
static GLfloat colors[] = {
1,0,0,
0,1,0,
0,0,1
};
//绑定顶点数组
glVertexPointer(3,GL_FLOAT,0,vertexs);
glColorPointer(3,GL_FLOAT,0,colors);
//解引用 和 绘制
glBegin(GL_TRIANGLES);
glArrayElement(1);
glArrayElement(0);
glArrayElement(2);
glEnd();
}
void useGlDrawElements(){
static GLfloat vertexs[] = {
-0.4,-1,0,
-0.2,-1,0,
-0.2,-0.5,0};
static GLfloat colors[] = {
1,0,0,
0,1,0,
0,0,1
};
//绑定顶点数组
glVertexPointer(3,GL_FLOAT,0,vertexs);
glColorPointer(3,GL_FLOAT,0,colors);
//解引用 和 绘制
GLubyte array[] = {0,1,2};
//type 必须是 无符号整形: GL_BYTE -- > gl
glDrawElements(GL_TRIANGLES,3,GL_UNSIGNED_BYTE,array);
}
//glDraw
void useGlDrawArrays(){
static GLfloat vertexs[] = {
0,0,0,
0,0.5,0,
0.3,0.4,0};
static GLfloat colors[] = {
1,0,0,
0,1,0,
0,0,1
};
//绑定顶点数组
glVertexPointer(3,GL_FLOAT,0,vertexs);
glColorPointer(3,GL_FLOAT,0,colors);
//gldraw
glDrawArrays(GL_TRIANGLES,0,3);
}
void display(){
glClear(GL_COLOR_BUFFER_BIT);
//gl
useGlArrayElement();
useGlDrawElements();
useGlDrawArrays();
glFlush();
}
//打印opengl信息
void printGlInfo(){
const GLubyte* name = glGetString(GL_VENDOR); //返回负责当前OpenGL实现厂商的名字
const GLubyte* biaoshifu = glGetString(GL_RENDERER); //返回一个渲染器标识符,通常是个硬件平台
const GLubyte* OpenGLVersion =glGetString(GL_VERSION); //返回当前OpenGL实现的版本号
const GLubyte* gluVersion= gluGetString(GLU_VERSION); //返回当前GLU工具库版本
printf("OpenGL实现厂商的名字:%s\n", name);
printf("渲染器标识符:%s\n", biaoshifu);
printf("OpenGL实现的版本号:%s\n",OpenGLVersion );
printf("OGLU工具库版本:%s\n", gluVersion);
}
int _tmain(int argc, _TCHAR* argv[])
{
glutInit(&argc,(char **)argv);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("vertexArray");
printGlInfo();
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
运行截图: