Vulkan

VBO,VAO、glVertexPointer()、glVertexAttribPointer()

一个三角形顶点数据

float position[9]={
	-0.8f, -0.8f, 0.0f,
	0.8f, -0.8f, 0.0f,
	0.0f, 0.8f, 0.0f};

 


  

一、

	/***单独vao绘制***/
	glEnableClientState(GL_VERTEX_ARRAY);
	glVertexPointer(3, GL_FLOAT, 0,position);/*size:指定每个顶点对应的坐标个数,可取2,3,4  
						   type:指定数组中每个顶点坐标的数据类型:GL_BYTE, GL_SHORT,GL_FIXED,GL_FLOAT;
						   stride:指定连续顶点间的字节排列方式,即<从一个数据的开始到下一个数据的开始,
							所相隔的字节数>,为0表示数组中的顶点被认为按照紧凑方式排列,默认为0;
						   pointer:指定了数组中第一个顶点的首地址,默认值为0。*/
	glDrawArrays(GL_TRIANGLES, 0, 3);
	glDisableClientState(GL_VERTEX_ARRAY);



二、

	/***单独vbo绘制***/
	GLuint vboNum;
	glGenBuffers(1,&vboNum);
	glBindBuffer(GL_ARRAY_BUFFER,vboNum);
	glBufferData(GL_ARRAY_BUFFER,9*sizeof(float),position,GL_STATIC_DRAW);

	glEnableClientState(GL_VERTEX_ARRAY);
	glVertexPointer(3, GL_FLOAT, 0, 0);
	glDrawArrays(GL_TRIANGLES, 0, 3);
	glDisableClientState(GL_VERTEX_ARRAY);

三、

	/***使用glVertexPointer()、vbo和vao传递数据***/
	/***vbo***/
	GLuint vboNum;
	glGenBuffers(1,&vboNum);
	glBindBuffer(GL_ARRAY_BUFFER,vboNum);
	glBufferData(GL_ARRAY_BUFFER,9*sizeof(float),position,GL_STATIC_DRAW);

	/***vao***/
	GLuint vaoNum;
	glGenVertexArrays(1,&vaoNum);
	glBindVertexArray(vaoNum);

	glBindBuffer(GL_ARRAY_BUFFER,vboNum);
	glVertexPointer(3, GL_FLOAT, 0,(void *)NULL);

	glEnableClientState(GL_VERTEX_ARRAY);
	glBindVertexArray(vaoNum);
	glDrawArrays(GL_TRIANGLES, 0, 3 );
	glDisableClientState(GL_VERTEX_ARRAY);

四、

	/***使用glVertexAttribPointer()、vbo和vao传递数据***/
	/***vbo***/
	GLuint vboNum;
	glGenBuffers(1,&vboNum);
	glBindBuffer(GL_ARRAY_BUFFER,vboNum);
	glBufferData(GL_ARRAY_BUFFER,9*sizeof(float),position,GL_STATIC_DRAW);

	/***vao***/
	GLuint vaoNum;
	glGenVertexArrays(1,&vaoNum);
	glBindVertexArray(vaoNum);
	glEnableVertexAttribArray(0);

	glBindBuffer(GL_ARRAY_BUFFER,vboNum);
	glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0,(void *)NULL);

	glBindVertexArray(vaoNum);
	glDrawArrays(GL_TRIANGLES, 0, 3 );

	

posted on 2012-11-15 20:25  Vulkan  阅读(626)  评论(0编辑  收藏  举报

导航