×
現在地 >> メニュー >> 基本編27 >> 基本編27::まとめコード1

問題

2つの四角形を描画し、片方は表面のカリング、もう一方は裏面のカリングをして
描画せよ。

答え

#include <gl/glut.h>


//----------- プロトタイプ宣言 --------------//
void display();
void reshape(int w, int h);
void timer(int value);
void drawSquare();


//------------- OpenGLの初期設定 ------------------//
void GLUT_INIT()
{
	glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE | GLUT_DEPTH);
	glutInitWindowSize(640,480);
	glutCreateWindow("Culling");
}

void GLUT_CALL_FUNC()
{
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutTimerFunc(0,timer,17);
}

void MY_INIT()
{
	glClearColor(1.0, 1.0, 1.0, 1.0);
	glClearDepth(1.f);
	glEnable(GL_DEPTH_TEST);
	glFrontFace(GL_CCW);//反時計回りが表
	glEnable(GL_CULL_FACE);//カリングON       
}


//------------- メイン関数 ----------------//
int main(int argc, char **argv)
{
    glutInit(&argc,argv);

    GLUT_INIT();
    GLUT_CALL_FUNC();
    MY_INIT();

    glutMainLoop();

    return 0;
}

//------------ ここからコールバック関数 ------------------//
void display()
{
	static int r = 0;
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


	glColor3f(0,1,0);
	glPushMatrix();
	glTranslatef(-2,0,0);
	glRotatef(static_cast<float>(r), 0.0, 1.0, 0.0);
	glCullFace(GL_BACK);//裏面をカリング
	drawSquare();
	glPopMatrix();

	glColor3f(0,1,1);
	glPushMatrix();
	glTranslatef(2,0,0);
	glRotatef(static_cast<float>(r), 0.0, 1.0, 0.0);
	glCullFace(GL_FRONT);//表面をカリング
	drawSquare();
	glPopMatrix();

	glColor3f(1,1,1);

	glutSwapBuffers();
	glCullFace(GL_BACK);//カリングをデフォルトにする
	
	if(++r > 360){
		r= 0;
	}
}


void reshape(int w, int h)
{
	glViewport(0, 0, w, h);

	glMatrixMode(GL_PROJECTION); 
	glLoadIdentity();
	gluPerspective(30.0, w / (double)h, 1.0, 100.0);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	gluLookAt(0.0, 4.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}

void timer(int t)
{
	glutPostRedisplay();
	glutTimerFunc(t,timer,17); //タイマー関数
}

//----------- ここから各種関数 ----------------//
void drawSquare()
{
	glBegin(GL_QUADS);
	glVertex2f(-1,1);
	glVertex2f(-1,-1);
	glVertex2f(1,-1);
	glVertex2f(1,1);
	glEnd();
}

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

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