標籤:opengl 查看opengl 版本資訊 oepngl頂點數組
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 <gl/glut.h>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 -- > glglDrawElements(GL_TRIANGLES,3,GL_UNSIGNED_BYTE,array);}//glDrawvoid 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);//gldrawglDrawArrays(GL_TRIANGLES,0,3);}void display(){glClear(GL_COLOR_BUFFER_BIT);//gluseGlArrayElement();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;}運行:
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
看opengl寫代碼(6)glArrayElement,,glDrawElements和glDrawArrays