テクスチャマッピング

#include <GL/glut.h>
#include <stdio.h>

#define TEXTURE_HEIGHT 16
#define TEXTURE_WIDTH  16
unsigned char image[TEXTURE_HEIGHT][TEXTURE_WIDTH][4];

void initTexture(void)
{
	int i, j;
	int color;
	
	for (i = 0; i < TEXTURE_HEIGHT; i++) {
		for (j = 0; j < TEXTURE_WIDTH; j++) {	
			color = (((i & 0x01) == 0) ^ ((j & 0x01) == 0) );
			image[i][j][0] = color * 255;
			image[i][j][1] = color * 255;
			image[i][j][2] = color * 255;
			image[i][j][3] = 255;
		}
	}
}
void dispalyTexture(void)
{
	glEnable(GL_TEXTURE_2D);
	glBegin(GL_QUADS);
		glTexCoord2f(0.0, 0.0); glVertex3f(-5.0,-5.0, 0.0);
		glTexCoord2f(0.0, 1.0); glVertex3f(-5.0, 5.0, 0.0);
		glTexCoord2f(1.0, 1.0); glVertex3f( 5.0, 5.0, 0.0);
		glTexCoord2f(1.0, 0.0); glVertex3f( 5.0,-5.0, 0.0);
	glEnd();
	glDisable(GL_TEXTURE_2D);
}

void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
	glTranslatef(0.0, 0.0,-10.0);
	dispalyTexture();
	glFlush();
}

void init(char *name) 
{
	int width = 300, height = 300;
	glutInitWindowSize (width, height);	
	glutCreateWindow (name);
	
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(90.0, (double)width / (double)height, 0.1, 18);

	glClearColor(0.0, 0.0, 0.0, 0.0);
	glEnable(GL_DEPTH_TEST);
	initTexture();
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
}

int main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode (GLUT_DEPTH|GLUT_RGBA);
	init(argv[0]);
	glutDisplayFunc(display);
	glutMainLoop();
	return 0;
}