게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
opengl lighting 질문 드립니다.
게시물ID : programmer_3632짧은주소 복사하기
작성자 : 아안돼
추천 : 0
조회수 : 433회
댓글수 : 4개
등록시간 : 2014/05/30 14:47:34
제가 만들려고 하는 것은 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();
}


int _tmain(int argc, _TCHAR* argv[])
{

glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB+GLUT_DOUBLE+GLUT_MULTISAMPLE);//초기화
glutInitWindowSize(540,480);//window size
glutInitWindowPosition(0,0);//window position
glutCreateWindow("Earth");//window name

glutDisplayFunc(Render);
glutReshapeFunc(myReshape);

myIdle(1);
glutTimerFunc(33,myIdle,0);
glutMainLoop();


return 0;
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호