동명대학교 게임공학과 강영민 게임프로그래밍 1 강의노트 01.

Slides:



Advertisements
Similar presentations
For Android 이재원.  페이스북 SDK 설치  2 가지 예제 & 소스  API 사용 예제 프로젝트 만들기  Graph API  참고사항 & 사이트.
Advertisements

게임 엔진 -1 차 프로젝트 발표 윤나람.  1. 게임 컨셉  2. 게임의 핵심 메카닉  3. 개발 범위  4. 게임의 스토리  5. 게임의 흐름  6. 일정 목차.
강의 내용 : DirectX 개요 DirectX 9 을 이용한 시각화. 목 차 DirectX 출현 배경 DirectX 현재 버전 DirectX 장점 DirectX 구성요소 DirectX SDK 다운로드 및 설치 DirectX SDK 폴더 구성 및 역할 샘플 코드 브라우저.
미디어 프로그래밍 II 소개.
Windows Programming 담당교수: 이상정 교수님 발표자 : 김인태 학번 :
Efl을 이용한 타이젠 네이티브 웨어러블 앱 만들기
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
소리가 작으면 이어폰 사용 권장!.
윈도우 운영체제와 윈도우 응용 프로그램의 특징을 이해한다.
2장 닷넷 프레임워크.
2016 ITA 1월 강의 C Programming -4일차- 포인터배열 및 이중포인터 정대진 ( )
Lecture 2 MFC and Application Frameworks
GTK+ 프로그래밍 (2) SNSLAB 발표 : 문동규.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
에서 ( 탭 – [인기 다운로드 | 모든 다운로드] ) Visual Studio 2015
제12장 유연한 카메라 클래스 만들기 학기 컴퓨터게임(DirectX).
1. C 언어의 이해와 컴파일러 설치.
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
윤 홍 란 MFC 기초 윤 홍 란
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
8. 객체와 클래스 (기본).
Power Java 제4장 자바 프로그래밍 기초.
Kasimov C언어 세미나 1st.
Hello World Bot Framework
배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다..
1 C 언어의 이해와 컴파일러 설치 프로그래밍 환경을 구축하자!.
OpenGL Project (3D 움직이는 자동차)
가속도 감지센서를 이용한 안드로이드 게임 지도교수님 : 전진우 이동훈.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
GUI Programming - Part 2 ( GUI for Python - wxPython )
Chapter 02. 윈도우 소켓 시작하기.
승강기 가동현황 게시 (홈페이지 및 지하철안전지킴이 App).
Chap07 예외 처리 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리.
Visual C++ Programming
윤 홍 란 4 장 클래스 작성 윤 홍 란
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
C ++ 프로그래밍 시작.
Visual Studio 2010 프로젝트 생성하기 PC화면에서 Visual Studio 2010 아이콘을 더블클릭 하거나
OpenGL Project 조민정 장선례.
Chapter 3 클래스. 최호성.
글사랑 캡션 편집 안드로이드 앱 담당 교수님 전진우 교수님 진세훈 정상기 글사랑.
Computer Graphics OpenGL 설치 및 설정
Part 0 C Program 안산1대학 디지털정보통신과 임 성 국.
OpenGL 프로젝트 K.S.C팀.
제1장 프로그래밍 기초
OpenCV 설치 및 구성 OpenCV
자바의 신 Volume 1 1부(1~3장) 자바의 신 메인 홈 : 자바의 신 페이스북: 자바의 신 문제 풀이 :
무인비행장치 비행 전 준비사항 및 드론 시뮬레이션 연습비행
위모트를 사용한 교통 정리 게임 김순경의 로망 최종 발표! 김영채.
19. 함수 포인터와 void 포인터.
쉽게 풀어쓴 C언어 Express 제2장 프로그램 작성 과정 C Express.
MAIL CLIENT 김창우 윤성훈 이경재.
[INA470] Java Programming Youn-Hee Han
컴퓨터공학실습(I) 3주 인공지능연구실.
CH2. ASP.NET 페이지 분석 HTML ASP ASP.NET 의 차이점.
OpenGL 프로젝트 김병욱 김상진 김성환.
OpenGL project – Easy Flight Simulator
C# 10장. 참조형.
6장 클래스(상속).
OPENGL project 구성원 : 김수민,남현우 OPENGL을 이용한 당구(3구) 구현하기.
안드로이드 앱 분석 팀 기반의 설계 프로젝트 박민재
컴퓨터 계측 및 실습 C++ 기초 영남대학교 기계공학부.
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
argc, argv 의 사용방법 #include <stdio.h>
C.
OpenGL (3D Racing) PROJECT 2011 Dongseo Univ..
두손Order 푸드팩토리 두손Order Ver 1.0 ㈜시소이드.
OpenGL 프로젝트 복학생은 죽지않아!! ( 강유진, 박지혜)
Presentation transcript:

동명대학교 게임공학과 강영민 게임프로그래밍 1 강의노트 01

