2D 맵 에디터 Tiled

게임개발로그 2011. 3. 16. 00:34




 1. Tiled 란?
Tiled 는 2차원 타일기반의 게임을 개발하기 위한 범용 맵 에디터로,  사용하기 쉬우며  다양한 게임 엔진과 함꼐 사용할 수 있다.
프리 소프트웨이며, QT 프레임웍을 사용하여 C++로 작성되었다. Tiled 특징은 다음과 같다.  




2. Tiled의 특징 
XML 기반 맵포맷의 범용 맵에디터이다. 
orthogonal 과 isometric 맵을 지원한다
커스템 객체들을 픽셀단위 정밀도로 배치할 수 있다.
undo/redo 와 copy/paste 를 지원한다. 
타일 ,레이어, 오브젝트, 맵에 커스텀 속성을 추가할 수 있다. 
외부에 변경된 타일셋을 자동으로 리로드한다. 
필요할 때, 타일맵의 크기를 변경할 수 있다. 
stamp와 fill brush 같은 호율적인 타일에디팅 도구를 제공한다. 





3. Tiled 설차하기
아래 사이트에서 Tiled를 다운로드하여 설치하자. 
http://www.mapeditor.org/





4. Tiled의 간략한 사용법
애플리케이션을 실행시키면 다음과 같은 인터페이스로 구성되어 있다. 



 Tiled Map Editor를 사용하여 2가지 방식의 맵을 생성할 수 있다. orthogonal 맵은 그림과 같은 하늘에 내려다 보는듯한 시점의 
맵이다. isometric 맵은 고전 RPG인 파랜드 택틱스 같은 게임에서 사용됐던 비스듬한 시점에서 보는 듯한 방식이다.
최초에 2가지 방식 중  타입을 지정하고, 타일 한개의 픽셀 크기와 가로, 세로가 몇개의 타일로 구성되어 있는지 크기를 지정
해서 맵을 생성해한다. 이렇게 생성된 맵파일은 .tmx 라는 확장자를 갖는다. 

우측하단의 Tilesets 은 맵을 구성하기 위해 필요한 타일들로만 구성된다.  타일이미지 샘플이라 생각할 수 있다. 원하는 타일을
선택하여
맵에 타일을 배치할 수 있다.  이와 같이  타일셋 이미지를 하나로 구성해야,  애플리케이션에서 로딩시 메모리를 절약
할 수 있다. 

이렇게 배치된 타일들은 게임에서 의미있게 해석되기 위해서 레이어들로 구분되어 그려진다.  
Background , Objects, Forground, Meta 와  
같은 레이어들은 서로 다른 z 축 값을 가지는데, 위 그림에서는 Background 레이어가
가장 바닥에 그려진다.   
각 레이어들은 동일한 깊이를 갖는 Sprite 집합 이라 생각할 수 있으며, 게임엔진에서 레이어 이름을 통해
레이어 내 Sprite 들을 얻어올 수 있다. 

tileset 에 있는 특정 타일들에는 타일속성을 키와 값 형태로 지정할 수 있으며, 게임엔진에서 특정 타일좌표에 있는 타일의 속성을
읽어와서  
게임 로직을 처리할 수 있다. (예를 들면, 아이템인지 장애물인지 판단할 수 있다.)
위 그림에서 Objects 라는 이름을 갖는 레이어만  오브젝트 레이어이며, 나머지 레이어들은 타일 레이어이다. 이름에서 의미하듯
오브젝트 레이어는  
배경이 아닌,  게임에서 특징한 의미를 갖는 객체들이 위치하는 레이어이다.  게임 로직을 구성하기 위해 사전에 미리 속성정보를 알아야 할 대상을 위해 사용한다. 




File 메뉴에서 새로운 맵을 생성하는 다이얼로그 창이다. 

이 맵은 32 pixel x 32pixel 크기의 타일이 가로, 세로 50개가 배치된 크기를 갖는다. 



Map 메뉴에서 새로운 타입셋을 추가하는 다이얼로그 창이다 




