광원 제어 하기.

Slides:



Advertisements
Similar presentations
LOGO OpenGL Project ( 해 결 사 ) 여태기 이수원 정화영 정유나 여태기 이수원 정화영 정유나.
Advertisements

Chapter 3. 뷰잉(Viewing).
Chapter 4 컬러( COLOR ) 학기 가상현실.
2.1 The Sierpinski Gasket.
CG Programming (Modeling)
CG Programming (Modeling)
Implement of Input and Interaction
163535/A25002 컴퓨터 그래픽스 Chap 6. Shading Copyright ⓒ 2001 N Baek.
OpenGL 실습 12 로봇.
OpenGL Programming (III) 1. Drawing in 3D 2. Manipulating 3D Space
2016 ITA 1월 강의 C Programming -4일차- 포인터배열 및 이중포인터 정대진 ( )
OpenGL 실습 1주차.
OpenGL 시작하기.
OpenGL 발표일 : 발표자 : 조윤혜.
블렌딩 안티앨리어싱, 안개효과 그리고 폴리곤 오프셋
Lecture #7 제 4 장. 기하학적 객체와 변환 (2).
기하학적 객체와 변환.
4장 기하학적 객체와 변환 – OpenGL 변환 학습목표 OpenGL 에서 어떻게 변환을 수행하는지 OpenGL 행렬모드 회전
Chapter 5. 라이팅(Lighting)
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
Lecture #8 제 5 장. 관측(viewing).
7장 디스플레이 리스트.
텍 스 처 매 핑.
음 영 (Shading).
Practice - texture mapping
OpenGL 이란 그래픽스 하드웨어에 대한 소프트웨어 인터페이스 OpenGL의 전신은 실리콘그래픽스사의 IRIS GL
선 택 과 피 드 백.
1장 – 그래픽스 시스템과 모델 2장 – 그래픽스 프로그래밍 3장 – 입력과 상호작용 4장 – 기하학적 객체와 변환 5장 관측
학습목표 7장. 투상변환과 뷰포트변환 평행투상과 원근투상의 차이점을 이해한다. 가시부피 설정방식을 이해한다.
학습목표 7장. 투상변환과 뷰포트변환 평행투상과 원근투상의 차이점을 이해한다. 가시부피 설정방식을 이해한다.
제9장. 모바일 3D 그래픽스 기술.
Department of Computer Engineering
OpenGL Programming (II) 3D Graphics Fundamentals
태양계 시뮬레이션 팀 명: 복학생 강유진 박지혜.
Lesson 3. 입출력과 제어문.
제 2 장. 그래픽스 프로그래밍 : OpenGL 개요/ 예제 프로그램
Sang Il Park Sejong University
음영법 최 수 미
Department of Computer Engineering
AVR - Chapter 15 황 지 연.
Lecture #9 제 6장. 음영법(Shading).
OpenGL 프로젝트 < animate the fire >
계층적, 객체지향적 그래픽스 최 수 미
테 셀 레 이 션 과 이차 곡 면.
Term Project Team Member
Chapter 06. 선택문.
픽셀, 비트맵, 폰트, 이미지 그리기.
Hanyang University Jungsik Park
OpenGL PROJECT 우광식 성기영 서창수 이인주.
프 레 임 버 퍼.
Computer Graphics OpenGL 설치 및 설정
핸드폰 시뮬레이션 김 형 도 송 미 경.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
Draw the basic Geometry Objects
19. 함수 포인터와 void 포인터.
Chapter 4 MPEG-2 부호기 전체 구조와 알고리즘 ( 4.6 ~ 4.10 )
햄스터 미로찾기 광운대학교 로봇학부 박광현.
Chapter 4 컬러( COLOR ).
제어문 & 반복문 C스터디 2주차.
선택 정렬 #define SWAP(x, y, t) {(t) = (x); (x) = (y); (y) = (t);}
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
자바 5.0 프로그래밍.
Fflush 사용이유 및 방법 [이유] 키보드에서 입력된 내용은 입력버퍼에 저장되었다가 Enter 키가 들어오면 프로그램으로 전달됨 이 때 입력버퍼에 있는 Enter 키도 프로그램으로 전달됨 그러므로 아래와 같은 프로그램에서 문자 하나를 입력해도 Enter키도 입력된 것으로.
OpenGL 프로젝트 김병욱 김상진 김성환.
C 코드최적화 세명대학교 AI연구실 양승조.
Department of Computer Engineering
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
AdcRead API 함수 분석 마이크로프로세서.
argc, argv 의 사용방법 #include <stdio.h>
Presentation transcript:

광원 제어 하기

종 류 고정된 광원 독립적으로 이동하는 광원 시점에 따라 광원 움직이기

종 류 고정

종 류 고정 독립 이동

종 류 고정 시점 이동 독립 이동