강의 소개 강의목표 강의내용 강사 교재 읽을 자료 OpenSource 라이브러리를 활용한 게임 제작 능력 습득 실습 및 과제 발표 강사 강영민 교수 (제2정보통신관 309호) 전화: 629-1253 전자우편: ymkang@tu.ac.kr 교재 강사제작 유인물 읽을 자료 Pro Ogre 3D Programming. G. Junker. Apress.

강의 내용 게임 제작 능력 습득 수업 도구 실습 위주의 게임 프로그래밍 3차원 그래픽스 기술 활용 게임 엔진 활용 능력 습득 스마트 폰 프로그래밍 능력 습득 수업 도구 MicroSoft Visual Studio Ogre 3D Xcode (Mac) iPhone Simulator

Ogre3D 관련 사이트 Ogre3D를 학습하기에 유용한 싸이트 http://www.ogre3d.org http://www.ogre3d.org/wiki Tutorials: http://www.ogre3d.org/wiki/index.php/Ogre_Tutorials

설치방법 (MS Windows 수업시) 수업시 사용할 컴파일러 SDK 다운로드 Visual C++ Express 다운로드 Microsoft Visual Studio C++ Express 버전도 무방 SDK 다운로드 OGRE SDK for Visual C++ 2005 HERE. (2003 HERE) Visual C++ Express 다운로드 다운로드  HERE. 설정 다음 웹 사이트를 통해 설정: 설정

설정 가장 간단한 개발 절차 Application wizard 설치 이후 OGRE 설정에 필요한 추가적인 정보 OGRE application wizard 다운로드  here. Application wizard 설치 이후 신규 프로젝트 생성 개발에 필요한 빈 껍질 생성 OGRE 설정에 필요한 추가적인 정보 다음 웹 사이트에서 확인  here.

Ogre3D for Mac OS 다음 절차를 따른다 Go to http://www.ogre3d Prebuilt sdk를 선택한다 OS X 버전 다운로드 OgreSDK 폴더를 임의의 위치로 옮김 Cmake 설치 www.cmake.org/files/v2.8/ CG toolkit 설치 http://developer.nvidia.com/object/cg_download.html OgreSDK/ogre.xcodeproj 로드/빌드 OgreSDK/bin/debug의 SampleBrowser.app 실행

코딩 시작하기 OGRE를 학습하는 가장 좋은 방법 껍데기 프로그램 튜토리얼에 담긴 내용 껍데기 프로그램과 튜토리얼 활용 튜토리얼 링크  tutorials. 껍데기 프로그램 위 링크의 첫 튜토리얼에 포함 튜토리얼에 담긴 내용 다음 슬라이드부터 설명

장면 관리 장면관리자 OGRE에서는 SceneManager 클래스가 특정한 장면 내에 존재하는 모든 객체를 다룸 장면 노드 장면 내의 모델이나 3차원 메쉬 등은 개체(entity)로 생성되며, 장면노드인 SceneNode에 달리게 됨 장면 노드는 움직일 수 있으며, 회전이나 크기 변경이 가능하다. 튜토리얼 1 장면 관리 및 장면 노드를 다루는 튜토리얼 OGRE tutorial 1

카메라, 광원, 그림자 그림자 관련 코드 카메라, 광원, 그림자 관련 튜토리얼 카메라 코드 조명 코드 Ogre3D에서는 유사한 스타일의 명령으로 다룸 관련 튜토리얼 Ogre tutorial 2. 카메라 코드 제85행 조명 코드 제609행 그림자 관련 코드 제614행

지형과 하늘 지형과 하늘에 관한 튜토리얼 하늘 지형관련 코드 Ogre의 지형 tutorial 3 높이맵(heightmap)으로 생성 지형 장면 관리자를 통해 관리 이외에 다른 특별한 장면관리자도 존재 하늘 다양한 텍스처 이용 스카이 박스 관련 코드 제610행 지형관련 코드 제591행

입력 기법 입력 처리의 프레임워크 관련 튜토리얼 tutorial 5 FrameListener 클래스 tutorial 4 다양한 원천으로부터 입력 받음 다소 복잡한 구조 관련 튜토리얼 tutorial 4 Unbuffered input tutorial 5 Buffered input

레이(Ray) 질의 레이 질의 관련 튜토리얼 레이 질의 설정 존재하는 물체를 찾는 기능 새로운 객체를 원하는 위치에 추가할 때에도 유용 종종 이해하기 어려움 관련 튜토리얼 Intermediate tutorial 2. 레이 질의 설정 제124행

물체 찍기(picking) 물체 찍기 관련 튜토리얼 레이 질의 설정 레이 질의의 결과를 활용 마우스 클릭 위치에 있는 객체를 찾아 선택할 때 유용 관련 튜토리얼 Intermediate tutorial 3. 레이 질의 설정 제290행

준비 Ogre3D 설치 AppWizard 설치 Download OGRE SDK for Visual C++ 2005 HERE. (2003 HERE) AppWizard 설치 Ogre3D 응용 프로그램 작성을 위한 간단한 방법 Download it here.

Ogre3D 기초 프로그래밍 환경 Application Wizard 설치 간단한 응용 프로그램 생성해 보기 Microsoft Visual Studio 2003 환경 가정 Application Wizard 설치 (MS VS 2003) Application Wizard 설치 다운로드 받은 파일 압축 해제 Setup.js 실행 MS VS 2003에서 새 프로젝트 생성시 Ogre App 표시됨 간단한 응용 프로그램 생성해 보기

