您的位置:首页 > 编程语言

看opengl写代码(8) 使用缓冲区

2015-07-20 23:38 316 查看
不得 “不佩服”我的解决能力!弄了 好几天,不得 不说 在WINDOSW下 写 OPENGL,真坑, 自己 更坑。

书中说到 由于 OPENGL 是 基于 客户端 /服务器 的,所以 在OPENGL 需要 数据的时候 ,都需要 将数据 从 客户端 发送到 服务器。所以 我们 把 数据 放在 服务器中。这种方式 叫做 缓冲区。(其实 自己 也 不太懂。 还是 对OPENGL 不够 理解)。

在写 下面 代码时 遇到 好几个坑:

1.在windosws 下 使用 缓冲区 ,需要 设置 glew ,具体 : http://blog.sina.com.cn/s/blog_858820890100vbys.html

2.逗比的我,在 画 三角形时, 使用了  一条直线上的 三个点。。。

给出代码:

// buffer.cpp : 定义控制台应用程序的入口点。
//
//http://blog.sina.com.cn/s/blog_858820890100vbys.html
#include "stdafx.h"
#include <gl/glew.h>
#include <gl/glut.h>
#pragma comment(lib,"glew32.lib")

#define VERTEX 0
#define INDEX 1
#define NUM_BUFFER 2
GLuint Buffer[NUM_BUFFER];

#define BUFFER_OFFSET(off) ((GLvoid*)(NULL + (off)))

void init(){
glClearColor(0,0,0,1);
}

static GLfloat vertexArray[] = {
1,0,0,0,0,0,
1,0,0,0.8,0.25,0,
1,0,0,0.8,-0.6,0,
1,0,0,-0.25,0.25,0,
1,0,0,-0.5,0.5,0,
1,0,0,-0.75,0.9,0,
};

static GLubyte indexArray[] = {
3,1,2,
2,3,4,
1,2,3,
2,3,5,
1,2,3,
};

void display(){
glClear(GL_COLOR_BUFFER_BIT);
//申请缓冲区
glGenBuffers(NUM_BUFFER,Buffer);
//绑定
glBindBuffer(GL_ARRAY_BUFFER,Buffer[VERTEX]);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,Buffer[INDEX]);
//分配空间以及初始化
glBufferData(GL_ARRAY_BUFFER,sizeof(vertexArray),vertexArray,GL_STATIC_DRAW);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indexArray),indexArray,GL_STATIC_DRAW);
//设置顶点数组
glInterleavedArrays(GL_C3F_V3F,0,BUFFER_OFFSET(0));
glDrawElements(GL_TRIANGLES,15,GL_UNSIGNED_BYTE,BUFFER_OFFSET(0));;
glFlush();
}

int _tmain(int argc, _TCHAR* argv[])
{
glutInit(&argc,(char **)argv);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("缓冲区");
glewInit();
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl 使用缓冲区