이렇게 생성한 맵을  저장한 파일 TileMap.tmx 의 내용은 다음과 같다.  
Cocos2D 게임엔진에서 이 파일을 읽어서 타일들의 정보들을 가져와 맵을 구성할 수 있다.  
<?xml version="1.0" encoding="UTF-8"?>

<map version="1.0"orientation="orthogonal"width="50"height="50"tilewidth="32"tileheight="32">

<tileset firstgid="1"name="tmw_desert_spacing"tilewidth="32"tileheight="32"spacing="1"margin="1">

<image source="tmw_desert_spacing.png"/>

</tileset>

<tileset firstgid="49"name="meta_tiles"tilewidth="32"tileheight="32"spacing="1"margin="1">

<image source="meta_tiles.png"/>

<tile id="0">

<properties>

<property name="Collidable"value="True"/>

</properties>

</tile>

<tile id="1">

<properties>

<property name="Collectable"value="True"/>

</properties>

</tile>

</tileset>

<layer name="Background"width="50"height="50">

<data encoding="base64"compression="gzip">

   H4sIAAAAAAAAA+3Uyw6CMBCF4a7EhYo7bwmp8ZIoiu//do6Ji4YgaZGWEf/Ft+uEczJkCmNMMTIbse1gpyC7ay+O4hrgJA4Kstd7hGbqMhOD7bGHDZxlH//T42bab1L9pt0V9riYz3epbHlT9vT92CoxEZmYKsjT5OxpIXKx9Hj7cAzdr87tMXSWJpmn+bvHLGAm5T+YR/TaXZWoxyqidcJ9fMsqyPCL2TBOVkEGAAAAAAAAAAAQxxPutT2PECcAAA==

</data>

</layer>

<objectgroup name="Objects" width="50" height="50">

<object name="SpawnPoint"x="77"y="432"/>

</objectgroup>

<layer name="Foreground"width="50"height="50">

<data encoding="base64"compression="gzip">

   H4sIAAAAAAAAA+3UQQ0AAAwCMZzMv8vJINlaBRceJNA17YDHbA9c5+cAAAAAAAAAfln1IckFECcAAA==

</data>

</layer>

<layer name="Meta"width="50"height="50">

<data encoding="base64"compression="gzip">

   H4sIAAAAAAAAA+3UUQqAIBAFQK9k9z9c9CeVZAm2ygwI/iy8VdeU1pM7ViSr9VGzfagZJZ/2bzOVNRH6OZSZ7s7+qSaK3vuIomWWZ5rz2fuomSUnV63/HP8wW2NFPu/I2ViTNwcAAAAAAOvaAbuBPXIQJwAA

</data>

</layer>

</map>




'게임개발로그' 카테고리의 다른 글

2D 맵 에디터 Tiled  (0) 2011.03.16
아이폰 2D 게임엔진 Cocos2D  (1) 2011.03.16
게임 개발 기초  (2) 2011.02.14
게임 시스템 모듈 구성  (0) 2011.02.13
DirectX 와 OpenGL  (0) 2011.02.13
3차원의 기초  (0) 2011.02.13

아이폰 2D 게임엔진 Cocos2D

게임개발로그 2011. 3. 16. 00:09



 아이폰용 2차원 게임엔진으로 많이 사용되고 있는 Cocos2D에 대해서 알아보자. 


1. Cocos2D의 역사 
Cocos2d는 파이썬 기반의 오픈소스 게임 라이브러리로 부터 시작했다. 아르헨티나의 Los Cocos 지역에 50명의 파이썬
개발자가 모여 컨런스를  가졌고,  2008년 1월 6명의 개발자의 의해 오픈소스 게임라이브러리로 태어났다. 이후 아이폰으로
포팅되었으며, 애플의 제약이 해제되면서 앱스토어에 다수의 게임이 cocos2D를 기반으로 개발되었다. 2010년  5월 1.0 버전이
릴리지 되었으며,  계속 발전중이다. 
OpenGL ES는 강력한 그래픽 엔진이지만, 상대적으로 어렵고 생산성이 떨어진다.  cocos2D는 이런 복잡함을 감추고  
상위수준에서 게임 애니메이션을 사용할 수 있도록 지원한다.  또한  Box2D 와 Chipmonk라는 물리엔진을 포함하고 있다.
Box2D는 C++ 언어로 작성되어 생산성이 좋은 반면 상대적으로 참고자료가 적다. Chipmonk는 역사가 더 오래되어 샘플코드 및 참고자료가 더 많다는 장점이 있다.  일반적으로 개발자들은 Box2D를 더 선호한다. 
최상위 수준에서 CCDirector, CCScene, CCLayer, CCSprite 객체를 사용하게 되며, 접두어로  CC를 사용한다.



