제가 만들려고 하는 것은 3차원 공간상에 지구를 만들고, 23.5도 기울인 뒤 회전시키는 것인데요.
라이트 위치를 고정시켜놨는데.. 회전할 때 라이트가 같이 돌아버리네요 ㅠㅠ
혹시나해서 라이트 관련 코드들을 Rotate 위로 전부 옮겨봤는데 .. 역시 결과는 같아요 ㅠㅠ
도중에 제가 .. 주석처리 해놓고 .. 안지운 부분들이 몇몇있는데 신경쓰지 않으셔도 됩니다 ㅠㅠ
-----------------------------------------------------------------------------------------------------------------------
#include "stdafx.h"
#include "GL\glut.h"
#include "GL\gl.h"
#include "GL\glu.h"
#include <math.h>
#define M 32
#define N 64
#define PI 3.141592265358979
int angle =30;
void myIdle(int i)
{
angle+=1;
glutPostRedisplay();
glutTimerFunc(33, myIdle, 0);
return;
}//애니매이션 효과를 주고싶을 때
void myReshape(int w, int h)
{
printf("%d %d",w,h);
return ;
}//정삭 작동 확인 위한 함수
void Render()
{
glClearColor(0,1,1,0.2);//전체 배경색 설정
glClear(GL_COLOR_BUFFER_BIT+GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
//glLoadIdentity();
// -- Perspective ---
gluPerspective(0,1,0.00001,1000);
//glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
float dgray[4]={0.2,0.2,0.2,0.2};
float lgray[4]={0.8,0.8,0.8,0.8};
float white[4]={1,1,1,1};
float position[4]={5,5,-5,2};
glLightfv(GL_LIGHT0, GL_POSITION, position);
glLightfv(GL_LIGHT0, GL_DIFFUSE, white);
glLightfv(GL_LIGHT0, GL_SPECULAR, white);
glLightfv(GL_LIGHT0, GL_AMBIENT, dgray);
glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT, dgray);
glMaterialfv (GL_FRONT_AND_BACK, GL_DIFFUSE, lgray);
glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR, white);
glMaterialfv (GL_FRONT_AND_BACK, GL_SHININESS, white);
glLightf(GL_LIGHT0,GL_SHININESS,1000);
glTranslatef(0,0,1.3);
//glLoadIdentity();
//glTranslatef(0,0,0.0);
glRotatef(-23.5, 0, 0, 1);
glRotatef(angle,0,1,0);
for(int j=0-64; j <= M-64 ; j++)
{
float phi1=PI/2-PI*j/(float)M;
float phi2=PI/2-PI*(j+1)/(float)M;
float y1 = sinf(phi1);
float y2 = sinf(phi2);
float r1 = cosf(phi1);
float r2 = cosf(phi2);
glBegin(GL_TRIANGLE_STRIP);
for(int i=0-32 ; i<=N-32 ; i++)
{
float theta=PI/2-PI*2*i/(float)N;
glNormal3f(r1*cosf(theta),y1,r1*sinf(theta));
glVertex3f(r1*cosf(theta),y1,r1*sinf(theta));
glNormal3f(r2*cosf(theta),y2,r2*sinf(theta));
glVertex3f(r2*cosf(theta),y2,r2*sinf(theta));
}
}
glEnd();
glutSwapBuffers();
}