ProgrammingのTipなど

法線配列


main.cpp

#include <GL/glut.h>   
#include <GL/gl.h>	
#include <GL/glu.h>	
//#include "Texture.hpp"

float xrot, yrot, zrot;

//TTexture *tex1;


const GLubyte ix[6][4] = { 
	{0,1,2,3}, {4,5,6,7}, {8,9,10,11},
	{12,13,14,15}, {16,17,18,19},{20,21,22,23}
};

GLfloat normal[6][4][3] ={
 {{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f}},//front
 {{0.0f,0.0f,-1.0f},{0.0f,0.0f,-1.0f},{0.0f,0.0f,-1.0f},{0.0f,0.0f,-1.0f}},//back
 {{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f}},//top
 {{0.0f,-1.0f,0.0f},{0.0f,-1.0f,0.0f},{0.0f,-1.0f,0.0f},{0.0f,-1.0f,0.0f}},//botom
 {{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f}},//right
 {{-1.0f,0.0f,0.0f},{-1.0f,0.0f,0.0f},{-1.0f,0.0f,0.0f},{-1.0f,0.0f,0.0f}}//left
};
GLfloat col[6][4][3] ={
 {{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f}},
 {{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f}}, 
 {{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f}},
 {{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f}},
 {{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f}},
 {{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f}}
};

   
GLfloat vx[6][4][3] ={
  {{-1.0f, -1.0f,  1.0f},{ 1.0f, -1.0f,  1.0f},{1.0f,  1.0f,  1.0f},{-1.0f,  1.0f,  1.0f}}, 
  {{-1.0f, -1.0f, -1.0f},{-1.0f,  1.0f, -1.0f},{1.0f,  1.0f, -1.0f},{1.0f, -1.0f, -1.0f}},
  {{-1.0f,  1.0f, -1.0f},{-1.0f,  1.0f,  1.0f},{1.0f,  1.0f,  1.0f},{1.0f,  1.0f, -1.0f}},
  {{-1.0f, -1.0f, -1.0f},{1.0f, -1.0f, -1.0f},{1.0f, -1.0f,  1.0f},{-1.0f, -1.0f,  1.0f}},
  {{1.0f, -1.0f, -1.0f},{1.0f,  1.0f, -1.0f},{1.0f,  1.0f,  1.0f},{1.0f, -1.0f,  1.0f}},
  {{-1.0f, -1.0f, -1.0f},{-1.0f, -1.0f,  1.0f},{-1.0f,  1.0f,  1.0f},{-1.0f,  1.0f, -1.0f}}
};

   
void display()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();
	glTranslatef(0,0,-5);
	
	glRotatef(xrot,1.0f,0.0f,0.0f);		
    glRotatef(yrot,0.0f,1.0f,0.0f);		
    glRotatef(zrot,0.0f,0.0f,1.0f);	
	

	glEnableClientState(GL_VERTEX_ARRAY);
	glEnableClientState( GL_COLOR_ARRAY );
	glEnableClientState(GL_NORMAL_ARRAY);
	glVertexPointer(3 , GL_FLOAT , 0 , vx);
	glColorPointer( 3, GL_FLOAT, 0, col );
	glNormalPointer(GL_FLOAT, 0, normal);

	glDrawElements(GL_QUADS , 24 , GL_UNSIGNED_BYTE , ix);
	
	glDisableClientState(GL_COLOR_ARRAY);
	glDisableClientState(GL_NORMAL_ARRAY);
	glDisableClientState(GL_VERTEX_ARRAY);
	
	xrot+=1.0f;		                	
    yrot+=1.0f;		                
    zrot+=0.0f;
	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);
}

void glLightingInit()
{
	glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
	glEnable(GL_COLOR_MATERIAL);
	glEnable(GL_LIGHT0);
	glEnable(GL_LIGHTING);
	glEnable(GL_NORMALIZE);
}

void init()
{
	//tex1 = new TTexture("tartan1.bmp");
}

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();
	init();
	glLightingInit();
	glutMainLoop();  
	//delete tex1;
	return 1;
}

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニュー2

開くメニュー

閉じるメニュー

  • アイテム
  • アイテム
  • アイテム
【メニュー編集】

管理人/副管理人のみ編集できます