2. Cocos2D 설치하기 
Cocos2D  템플릿을 Xcode에 설치하는 방법을 알아보자. 



1. Cocos2D 홈사이트에서 최신버전을 다운받는다. 
   http://cocos2d.org





2. 압축을 해제하고, 내부 폴더로 이동하여 터미널에서 다음과 같은 명령을 실행한다. 
./install_template.sh




3. Xcode를 실행하면 아래와 같은 Cocos2D 사용자 템플릿이 추가됐을 것이다. 





3.  Cocos2D 템플릿 삭제하기 
나중에 이 템플릿을 제거하고 싶다면, 다음 경로에서 해당 템플릿을 삭제하면 된다. 
/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Application





4. 2D 게임 개발을 위한 보조툴 
2D 게임 개발을 위한 보조툴인 이차원 맵 에디터인 Tiled와 Sprite 편집기인 Zwoptex 를 Cocos2D 와 사용하면 좀더 쉽게
아이폰용 게임을 개발할 수 있다. 다음 포스팅에서 이 툴들을 사용하는 방법에 대해서 간략히 알아보겠다. 




'게임개발로그' 카테고리의 다른 글

2D 맵 에디터 Tiled  (0) 2011.03.16
아이폰 2D 게임엔진 Cocos2D  (1) 2011.03.16
게임 개발 기초  (2) 2011.02.14
게임 시스템 모듈 구성  (0) 2011.02.13
DirectX 와 OpenGL  (0) 2011.02.13
3차원의 기초  (0) 2011.02.13
  • geek 2012.05.30 19:30 ADDR 수정/삭제 답글

    역시 로그님 ^^ 잘 보고 갑니다.

게임 개발 기초

게임개발로그 2011. 2. 14. 10:57


 

게임을 개발하는 과정은 일반적인 프로그래밍 과정과 크게 다르지 않다.

일반적인 프로그래밍은

 

  •  데이터 추출  
  • 유효성검사  
  • 로직처리
  • 결과출력

 

와 같은 흐름을 따른다.  게임프로그래밍에서 상응하는 흐름은 다음과 같다.

 

  • 입력 이벤트 처리
  • 로직 업데이트
  • 디스플레이 렌더링


이러한 과정을 거쳐 한 프레임이 화면에 출력되며, 프레임의 연속적인 애니메이션이

게임을 이루게 된다.  입력 이벤트 처리 단계에서는 입력장치(키보드, 조이스틱, 터치스크린)를 통해 받은

데이터를 게임에서 의미있는 데이터로 변환한다. 게임로직 업데이트 단계에서는 입력장치로 입력받은 데이터에

근거하여 게임의 다음상태를 계산하게 되고, 물리로직과 렌더링 로직을 업데이트 한다. 디스플레이 렌더링 단계에서는

수정된 데이터를 화면에 드로잉한다. 

 

 

Frame

프레임(frame)이란 애니메이션을 구성하는 낱낱의 한 화면을 의마한다. 조금씩 다른 사물을 포함하는 프레임을 빠르게

교환하여 마치 사물이 움직이는 듯한 애니메이션 효과를 주는 것이다. 프레임율은 fps(frame per second) 단위로 표현하며,

사람의 눈에 끈김없는  애니메이션 효과를 주기위해서는 평균 30 fps 이상이여야 한다. 

 

 

Game Architecture

입력 이벤트 처리 / 로직업데이트 / 디스플레이 렌더링 의 각 단계는 게임의 장르, 동작 플랫폼에 따라서 천차만별로 달라질 수 있다.

