|
²¿ÅÙ¤â¼ÁÌ䤷¤Æ¤¹¤¤¤Þ¤»¤ó¡£
²¼µ¤Î¥×¥í¥°¥é¥à¤Ç¤Ï£²Ëç¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò¤Ä¤¯¤ê²óž¤µ¤»¤Æ¤¤¤ë¤Î¤Ç¤¹¤¬¡¢£²¤Ä¤Û¤ÉÌäÂ꤬¤¢¤ê¤Þ¤¹¡£ÆÈ³Ø¤ÇÊÙ¶¯¤·¤Æ¤¤¤ë¤Î¤Ç¤Ê¤«¤Ê¤«ÌäÂ꤬²ò·è¤Ç¤¤Ê¤¤¤¿¤áǺ¤ó¤Ç¤¤¤Þ¤¹¡£
¡¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤¿½Ö´Ö¤Ë²óž¤¬µ¯¤³¤Ã¤Æ¤·¤Þ¤¦¤Î¤òľ¤·¤Æ¤â¤é¤¤¤¿¡¡¤¤¤Î¤Ç¤¹¡£
¢¤æ¤¯¤æ¤¯¤Ï¡¢¤³¤Î£²¤Ä¤Î¥×¥í¥°¥é¥à¤ò¥ª¥Ö¥¸¥§¥¯¥È¤ò¥¯¥ê¥Ã¥¯¤·¤¿¤é²ó¡¡Å¾¤¹¤ë¤è¤¦¤Ë¤·¤¿¤¤¤Î¤Ç¤¹¤¬º£¤Î¥×¥í¥°¥é¥à¤Î½ñ¤Êý¤Ç¤ÏÆñ¤·¤¤¤Ç¤¹¡©
¡¡Î㤨¤Ð¡¢¥ª¥Ö¥¸¥§¥¯¥È¤òÆó¸Äforʸ¤Ç½ñ¤¤¤Æ¤¤¤ë¤Î¤È¤«¤Ê¤É¡£
#include <stdio.h>
#include <GL/glut.h>
#include <stdlib.h>
GLdouble vertex[][3] = {
{ -0.5, 0.0, 0.0 },
{ 0.5, 0.0, 0.0 },
{ 0.5, 0.0, 2.0 },
{ -0.5, 0.0, 2.0 },
};
GLdouble color[][3] = {
{ 1.0, 0.0, 0.0 },
{ 0.0, 1.0, 0.0 },
{ 0.0, 0.0, 1.0 },
{ 1.0, 1.0, 0.0 },
{ 1.0, 0.0, 1.0 },
{ 0.0, 1.0, 1.0 }
};
GLdouble normal[][3] = {
{ 0.0, 0.0,-1.0 },
{ 1.0, 0.0, 0.0 },
{ 0.0, 0.0, 1.0 },
{-1.0, 0.0, 0.0 },
{ 0.0,-1.0, 0.0 },
{ 0.0, 1.0, 0.0 }
};
int b,k,j;
GLfloat light0pos[] = { 5.0, 3.0, 5.0, 1.0 };
GLfloat light1pos[] = { 5.0, 3.0, 0.0, 1.0 };
GLfloat green[] = { 0.0, 1.0, 0.0, 1.0 };
///////////**ºÆÉÁ²è**/////////////
void idle(void)
{
glutPostRedisplay();
}
//////////////**ʪÂÎ**//////////////
void display(void)
{
int i=1,j,k;
static int r = 0;
while(i){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslated(-0.8, 0.0, 0.0);
gluLookAt(2.5, 10.0, 20.0, 2.5, 1.0, 0.0, 0.0, 3.0, 1.0);
glLightfv(GL_LIGHT0, GL_POSITION, light0pos);
glLightfv(GL_LIGHT1, GL_POSITION, light1pos);
for(j = 0; j < 6; ++j){
glColor3dv(color[j]);
glNormal3dv(normal[j]);
}
for(k = 1; k <= 2; k++){
glPushMatrix();
glRotated((double)r, 0.0, 0.0, 0.5);
glBegin(GL_QUADS);
glVertex3dv(vertex[0]);
glVertex3dv(vertex[1]);
glVertex3dv(vertex[2]);
glVertex3dv(vertex[3]);
glEnd();
glBegin(GL_QUADS);
glVertex3dv(vertex[0]);
glVertex3dv(vertex[3]);
glVertex3dv(vertex[2]);
glVertex3dv(vertex[1]);
glEnd();
glPopMatrix();
glTranslated(1.5, 0.0, 0.0);
}
glutSwapBuffers();
/* °ì¼þ²ó¤Ã¤¿¤é²óž³Ñ¤ò 0 ¤ËÌ᤹ */
++r;
if (r >= 180){
r = 0;
i = 0;
}
}
}
//////////////**¥µ¥¤¥ºÊѹ¹**////////////////
void resize(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(15.0, (double)w / (double)h, 1.0, 100.0);
glMatrixMode(GL_MODELVIEW);
}
//////////////////**¥Þ¥¦¥¹ÀßÄê**////////////////////
void mouse(int button, int state, int x, int y)
{
switch (button) {
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN) {
/* ¥¢¥Ë¥á¡¼¥·¥ç¥ó³«»Ï */
glutIdleFunc(idle);
}
else {
/* ¥¢¥Ë¥á¡¼¥·¥ç¥óÄä»ß */
glutIdleFunc(NULL);
}
break;
case GLUT_RIGHT_BUTTON:
break;
default:
break;
}
}
///////////////**½é´ü²½**/////////////////////////
void init(void)
{
glShadeModel(GL_SMOOTH);
glClearColor(1.0, 1.0, 1.0, 0.0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glLightfv(GL_LIGHT1, GL_DIFFUSE, green);
glLightfv(GL_LIGHT1, GL_SPECULAR, green);
}
/////////////////////**main**////////////////////////
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(1000,600);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
glTranslated(1.5, 0.0, 0.0);
glutReshapeFunc(resize);
glutMouseFunc(mouse);
init();
glutMainLoop();
return 0;
}
|