看opengl寫代碼(6)glArrayElement,,glDrawElements和glDrawArrays

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.