고정된광원 뷰잉 변화과 모델링 변환을 모두 수행한 후에 라이트의 위치 선정 glViewport(0, 0, (GLsizei) w, (GLsizei) h); //reshape() glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w <= h) glOrtho(-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)h, -10.0, 10.0); else glOrtho(-1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; //initial() glLightfv(GL_LIGHT0, GL_POSITION, light_position);

고정된광원 void init(void){ GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0}; //반사광의 세기 GLfloat mat_shininess[] = {50.0}; //반사계수세기 GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};//광원위치 GLfloat white_light[] = {1.0, 1.0, 1.0, 1.0};//주변광의 세기 GLfloat wlmodel_ambient[] = {0.1, 0.1, 0.1, 1.0};//주변광의 세기 glClearColor(0.0, 0.0, 0.0, 0.0); //배경색 glShadeModel(GL_SMOOTH); /쉐이딩 방법 설정 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); //재질의 반사광 glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);//하이라이트크기 glLightfv(GL_LIGHT0, GL_POSITION, light_position); // 광원의 위치 정의 glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light); // 광원의 주변광 정의 glLightfv(GL_LIGHT0, GL_SPECULAR, white_light); // 광원의 반사광 정의 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, wlmodel_ambient); //전역적 주면광 세기 glEnable(GL_LIGHTING);//조명기능활성화 glEnable(GL_LIGHT0);//광원활성화 glEnable(GL_DEPTH_TEST);}

고정된광원 void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSolidSphere(1.0, 50, 40); glFlush(); } void reshape(int w, int h) glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w <= h) glOrtho(-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)h, -10.0, 10.0); else glOrtho(-1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); glMatrixMode(GL_MODELVIEW);

고정된광원 int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(500,500); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; }

Display()루틴에 넣어 spin만큼 이동 이동하는 광원 광원의 위치를 다시 설정하는 코드를 Display()루틴에 넣어 spin만큼 이동 GLfloat position[] = {0.0, 0.0, 1.5, 1.0}; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslatef(0.0, 0.0, -5.0); glRotated((GLdouble) spin, 1.0, 0.0, 0.0); glLightfv(GL_LIGHT0, GL_POSITION, position); glDisable(GL_LIGHTING); glEnable(GL_LIGHTING); glutWireCube(0.1); glPopMatrix(); glutSolidSphere(0.5, 50, 40); glFlush();

이동하는광원 void init(void) { GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0}; GLfloat mat_shininess[] = {50.0}; GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; GLfloat white_light[] = {1.0, 1.0, 1.0, 1.0}; GLfloat wlmodel_ambient[] = {0.1, 0.1, 0.1, 1.0}; glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_SMOOTH); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light); glLightfv(GL_LIGHT0, GL_SPECULAR, white_light); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, wlmodel_ambient); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); }

이동하는광원 void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSolidSphere(1.0, 50, 40); glFlush(); } void reshape(int w, int h) glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w <= h) glOrtho(-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)h, -10.0, 10.0); else glOrtho(-1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();}

이동하는광원 int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(500,500); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; }

gluLookAt의 변화에 따라 라이트도 변화 시점을 따르는 광원 빛의 위치를 (0,0,0)으로 지정 gluLookAt의 변화에 따라 라이트도 변화 void reshape(int w, int h) { GLfloat light_position[]={0.0, 0.0, 0.0, 1,0}; glViewport(0, 0, (GLint) w, (GLint)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(40.0, (GLfloat)w / (GLfloat) h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLightfv(GL_LIGHT0,GL_POSITION, light_position); }

시점을 따르는 광원 static float s=5, t=0; void init(void) { //GLfloat mat_specular[] = {0.5, 0.5, 0.5, 0.5}; GLfloat mat_shininess[] = {50.0}; GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; GLfloat white_light[] = {0.7, 0.7, 0.7, 1.0}; GLfloat wlmodel_ambient[] = {0.1, 0.1, 0.1, 1.0}; glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_SMOOTH); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); //glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light); glLightfv(GL_LIGHT0, GL_SPECULAR, white_light); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, wlmodel_ambient); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST);}

시점을 따르는 광원 void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); gluLookAt(0, 0, s, t, 0, 0, 0, 1, 0); glutSolidTorus(0.5, 0.85, 10, 20); glFlush(); glutSwapBuffers(); } void reshape(int w, int h) GLfloat light_position[]={0.0, 0.0, 0.0, 1,0}; glViewport(0, 0, (GLint) w, (GLint)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(40.0, (GLfloat)w / (GLfloat) h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLightfv(GL_LIGHT0,GL_POSITION, light_position);

시점을 따르는 광원 void mouse(int button, int state, int x, int y) { switch(button){ case GLUT_LEFT_BUTTON: if(state==GLUT_DOWN){ s = s + 0.0001; t = t + 0.0001; glutPostRedisplay(); } break; default:

시점을 따르는 광원 int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(800,800); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMouseFunc(mouse); glutMainLoop(); return 0; }

질의 응답

감사합니다