입력 이벤트 처리에서 입력받는 데이터는 게임이 동작하는 장치에 따라 조이스틱, 키보드, 터치 스크린 등 다양할 수 있지만, 

입력인터페이스를 통해 사용자가 입력한 데이터를 추출하여 큐에 담는 비교적 단순한 작업이다. 로직업 데이터에서는 입력데이터를

기반으로 게임 세계를 이루는 사물들의 위치와 속성 등을 변화시킨다. 이 때 물리법칙이 적용되는 게임에서는 별도의 물리엔진을 

구성하여 물리엔진을 바탕으로 속성을 변화시킨다. 

 렌더링 단계에서는 변경된 로직을 바탕으로 화면에 드로잉을 수행하는데, 요즘과 같은 화려한 그래픽을 요구하는 게임에서는

상단한 자원과 렌더링 타임을 소모하게 되기 때문에, 스마트 폰과 같은 저사양 디바이스에서는 자원과 로직데이터의 량을 최소화하여

효율적으로 사용하는 전략이 필요하다

 

 

Collision Detection

게임에서 중요한 로직 중 하나가 충돌검사이다.  게임세계에서 묘사되는 사물들은 서로 접촉하게 될 경우 다양한 반응을

보이게 된다. 이러한 것들은 충돌검사를 통해 이루어진다.  다양한 형태를 갖는 사물들이 서로 접촉했는지 검사하는 것은

굉장히 복잡하고 어려운 작업이다.  복작한 형태를 갖는 사물을 단순한 도형으로 간소화하여 대체함으로써 충돌검사를 좀더

쉽게 할수 있다. 사물을 하나의 원으로 표현한다면, 원의 중심들 간에 거리와 원의 반지름의 합을 비교하여 접촉여부를 대략적

으로 검사할 수 있다. 실제로 사물이 접촉하지도 않았는데 충돌효과가 발생하여 동작이 어색함을 유발할 수 도 있다. 이럴 경우에는

단순한 도형으로 1차 충돌 검사를 하고, 1차 충돌검사가 통과할 경우 더 작은 도형(원과 사각형 등)들로 충돌 검사를 하여 정확도를

향상시킬 수 있다. 이러한 검사전략은 게임의 문맥과 사물의 특성에 따라, 결정해야할 문제이다. 

또 하나의 충돌검사에서의 과제는 게임세계에서는 수많은 사물들이 존재하는데 어떻게 두 사물이 접촉했는지 알 수 있는가?이다.

게임 세계에 존재하는 모든 사물든 간에 접촉을 검사해야 할까? 그러면 엄청난 자원소모가 발생할 것이다. 

게임세계를 다수의 일정한 영역으로 구분한다면,  현재 사물이 속한 영역에서 일정범위에 해당하는 영역 내의 사물들로 검사의  

범위를 한정지을 수 있다. 

 

Texture, Sprite

사물을 이루는 정점들의 구조인 Mesh에 이미지가 덧 입혀져 게임화면을 구성한다. 게임에 사용되는 이미지를 별도로 

텍스처라고 부른다. Mesh의 각 정점들과 맵핑되는 텍스처의 점을 맵핑하여 사물에 텍스처를 입힌다. (텍스처링)

게임에서 하나의 텍스처를 로딩하는데는 상당한 자원을 소모하게 되는데, 이를 여러 텍스처를 포함하는 하나의 큰 텍스처를

구성하고 한번에 로딩하여, 원하는 텍스처를 적절한 시점에 불러와 사용하는 전략이 사용된다.

일반적으로 게임에서는 시나리오와 레벨이 있어서, 어느 시점에 어느 자원이 필요하다는 것을 알수 있기 때문에, 필요한 만큼에

자원을 예측하여 한번에 로딩하여 퍼포먼스를 향상시킬 수 있다. 

이렇게 여러 작은 텍스처로 구성된 텍스처를 Atlas(지도책) 또는 Sprite 라고 부른다. (스프라이트는 애니메이션을 위해 조금씩

모양이 다른 이미지들로 구성된 텍스처들을 나타내는 의미가 강한 것 같음)

 

렌더링