코드의 구조 자동생성된 코드의 구조

코드의 구조 Main 함수 int main(int argc, char *argv[]) { // Create application object Application01App app; SET_TERM_HANDLER; try { app.go(); } catch( Ogre::Exception& e ) { MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL); } return 0;

간단한 샘플 만들기 기초지식 소개 C++에 대한 기초지식은 있다고 가정 Ogre에 대한 지식은 없다고 가정 이 예제에서 다룰 내용 SceneManager SceneNode Entity 객체 Ogre에 익숙해지기

간단한 샘플 만들기 시작하기 AppWizard가 생성된 코드 사용 Application 객체 상속하기 class MyApp : public Application01App { protected : public: MyApp() { } ~MyApp() { protected: void CreateScene(void) { };

자신의 App 객체 사용 int main(int argc, char *argv[]) { MyApp app; try { app.go(); } catch(Ogre::Exception& e) { Error… } return 0;

Ogre 작동 방식 SceneManager 기초 다수 종류의 SceneManager 존재 평면, 빌보드, 광원 모두.. 다수 종류의 SceneManager 존재 BSP 맵 렌더링을 위한 SceneManager 등

Entity와 SceneNodes 기초 Entity SceneNodes 장면 내에서 그릴 수 있는 객체 타입 중 하나 3차원 메쉬로 표현될 수 있는 것 로봇, 물고기… Light, Billboards, Particles, Cameras – Entity가 아님 SceneNodes Entity는 SceneNodes에 부착됨 SceneNode는 자신에게 부착된 모든 것을의 위치와 방향 추적 계층적 모델링 지원 SceneNode의 위치는 부모 SceneNode로부터 상대적 위치

첫 Ogre 프로그램 만들기 CreateScene 구현 Ambient 광원 변경 Entity 생성 mSceneMgr->setAmbientLight(ColourValue(1,1,1)); Entity 생성 Entity *ent1 = mSceneMgr->CreateEntity(“Robot”, “robot.mesh”); “Robot” Entity의 이름 “Robot.mesh” 엔티티 메쉬 모든 Entity는 고유의 이름을 가진다 SceneNode를 생성하여 Attach SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode(“RobotNode”); SceneNode 이름도 unique해야 한다 노드에 entity를 부착 node1->attachObject(ent1);

좌표와 벡터 좌표계 Ogre 벡터 객체 X, z : 수평면 Y: 수직축 X: 왼쪽에서 오른쪽으로 Y: 아래에서 위로 위치, 방향 등을 표현 2, 3, 4차원 벡터 존재 Vector3가 가장 많이 사용됨

다른 객체 추가 위치를 지정해서 추가하기 Entity *ent2 = mSceneMgr->createEntity( "Robot2", "robot.mesh" ); SceneNode *node2 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode2", Vector3( 50, 0, 0 ) ); node2->attachObject( ent2 );

Entity 유용한 Method setVisible isVisible getName getParentSceneNode

SceneNode SceneNode 객체 매우 복잡한 객체 위치, 방향, 크기 등을 다룰 수 있음 Yaw, roll, pitch, resetOrientation, setOrientation getOrientation, rotate… attachObject, detachObject, numAttachedObjects, getattachedObject, detachAllObjects

SceneNode 연습 수정해 보기 RobotNode2가 RobotNode1의 자식 SceneNode *node2 = mSceneMgr->getRootSceneNode()-> createChildSceneNode( "RobotNode2", Vector3( 50, 0, 0 ) ); node1->createChildSceneNode( "RobotNode2", Vector3( 50, 0, 0 ) ); RobotNode2가 RobotNode1의 자식

SceneNode 이동 Node1을 이동하면 node2도 같이 이동 Node2는 node1의 자식이므로 node1->translate( Vector3( 25, 0, 0 ) );

Scale Entity *ent = mSceneMgr->createEntity( "Robot", "robot.mesh" ); SceneNode *node = mSceneMgr->getRootSceneNode() ->createChildSceneNode( "RobotNode" ); node->attachObject( ent ); node->scale( .5, 1, 2 ); ent = mSceneMgr->createEntity( "Robot2", "robot.mesh" ); node = mSceneMgr->getRootSceneNode()-> createChildSceneNode ("RobotNode2", Vector3( 50, 0, 0 ) ); node->attachObject( ent ); node->scale( 1, 2, 1 );

Rotation Entity *ent = mSceneMgr->createEntity( "Robot", "robot.mesh" ); SceneNode *node = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode", Vector3( -100, 0, 0 ) ); node->attachObject( ent ); node->yaw( Degree( -90 ) ); ent = mSceneMgr->createEntity( "Robot2", "robot.mesh" ); node = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode2"); node->pitch( Degree( -90 ) ); ent = mSceneMgr->createEntity( "Robot3", "robot.mesh" ); node = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode3", Vector3( 100, 0, 0 ) ); node->attachObject( ent ); node->roll( Degree( -90 ) );