이 전에 물체를 회전시켰더니 라이트가 같이 회전하여 질문글일 남겼었는데요 ..
stack을 활용해보라고 하셔서 활용해봤으나.. 라이트는 적용되지만..이번에는 물체가 회전을 안합니다..ㅠㅠ
제가 무엇을 잘못한 것인지 이해가 안되서 질문드립니다. 이게 첫 번째 질문입니다.
세 번째 질문은 texture 파일을 로드하면 '소스파일이 없습니다' 라고 뜨면서 에러가 발생합니다...
이 텍스쳐 파일이 .rbg 포멧입니다. 근데 제가 이것을 연결할..프로그램이 없는데 혹시 그래서 문제가 생긴지 궁금합니다.
코드가 도움이 될꺼같아 첨부합니다. 코드는 지구를 만들고 23.5 기울인 채 일정한 속도로 회전하는 물체를 만드는 것입니다.
------------------------------------------------------------------------------------------------------
#include "stdafx.h"
#include "GL\glut.h"
#include "GL\gl.h"
#include "GL\glu.h"
#include <math.h>
//#include <iostream>
#define M 32
#define N 64
#define PI 3.141592265358979
unsigned int texture=0;
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()
{
glEnable(GL_TEXTURE_2D);
if( texture ==0)
{
glGenTextures(1,&texture);
unsigned char * buf = new unsigned char[2048*2048*3];
FILE* file = fopen("earth.rgb","rb");
fread(buf,3,2048*2048,file);
fclose(file);
glBindTexture(GL_TEXTURE_2D, texture);
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_MODULATE );
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST );
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_NEAREST );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_REPEAT );
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2048, 2048, 0, GL_RGBA, GL_UNSIGNED_BYTE,buf);
}
glClearColor(0,1,1,0.2);//전체 배경색 설정
glClear(GL_COLOR_BUFFER_BIT+GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// -- Perspective ---
gluPerspective(45,1,0.00001,1000);
glLoadIdentity();
glPushMatrix();
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
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();
glRotatef(-23.5, 0, 0, 1);
glRotatef(angle,0,1,0);
glPopMatrix();
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);
glutSwapBuffers();
}