glEnableClientState(データの種類);頂点かそれともインデックスなどを扱うのかデータの種類を設定します
GL_VERTEX_ARRAY 頂点の配列 GL_INDEX_ARRAY インデックスの配列 GL_NORMAL_ARRAY 法線の配列 GL_TEXTURE_COORD_ARRAY テクスチャの配列 GL_COLOR_ARRAY カラーの配列 GL_EDGE_FLAG_ARRAY エッジフラグの配列
glDrawElements(描画の図形のタイプ , 描画する頂点の数 , データの数の型 , インデックスのポインタ);実例
glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3 , GL_FLOAT , 0 , vx); glDrawElements(GL_TRIANGLES , 3 , GL_UNSIGNED_BYTE , ix);
全体
main.cpp
#include <GL/glut.h> #include <GL/gl.h> #include <GL/glu.h> const GLfloat vx[] = { -1,0,0, 0,1,0, 1,0,0 }; const GLubyte ix[] = { 0 , 1 , 2 }; void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0,0,-5); glColor3f(0,0,1); /* glBegin(GL_TRIANGLES); glVertex3f(-1,0,0); glVertex3f(0, 1,0); glVertex3f( 1,0,0); glEnd(); */ glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3 , GL_FLOAT , 0 , vx); glDrawElements(GL_TRIANGLES , 3 , GL_UNSIGNED_BYTE , ix); glutSwapBuffers(); } void onKeyboard(unsigned char key, int x, int y) { switch (key) { case '\033': exit(0); default: break; } } void onMouse(int button, int state, int x, int y) { switch (button) { case GLUT_LEFT_BUTTON: break; case GLUT_MIDDLE_BUTTON: break; case GLUT_RIGHT_BUTTON: break; default: break; } } void onReshape(int width, int height) { if (height==0) height=1; if (width==0) width=1; glViewport(0,0,width,height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void timer(int value) { glutPostRedisplay(); glutTimerFunc(30 , timer , 0); } void glInit(void) { glClearColor(0.9, 0.9, 0.9, 1.0); glShadeModel(GL_SMOOTH); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize(750,750); int window = glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(onReshape); glutMouseFunc(onMouse); glutKeyboardFunc(onKeyboard); glutTimerFunc(50 , timer , 0); glInit(); glutMainLoop(); return 1; }linux用makefile
SOURCE = main EXTENSIONTYPE = cpp INCLUDE = -I/usr/include/ LIBDIR = -L/usr/X11R6/lib CC = g++ CFLAGS = LIBRARIES = -lglut -lGL -lGLU EXENAME = a OBJ = $(SOURCE).o all: $(OBJ) $(CC) $(CFLAGS) $(INCLUDE) -o $(EXENAME) $(LIBDIR) $(OBJ) $(LIBRARIES) $(SOURCE).o: $(SOURCE).$(EXTENSIONTYPE) $(CC) $(CFLAGS) $(INCLUDE) -c $^ $(LIBDIR) $(LIBRARIES) clean: rm $(OBJ) $(EXENAME)
コメントをかく