All pastes #951338 Raw Edit

c++ stuff #2

public text v1 · immutable
·published 2008-03-21 08:12 UTC
rendered paste body
#include <GL/glut.h>

int resx, resy;
int omx,omy = -1;
bool lmb, rmb, mmb = false;
float xRot, yRot = 0;

void initMain(void)
{
	resx = 640;
	resy = 480;
}

void resize(int w, int h)
{
	resx = w;
	resy = h;
	glViewport(0, 0, resx, resy);
}

void drawScene(void)
{
    glDepthFunc(GL_LEQUAL);
    glEnable(GL_DEPTH_TEST);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(45.0f, resx/resy, 0.1f, 100.0f);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glClearColor(0,0,0,1);
	glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
	glTranslatef(0,0,-3);
	glRotatef(xRot,0,1,0);
	glRotatef(-yRot,1,0,0);
	glBegin(GL_TRIANGLES);
		glColor4f(1,0,0,1); glVertex3f(0,0.7,0);
		glColor4f(0,1,0,1); glVertex3f(-0.7,-0.7,0.7);
		glColor4f(0,0,1,1); glVertex3f(0.7,-0.7,0.7);

		glColor4f(1,0,0,1); glVertex3f(0, 0.7, 0);
		glColor4f(0,1,0,1); glVertex3f(-0.7, -0.7, -0.7);
		glColor4f(0,0,1,1); glVertex3f(0.7, -0.7, -0.7);

        glColor4f(1,0,0,1); glVertex3f(0, 0.7, 0);
		glColor4f(0,1,0,1); glVertex3f(0.7, -0.7, -0.7);
		glColor4f(0,0,1,1); glVertex3f(0.7, -0.7, 0.7);

		glColor4f(1,0,0,1); glVertex3f(0,0.7,0);
		glColor4f(0,1,0,1); glVertex3f(-0.7, -0.7, -0.7);
		glColor4f(0,0,1,1); glVertex3f(-0.7, -0.7, 0.7);

        glColor4f(1,0,0,1); glVertex3f(0.7,-0.7,0.7);
		glColor4f(0,1,0,1); glVertex3f(-0.7,-0.7, -0.7);
		glColor4f(0,0,1,1); glVertex3f(-0.7,-0.7,0.7);

		glColor4f(1,0,0,1); glVertex3f(0.7,-0.7,0.7);
		glColor4f(0,1,0,1); glVertex3f(-0.7,-0.7,-0.7);
		glColor4f(0,0,1,1); glVertex3f(0.7,-0.7,-0.7);

	glEnd();
	glutSwapBuffers();
}

void mouseButtons(int button, int state, int x, int y)
{
	switch(button)
	{
		case GLUT_LEFT_BUTTON:
			if(state == GLUT_DOWN)
				lmb = true;
			else if(state == GLUT_UP)
				lmb = false;
			break;
		case GLUT_MIDDLE_BUTTON:
			if(state == GLUT_DOWN)
				mmb = true;
			else if(state == GLUT_UP)
				mmb = false;
			break;
		case GLUT_RIGHT_BUTTON:
			if(state == GLUT_DOWN)
				rmb = true;
			else if(state == GLUT_UP)
				rmb = false;
			break;
	}
}

void mouseMove(int x, int y)
{
	if(omx == -1)
	  omx = x;
	if(omy == -1)
		omy = y;
	if(omx != x)
	{
		xRot += omx - x;
		omx = x;
	}
	if(omy != y)
	{
		yRot += omy - y;
		omy = y;
	}
}

int main(int argc, char** argv)
{
	initMain();
	
	glutInit(&argc, argv);
	glutInitWindowSize(resx, resy);
	glutInitWindowPosition(0,0);
	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH);
	glutCreateWindow("glut");
	
	glutReshapeFunc(resize);
	glutDisplayFunc(drawScene);
	glutIdleFunc(drawScene);
	glutMouseFunc(mouseButtons);
	glutMotionFunc(mouseMove);
	glutMainLoop();
	
	return 0;
}