슬라이드 1

Similar documents
<4D F736F F F696E74202D20C1A63037B0AD202D20B1A4BFF8B0FA20B1D7B8B2C0DA>

슬라이드 1

(Microsoft PowerPoint - \301\24608\260\255 - \261\244\277\370\260\372 \300\347\301\372)

슬라이드 1

(Microsoft PowerPoint - \301\24613\260\255 - oFusion \276\300 \261\270\274\272)

<4D F736F F F696E74202D20C1A63130B0AD202D20C1F6C7FCB0FA20C7CFB4C3C0C720B7BBB4F5B8B5>

슬라이드 1

슬라이드 1

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

Microsoft PowerPoint - lecture16-ch6

Microsoft PowerPoint - lecture15-ch6.ppt

슬라이드 1

(Microsoft PowerPoint - \301\24615\260\255 - \303\346\265\271\303\263\270\256)

Łø·ŸÕ=¤ ¬ ÇX±xÒ¸ 06 - Èpº– 1

슬라이드 1

슬라이드 1

슬라이드 1

<4D F736F F F696E74202D20C1A63137B0AD202D20C1F6C7FCC3E6B5B9C3B3B8AE>

유니티 변수-함수.key

PowerPoint Presentation

슬라이드 1

<4D F736F F F696E74202D20C1A63134B0AD202D20BBE7BFF8BCF6BFCD20C8B8C0FC>

K&R2 Reference Manual 번역본

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

Microsoft PowerPoint - 07-Data Manipulation.pptx

Microsoft PowerPoint - lecture13-ch6.ppt [호환 모드]