화면 렌더링을 위한 표준 그래픽 라이브러리로  윈도우 플랫폼을 지원하는 Direct X와 멀티플랫폼을 지원하는 OpenGL이 있다.   

게임을 이루는 사물의 메시를 모두 프로그래머가 수동으로 그릴 수는 없다.  그래서 3차원 공간상에 사물들에 메시를 그려주고,

텍스처링해주며, 플랫폼에 맞게 메시와 텍스처를 쉽게 익스포트 할 수 있게 지원하는 3D 툴을 사용하게 된다. 

대표적으로  유료툴인 Maya아, 무료툴인 Blender 가 있다. 

 

 

게임루프
다음은 C언어를 사용하여 구현한 간단한 게임루프이다.


#include <stdio.h>

// 게임상태
enumGAME_STATE {
	LOADING, 
	MAIN_MENU, 
	PLAYING, 
	PAUSE, 
	QUIT
};


// 게임종료유무를나타내는변수
int isGameOver = 0;

// 현재 게임 상태
int game_state;

// 사용자입력갑
char userInput;

void event_precess();
void logic_update();
void render();



int main (int argc, const char * argv[]) {
	
	// 게임 초기화
	game_state = LOADING;
	printf("game start\n");
	render();
	
	while (!isGameOver) {
		event_precess();
		logic_update();
		render();
	}
    return 0;
}



// 사용자 입력
void event_precess() {
	
	printf("please input!\n");
	
	// 사용자입력을받음(표준입력)
	userInput = getchar();
	
	// 개행문자(enter)가나올때까지입력버퍼를비움
	while (getchar() != '\n');
	
}

// 로직 갱신
void logic_update() {
	
	switch (game_state) {
			
		caseLOADING:
			
			if (userInput == 'm') {
				printf("move to main menu!\n");
				game_state = MAIN_MENU;
			}
			break;
			
		caseMAIN_MENU:
			
			if (userInput == 'p') {
				printf("let's play game!!\n");
				game_state = PLAYING;
			} else if (userInput == 'q') {
				game_state = QUIT;
				isGameOver = 1;
			}
			break;
			
			
			
		casePLAYING:
			
			if (userInput == 'u') {
				printf("pause game!!\n");
				game_state = PAUSE;
			} else if (userInput == 'e') {
				printf("game over! move to main menu!\n");
				game_state = MAIN_MENU;
			}
			break;
			
		case PAUSE:
			
			if (userInput == 'r') {
				printf("resume game!!\n");
				game_state = PLAYING;
			}
			break;
	}
	
}


// 화면디스플레이
void render() {
	
	switch (game_state) {
		case LOADING:
			printf("loading state...\n");
			break;
			 
		case MAIN_MENU:
			printf("main menu state...\n");
			break;
			
		case PLAYING:
			printf("playing state...\n");
			break;
			
		case PAUSE:
			printf("pause state...\n");
			break;
			
		default:
			printf("quit game! bye bye~\n");
			break;		
	}
}

'게임개발로그' 카테고리의 다른 글

2D 맵 에디터 Tiled  (0) 2011.03.16
아이폰 2D 게임엔진 Cocos2D  (1) 2011.03.16
게임 개발 기초  (2) 2011.02.14
게임 시스템 모듈 구성  (0) 2011.02.13
DirectX 와 OpenGL  (0) 2011.02.13
3차원의 기초  (0) 2011.02.13
  • 아루루 2015.11.15 20:25 ADDR 수정/삭제 답글

    이런거 찾고있었습니다.. 감사합니다ㅠ_ㅠ 구현은 되는지 코딩하면서 확인해볼꼐요!

게임 시스템 모듈 구성

게임개발로그 2011. 2. 13. 23:42



일반적인 게임 시스템의 구조는 다음과 같다.  각 모듈별로 설명하기가...귀차니즘...OTZ

'게임개발로그' 카테고리의 다른 글

아이폰 2D 게임엔진 Cocos2D  (1) 2011.03.16
게임 개발 기초  (2) 2011.02.14
게임 시스템 모듈 구성  (0) 2011.02.13
DirectX 와 OpenGL  (0) 2011.02.13
3차원의 기초  (0) 2011.02.13
3D 렌더링의 종류와 Java  (0) 2011.02.13

