|
, &charsWritten, infoLog); printf("%s\n",infoLog); free(infoLog); } glUseProgram(programHandle); } void initVBO() { // Create and populate the buffer objects GLuint vboHandles[2]; GLuint positionBufferHandle, colorBufferHandle; glGenBuffers(2, vboHandles); positionBufferHandle = vboHandles[0]; colorBufferHandle = vboHandles[1]; //绑定VBO以供使用 glBindBuffer(GL_ARRAY_BUFFER,positionBufferHandle); //加载数据到VBO glBufferData(GL_ARRAY_BUFFER,12 * sizeof(float), positionData,GL_STATIC_DRAW); //绑定VBO以供使用 glBindBuffer(GL_ARRAY_BUFFER,colorBufferHandle); //加载数据到VBO glBufferData(GL_ARRAY_BUFFER,9 * sizeof(float), colorData,GL_STATIC_DRAW); glGenVertexArrays(1,&vaoHandle); glBindVertexArray(vaoHandle); glEnableVertexAttribArray(0);//顶点坐标 glEnableVertexAttribArray(1);//顶点颜色 //调用glVertexAttribPointer之前需要进行绑定操作 glBindBuffer(GL_ARRAY_BUFFER, positionBufferHandle); glVertexAttribPointer( 0, 3, GL_FLOAT, GL_FALSE, 0, NULL ); glBindBuffer(GL_ARRAY_BUFFER, colorBufferHandle); glVertexAttribPointer( 1, 3, GL_FLOAT, GL_FALSE, 0, NULL ); } void init() { //初始化glew扩展库 glewInit(); initShader(); initVBO(); glClearColor(0.0,0.0,0.0,0.0); //glShadeModel(GL_SMOOTH); } void display() { glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_TEST); ////绘制一个三角形(使用普通方法) //glBegin(GL_TRIANGLES); //glColor3f(0.0f,1.0f,0.0f); //glVertex3f(0.0f,1.0f,0.0f); //glColor3f(0.0f,1.0f,0.0f); //glVertex3f(-1.0f,-1.0f,0.0f); //glColor3f(0.0f,0.0f,1.0f); //glVertex3f(1.0f,-1.0f,0.0f); //glEnd(); //使用VAO、VBO绘制 glBindVertexArray(vaoHandle); glDrawArrays(GL_TRIANGLES,0,3); glBindVertexArray(0); //传递矩阵。 matrixLocation= glGetUniformLocation(programHandle, "Matrix"); glUniformMatrix4fv(matrixLocation, 1, GL_TRUE, matrix); glutSwapBuffers(); glutPostRedisplay(); } int main(int argc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(600,600); glutInitWindowPosition(100,100); glutCreateWindow("GLSL Test : Draw a triangle"); init(); glutDisplayFunc(display); glutMainLoop(); return 0; }
使用的库可至我的资源页下载!
|