(Microsoft PowerPoint - lecture13-ch6.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint Presentation

PowerPoint Presentation

ThisJava ..

C++ Programming

설계란 무엇인가?

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

PowerPoint Template

(Microsoft PowerPoint - \301\24611\260\255 - \276\326\264\317\270\336\300\314\274\307)

PowerPoint Presentation

PowerPoint 프레젠테이션

Contents. 1. PMD ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 2. Metrics ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 3. FindBugs ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 4. ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ

슬라이드 1

DBPIA-NURIMEDIA

Microsoft PowerPoint - Lec06.ppt [호환 모드]

C++ Programming

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

<353120C0CCB8E9C0E72D4E504320C0CEB0F820C1F6B4C9C0BB20C0A7C7D120B9ABB8AEC1FEB1E220B1B8C7F62E687770>

Microsoft Word - cg07-midterm.doc

OCW_C언어 기초

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

3D MAX + WEEK 9 Hansung Univ. Interior Design

Microsoft PowerPoint - Week04_DirectX9 프로그래밍의 기초2.pptx

adfasdfasfdasfasfadf

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - C++ 5 .pptx

슬라이드 1

Microsoft PowerPoint - Java7.pptx

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Microsoft Word - cg12-midterm-answer

Microsoft PowerPoint - 04-Model Class.pptx

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

쉽게 풀어쓴 C 프로그래밍

UI TASK & KEY EVENT

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

8. 클래스 D는클래스 A, 클래스 B, 클래스 C로부터상속받아맊들고싶다. 아래빈칸을채우시오. ( 대소문자주의하시오 ) class D { ; Student s; 11. 다음프로그램의실행결과는? 9. 다음프로그램의실행결과는? class A{ A(){cout << " 생성

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - chap05-제어문.pptx

UI TASK & KEY EVENT

C프로-3장c03逞풚

Microsoft PowerPoint - Chapter 6.ppt

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint - GameProgramming23-PixelShader.ppt

chap 5: Trees

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

Chap 6: Graphs

Design Issues

소프트웨어공학개론 강의 11: UML 코드매핑 최은만동국대학교컴퓨터공학과

Lab 3. 실습문제 (Single linked list)_해답.hwp

초보자를 위한 C# 21일 완성

PowerPoint Presentation

PowerPoint Template

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

Open GL

슬라이드 1

Microsoft PowerPoint - ch07 - 포인터 pm0415

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Cluster management software

Microsoft PowerPoint - lecture11-ch4

서피스셰이더프로그램 셰이더개발을쉽게! Thursday, April 12, 12

Microsoft Word - cg07-final.doc

PowerPoint Presentation

서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 (1/7) [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 답 안지 공간이 부족할 경우, 답안지 뒷면에 기술 하고, 해당

JUNIT 실습및발표

Microsoft PowerPoint - 13prac.pptx

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Transcription:

한국산업기술대학교 제 10 강광원 이대현교수

학습안내 학습목표 오우거엔진의광원을이용하여 3D 공갂에서광원을구현해본다. 학습내용 평면메쉬의생성방법광원의종류및구현방법

광원의종류 : 주변광원 주변광원 (Ambient Light) 동일한밝기의빛이장면안의모든물체의표면에서일정하게반사되는것. 공갂안에존재하는빛의평균값이론적인광원

광원의종류 : 지향광원 지향광원 (Directional Light) 한방향으로무한히뻗어나가는빛. 빛이물체면을향하여일정한방향으로진행. 거리에상관없이특정한한방향 ( 벡터 ) 에대해서빛의세기가일정하게주어진다 방향이중요 태양을흉내낼때주로쓰임. OGRE 엔진 : LT_DIRECTIONAL

광원의종류 : 점광원 점광원 (Point Light) 공갂안의한점에서모든방향으로동일하게뻗어나가는빛. 백열젂구를모델링. 광원과물체표면과의거리의제곱에비례하여밝기가약해짐 ( 감쇄 : attenuation) 거리가중요 OGRE 엔진 : LT_POINT

광원의종류 : 점적광원 점적광원 (Spot Light) 정해진위치와범위만비추는광원. 일종의점광원이지만, 모든방향으로만퍼지는것이아니고, 특정방향으로지정된각도만큼빛이퍼져나감. 무대조명을모델링. 거리에따라서빛의세기가약해짐. OGRE 엔진 : LT_SPOTLIGHT

실습 Light 다양한광원설정

class LectureApp void _drawgroundplane(void) { Plane plane( Vector3::UNIT_Y, 0 ); MeshManager::getSingleton().createPlane( "Ground", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, 500,500, 1,1, true,1,2,2, Vector3::NEGATIVE_UNIT_Z ); 실습 } Entity* groundentity = mscenemgr->createentity("groundplane", "Ground" ); mscenemgr->getrootscenenode()->createchildscenenode()->attachobject(groundentity);

실행결과

평면메쉬의생성 생성방법 먼저평면을생성하고 (Plane 클래스사용 ), 그리고이것을메쉬로변환한다 (MeshManager 클래스사용 ) 평면의생성 두개의정보가필요 : 평면의법선벡터 (normal vector) 및평면과원점의거리 Plane plane(vector3::unit_y, 0); Y X Z

메쉬의생성 MeshManager 클래스 프로그램에서로드된모든메쉬들을관리하는클래스 메쉬이름. MeshManager::getSingleton().createPlane( "Ground", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, 500,500, 1,1, true,1,2,2, Vector3::NEGATIVE_UNIT_Z ); 평면정보. 너비 : 500 높이 : 500

엔터티와장면노드의생성 앞에서만든메쉬의이름. Entity* groundentity = mscenemgr->createentity( "GroundPlane", Ground" ); mscenemgr->getrootscenenode()->createchildscenenode()->attachobject(groundentity); 장면노드의생성 장면노드에엔터티배치.

class LectureApp void _drawgroundplane(void) { Plane plane( Vector3::UNIT_Y, 0 ); MeshManager::getSingleton().createPlane( "Ground", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane, 500,500, 1,1, true,1,10,10, Vector3::NEGATIVE_UNIT_Z ); 실습 Entity* groundentity = mscenemgr->createentity("groundplane", "Ground" ); mscenemgr->getrootscenenode()->createchildscenenode()->attachobject(groundentity); groundentity->setmaterialname("kpu_logo"); }

텍스쳐입히기 setmaterialname() 함수사용 Entity* groundentity = mscenemgr->createentity("groundplane", "Ground" ); mscenemgr->getrootscenenode()->createchildscenenode()->attachobject(groundentity); groundentity->setmaterialname("kpu_logo"); material KPU_LOGO { technique { pass { texture_unit { texture KPU_LOGO.gif } } } } resource.zip 내의 KPU_LOGO.material 에위치. KPU_LOGO.gif 를타일이미지로사용.

텍스쳐가입혀진평면

타일갯수의변화 (10x10)

class LectureApp - 광원설정추가 void _setlights(void) { mscenemgr->setambientlight(colourvalue(0.0f, 0.0f, 0.0f)); 실습 mlightd = mscenemgr->createlight("lightd"); mlightd->settype(light::lt_directional); mlightd->setdirection( Vector3( 1, -2.0f, -1 ) ); mlightd->setvisible(false); mlightp = mscenemgr->createlight("lightp"); mlightp->settype( Light::LT_POINT ); mlightp->setposition( Vector3(-250, 50, 250) ); mlightp->setvisible(false); } mlights = mscenemgr->createlight("lights"); mlights->settype( Light::LT_SPOTLIGHT ); mlights->setdirection(ogre::vector3::negative_unit_y); mlights->setposition( Vector3( 250, 900, 250) ); mlights->setspotlightrange( Degree(10), Degree(80)); mlights->setvisible(false);

class InputController 광원설정조작추가 bool keypressed( const OIS::KeyEvent &evt ) { switch(evt.key) { case OIS::KC_A: { static float a = 0.0f; a = (a >= 1.0f)? 0.0f : a + 0.1f; mscenemgr->setambientlight(colourvalue(a, a, a)); } break; case OIS::KC_D: mlightd->setvisible(!mlightd->getvisible()); break; case OIS::KC_P: mlightp->setvisible(!mlightp->getvisible()); break; case OIS::KC_S: mlights->setvisible(!mlights->getvisible()); break; } 실습 } return true;

PlayState.cpp 그림자추가 void _setlights(void) { mscenemgr->setambientlight(colourvalue(0.0f, 0.0f, 0.0f)); mscenemgr->setshadowtechnique(shadowtype_stencil_additive);... 중략... } void _drawgroundplane(void) {... 중략... groundentity->setmaterialname("kpu_logo"); groundentity->setcastshadows(false); } void go(void) {... 중략... professoryaw->attachobject(entity); entity->setcastshadows(true); } 실습

Directional Light

Point Light

Spot Light

모든광원을 ON

광원의생성 Light 클래스 SceneManager::createLight(): 광원생성 Light::setType(): 광원종류설정 Light::setPosition(): 광원의위치설정 Light::setDirection(): 광원의방향설정 광원객체를장면노드에소속시키면, 광원을이동하는것이가능함. 캐릭터를따라다니는광원을구현할수있슴. 광원의생성 mlightd = mscenemgr->createlight("lightd"); mlightd->settype(light::lt_directional); mlightd->setdirection( Vector3( 1, -2.0f, -1 ) ); mlightd->setvisible(false); 광원의종류를설정. 지향광원으로설정함. 광원 ON/OFF 광원의방향설정.

점광원및점적광원의생성및설정 mlightp = mscenemgr->createlight("lightp"); mlightp->settype( Light::LT_POINT ); mlightp->setposition( Vector3(-250, 50, 250) ); mlightp->setvisible(false); mlights = mscenemgr->createlight("lights"); mlights->settype( Light::LT_SPOTLIGHT ); mlights->setdirection(ogre::vector3::negative_unit_y); mlights->setposition( Vector3( 250, 900, 250) ); mlights->setspotlightrange( Degree(10), Degree(80)); mlights->setvisible(false); 점광원의위치결정. 점적광원의확산각도 ( 안쪽각도, 바깥쪽각도 ) 설정. 안쪽각도는 Direct3D 에만적용가능. OpenGL 에서는 0 도로간주.

class LectureApp 광원색상설정 void _setlights(void) {... 중략... mlightd->setdiffusecolour(1.0f, 0.0f, 0.0f); mlightp->setdiffusecolour(0.0f, 1.0f, 0.0f); mlights->setdiffusecolour(0.0f, 0.0f, 1.0f); } 실습

광원색상혼합

학습정리 광원의종류 주변광원 / 지향광원 / 점광원 / 점적광원 광원의생성및설정 SceneManager::createLight(): 광원생성 Light::setType(): 광원종류설정 Light::setPosition(): 광원의위치설정 Light::setDirection(): 광원의방향설정