DirectX 와 OpenGL

게임개발로그 2011. 2. 13. 23:13


OpenGL은 DirectX 가 개발되기 전인 1992년 3D 그래픽을 주도하던 SGI 사에 개발한 3차원 SDK이다.
초창기 OpenGL을 사용하기 위해서는 고가의 그래픽 가속기를 장착해야만 했다. Microsoft 사는 3차원
렌더링이 저사양 기계에서도 동작할 수 있는 가벼운 SDK로 DirectX를 만들게 되었다.
OpenGL과 DirectX의 우열을 따지는 것은 큰 의미가 없으며, 개발 게임의 목표 플랫폼이 무엇인지를
고려해야 한다.  windows XP에서는 OpenGL1.1을, Vista에서는 OpenGL 1.4를 opengl32.dll 형태로
제공하지만, 최신버전을 지원하는 일에는 매우 소극적이다. 
DirectX는 Mircrosoft 운영체제에서만 작동하며,  많은 부분 OpenGL의 기본원리들을 가져다 사용한다.
하지만 PC 운영체제 시장 대부분을  윈도우가  점유하고 있기 때문에, 게임업계에서는 DirectX가 사실상
표준으로 자리매김하고 있다.
자신이 개발하는 게임의 대상 플랫폼에 적절한 3차원 SDK를 사용하자.

'게임개발로그' 카테고리의 다른 글

아이폰 2D 게임엔진 Cocos2D  (1) 2011.03.16
게임 개발 기초  (2) 2011.02.14
게임 시스템 모듈 구성  (0) 2011.02.13
DirectX 와 OpenGL  (0) 2011.02.13
3차원의 기초  (0) 2011.02.13
3D 렌더링의 종류와 Java  (0) 2011.02.13

3차원의 기초

게임개발로그 2011. 2. 13. 21:05


3차원을 모델링하는 과정은 카메라로 사진을 찍는 과정과 유사하다.  3차원 모델링의 목표는 
3차원상의 모델을 2차원의 모니터 화면으로 변환 또는 투영하는 것이다. 이러한 과정은 카메라에서
볼 수 있는 시야각(화각)을 정의하고, 이 시야각에 들어오는 3차원 상의 물체좌표를 삼각함수와 
간단한 비례공식을 이용하여 2차원상의 좌표로 변환하여 이루어진다. 
수학적으로 표현한 3차원 공간은 데카르트 좌표계를 사용하고, 모니터는 그 특성상 화면좌표계를 사용한다. 
화면 좌표계는 좌측상단이 원점(0,0)이고 아래방향으로 갈수록 y가 증가하지만, 대부분의 게임 3차원 공간에서
사용하는 데카르트 좌표계는 좌측하단을 0,0으로 하여 위로 갈수록 y가 증가한다.  이러한 좌표 차이로 인해
둘 간에 적절한 변환이 이루어져야 한다. 
결국 3차원 엔진이라는 것은 수학적으로 가상의 3차원 공간을 설정하고, 그것에 대한 연산을 하여 2차원으로
변경하고 그리는 과정이다. 끊김없이 부드럽게 보여줘야 하기 때문에, 불필요한 수학연산을 하지않고 최소화
하는 것이 중요하다.  그래서 카메라 시야각에 존재하는 모든 사물을 그리는 것은 비효율적이기 때문에 
잘려진 피라미드 모양의 절두체 공간에 존재하는 사물만을 그린다. 
또 그 공간 안에서 카메라에 가까이 있는 물체가 뒤의 물체를 가리게 될 경우, 뒤 물체는 그릴 필요가 없어진다. 
즉 보이지 않는 면에 대해서는 (화면에) 그릴 필요가 없는 것이다. 절두체의 경계에 걸려있는 물체는 다 그려질
필요없이 보여질 부분만 잘라내어 그리면 좀더 효율적으로 그릴 수 있게된다.  

'게임개발로그' 카테고리의 다른 글

