게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
opengl lighting과 texture 재질문 드립니다!
게시물ID : it_1333짧은주소 복사하기
작성자 : 아안돼
추천 : 0
조회수 : 507회
댓글수 : 0개
등록시간 : 2014/06/02 00:13:09
이 전에 물체를 회전시켰더니 라이트가 같이 회전하여 질문글일 남겼었는데요 ..
stack을 활용해보라고 하셔서 활용해봤으나.. 라이트는 적용되지만..이번에는 물체가 회전을 안합니다..ㅠㅠ
 제가 무엇을 잘못한 것인지 이해가 안되서 질문드립니다. 이게 첫 번째 질문입니다.
( 이전 글 답변자 분 께서 stack push ->  draw 지구 -> 특정 축 23.5도 회전 -> 특정 축 0~360도 회전 -> 초기 상태 stack pop -> 라이트 배치 순서로 해보라고 하셔서 해봤으나... 제가 무엇을 잘못했는지 궁금합니다.)

두 번째 질문은 stack 의 push pop을 자료구조를 공부해서 무슨 의미인줄은 알겠으나..
이것이 opengl에서 의미하는 바를 명확하게 모르겠습니다..
인터넷에 검색해보니 기존값을 저장할 때 push를 쓰고 다시 그 값을 불러올 때 Pop을 쓰라는데 ..
이게 ......코드에서 무슨 의미가 있는지..궁금합니다.
(제가 나름대로 유추해본 것은.. 코드를 보니 기본값을 Push를 통해 저장하고 object를 트랜스폼한다음에 다시 기본 설정값을 Pop하더라구요..
그래서 생각해봤던게 push를 해놓으면...트랜스폼이 적용이 안되는 건가요 ...?ㅠㅠㅠㅠ)


세 번째 질문은 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();


}

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버전
맨위로▲
공지 운영 자료창고 청소년보호