아이폰 2D 게임엔진 Cocos2D  (1) 2011.03.16
게임 개발 기초  (2) 2011.02.14
게임 시스템 모듈 구성  (0) 2011.02.13
DirectX 와 OpenGL  (0) 2011.02.13
3차원의 기초  (0) 2011.02.13
3D 렌더링의 종류와 Java  (0) 2011.02.13

3D 렌더링의 종류와 Java

게임개발로그 2011. 2. 13. 20:55


광선 추적법(ray tracing)
실세계의 빛을 모델링하는 것과 유사하다. 하지만 광원으로부터 우리의 눈으로 오는 광선을 모델링하는 대신, 
반대로 우리 눈이 세계를 바라보는 광선을 모델링한다. 스크린 상의 모든 픽셀에 대한 광선을 모델링하는 것은
산술적으로 많은 비용이 들기 때문에 3차원 그래픽에서 잘 사용되지 않지만, 더 현식적인 결과를 보여준다. 

다각형 모델링(polygon modeling)
실시간 게임과 컴퓨터가 생성한 이미지를 사용하는 영화에서는 3차원 렌더링 기술로 다각형 모델링을 사용한다. 
polygon modeling에서는 3차원 세계를 편평한 다각형으로 해석한다. 다각형은 편평하지만,  3개 이상의 변을 갖는
도형이다.  렌더링 속도가 빠르지만, 둥근 구와 같은 객체는 충분한 개수의 다각형을 사용하지 않으면, 잘 표현이 
되지 않는다. 3차원 가속카드와 같은 하드웨어를 사용하여 속도를 가속화 시킬 수 있다. 

자바 3D 렌더링 
Java3D는 은면제거, 충돌검사, Scene  관리를 처리해주는 하이레벨  API이다. Java3D는 자바로 작성되었지만, 
코어에서 3D  렌더링을 위해 OpenGL과 DirectX를 사용한다. Java3D는 윈도우와 리눅스에서도 사용가능하지만,
라이센스 문제로 SDK 1.4.1에 포함되지 않았으며, Mac OS X에서는 사용할 수 없다. 
반면 자바 OpenGL 바인딩은 상업용 제품을 위해 무료로 사용가능하며, Mac OS X를 포함한 다양한 하드웨어에서
사용가능하다. OpenGL API는 저수준 API이며,  장점을 활용하기 위해서는 3차원 그래픽 프로그래밍에 대해 
더 많은 지식을 필요로한다.  OpenGL 바인딩은 단순히 자바코드를 OpenGL 형식으로 접근할 수 있게한다. 

잘 알려진 자바 OpenGL 바인딩으로 GL4Java(www.jausoft.com/gl4java.html)와 LWJGL(java-game-lib.sourceforge.net)가 
있다. GL4 Java는 AWT, Swing 과 함께 사용할 수 있으며 더 많은 시스템에서 사용가능하지만 업데이트가 되지않아
최신의 OpenGL 기능을 사용할 수 없다. 
LWJGL (Light-Weight Java Game Library)는 OpenGL과 상호작용하기 위해 NIO native 버퍼를 사용하기 때문에 
속도가 더 빠르다. 현재 정기적으로 업데이트 되고 있지만, AWT, Swing과 호환하여 사용할 수 없다. 

소프트웨어 기반의  3차원 폴리곤 렌더러는, 하드웨어 기반의 렌더러 보다 속도가 더 느리지만 큰 스케일의 게임을
위한 솔루션으로 적합하다. 소프트웨어 기반의 3D 렌더러를 구축하는 과정에서 하드웨어 기반 렌더러의 동작방식을
이해하게 되고, 하드웨어 렌더러에도 적용할 수 있는 많은 3D  그래픽 기술을 배울 수 있다. 

'게임개발로그' 카테고리의 다른 글

아이폰 2D 게임엔진 Cocos2D  (1) 2011.03.16
게임 개발 기초  (2) 2011.02.14
게임 시스템 모듈 구성  (0) 2011.02.13
DirectX 와 OpenGL  (0) 2011.02.13
3차원의 기초  (0) 2011.02.13
3D 렌더링의 종류와 Java  (0) 2011.02.13