Search

'Direct3d Mobile'에 해당되는 글 2건

  1. 2010.07.25 .NET 기반에서 공개소스 게임엔진 포팅하기
  2. 2009.12.26 [d3dm 기초] 1. wm6.x 개발환경 세팅 5

.NET 기반에서 공개소스 게임엔진 포팅하기

Direct3d Mobile 2010. 7. 25. 21:15 Posted by 알 수 없는 사용자

닷넷기반위에서 게임프로그래밍을 하기 위해서 기존네이티브코드로된 엔진을 매나지드방식으로 불러오는 방법을 생각해볼수있습니다. 
저는 오거,일리히트,네뷸러,판다3D등의 공개엔진중에서 일리히트엔진을 선택했는데요.

가장 중요한 이유로 유연성이 가장 좋은 엔진을 선택 했습니다. 오거도 멀티 플랫폼이지않느냐 반문하실수도있겠는데요. 제가 말하는건 멀티 플랫폼뿐만 아닙니다. 언어적으로도 유연해야된다고 봅니다. 일리히트를 표현 하는데 언어는 중요치 않습니다. c++로 구현된 예가 있을뿐 c++기반은 아니기 때문입니다.(영어로 쓰여진 성서책이있을뿐 성서가 영어는 아니죠.) ,irrlicht 는 단순한 게임엔진이 아닌 게임엔진 구조 설계 철학이라고 이해 하시면 됩니다.

이런 철학은 닷넷과 궁합이 잘맞아 떨어집니다.


일리히트엔진 공식 프로잭트 싸이트는 http://irrlicht.sourceforge.net 입니다. 여기서 정식 버전(1.7.1)을 릴리즈하고있으며 현제는 1.8버전을 준비중에 있습니다. 여러 언어와 바인딩한 예가있는데요. 그중에서 닷넷기반 으로 바인딩하는 방법에 대해서는 일리히트 포럼에 가셔셔 먼저 irrlicht lime을 검색하시면 관련 정보를 얻으실수있습니다.

소스포지 프로잭트가 위와같이 진행되고있으며 현재(2010.7) 버전 0.5가 나온상태입니다.

접근방식은 네이티브코드쪽 irrlicht.dll을 중간단계의 매나지드코드dll인 irrlichtlime.dll을 사용해서 닷넷기반의 매나지드코드로 접근 하는 방식을 사용했습니다.
이 방법의 최대장점은 이해하기 쉽고 단순하다는것입니다. 또한 그다지 큰단점도 없는듯합니다.




위의 소스 코드는 네이티브 일리히트코드중에 createDevice함수를 랩핑한 예를 보여줍니다. 



매나지드코드용 랩퍼 dll프로잭트를 만들때는 위와같이 CLR을 사용한다는 옵션을 줍니다.




라임솔루션 디랙토리 모양입니다. irrlichtLime프로 잭트가 랩퍼 입니다. 결과물은 irrlichtLime.dll이 나옵니다.

연습으로 간단하게 화면에 큐브를 돌려보는 예제를 만들어 보겠습니다.
먼저 프로잭트를 추가합니다.


콘솔 어플로 만듭니다.





라임을 컴파일하면 매나지드 랩퍼(irrlichtLime.dll)가 /bin 디랙토리상에 존재하므로 실행파일이 같은 곳에 있도록 지정해줍니다.

리퍼런스를 추가 합니다.


브라우져 탭으로 가셔셔 /bin 디랙토리에 있는 irrlichtLime.dll을 선택합니다.



그리고 소스를 다음과 같이 편집해 줍니다.(program.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            IrrlichtLime.IrrlichtDevice device = IrrlichtLime.IrrlichtDevice.CreateDevice(IrrlichtLime.Video.DriverType.Direct3D9, new IrrlichtLime.Core.Dimension2Di(640, 480));

            IrrlichtLime.Video.VideoDriver driver = device.VideoDriver;
            IrrlichtLime.Scene.SceneManager smgr = device.SceneManager;

            IrrlichtLime.Scene.SceneNode node = smgr.AddCubeSceneNode();

            node.SetMaterialFlag(IrrlichtLime.Video.MaterialFlag.Wireframe, true);
            node.SetMaterialFlag(IrrlichtLime.Video.MaterialFlag.Lighting, false);

            IrrlichtLime.Scene.SceneNodeAnimator anim = smgr.CreateRotationAnimator(new IrrlichtLime.Core.Vector3Df(0, (float)3.14/4, 0));
            node.AddAnimator(anim);
            anim.Drop();

            smgr.AddCameraSceneNode(null, new IrrlichtLime.Core.Vector3Df(0, 10, -50), new IrrlichtLime.Core.Vector3Df(0, 0, 0));

            while (device.Run())
            {
                driver.BeginScene(true, true, new IrrlichtLime.Video.Color(100, 101, 140));

                smgr.DrawAll();

                driver.EndScene();
            }

            device.Drop();
        }
    }
}

실행 결과입니다.



위의 내용은 vs2010 과  .Net프래임웍 4.0 을 사용해서 구현했습니다.

'Direct3d Mobile' 카테고리의 다른 글

[d3dm 기초] 1. wm6.x 개발환경 세팅  (5) 2009.12.26

[d3dm 기초] 1. wm6.x 개발환경 세팅

Direct3d Mobile 2009. 12. 26. 23:06 Posted by 알 수 없는 사용자

<<연재 일시 중단>>

vs 2010 beta2 가 스마트기기 개발환경을 지원하고 있지 않은 관계로 연재를 일시 중단 합니다. 

미리 확인 하지 않고 연제를 시작한 점 사과드립니다.

차후에 스마트기기 개발환경이 지원되는 대로 다시 하도록 하겠습니다.

1.     들어가며

 

안녕하세요.

저는 이번에 vsts2010에 참여하게 된 이석준 이라고 합니다.

앞으로 잘 부탁 드리겠습니다.

이런 공인된 장소를 글을 쓰는 것은 첨이다 보니 무척 부담이 많이 밀려오는 군요.

혹시 잘못된 부분이나 미흡한 부분이 있으면 바로 지적해 주시면 감사하겠습니다.

(제가 국어가 약해서 가끔 안드로메다틱한 문법이 나올 수도 있으니 이해 안 되는 문장은 반드시 지적을 해주시면 감사하겠습니다. .; )

 

VS상의 윈도우모바일(이하 wm) 개발환경은 리눅스나 기타 임베디드 개발환경에 비해 빠르고, 편리하고, 쉽습니다. 기존의 win32api, .Net 코드를 쓸 수 있음은 물론 WTL,MFC등과도 많은 부분의 코드가 호환이 됩니다. 모바일이나 임베디드 에서는 대부분 3D 랜더러로 opengl-es가 많이 사용되는 것으로 알려져 있습니다.  그러나 게임을 만들 때는 direct3d를 많이 사용합니다. Direct3d Mobile 이하 D3dm 을 사용하면 기존의 Direct3d코드를 그대로 활용할 수 있는 장점이 있습니다.  지금부터 약 10회로 나누어서 wm6상에서의 개발환경부터 오픈소스공개 랜더엔진인  irrlicht3dd3dm용 드라이버까지 제작을 해보도록 하겠습니다.

 

2.     준비물

 

wm6sdk , active sync 두 가지가 필요합니다.

여기서 wm6sdk 은 소프웨어 개발킷 이므로 애뮬레이터와 샘플소스코드는 물론 VS용 라이브러리와 클래스위져드관련 환경파일들이 모두 포함된 형태입니다.

요즘 나오는 옴니아2등의 폰에는 6.1버전이라고 되 있는데요 따로 6.1sdk는 존재하지 않습니다. 검색해보시면 DDK가 나와있는 것을 볼 수 있는데요.

DDK sdk가 다른 점은 DDKVS관련 라이브러리 파일제외하고 에뮬레이터와 샘플소스 각종 유틸리티 툴이 업그래이된 것이라고 보시면 됩니다.

요약하자면 wm6sdk 설치후 원하시는 타겟의 DDK나 에물레이터 image를 받아서 먼저 SDK설치하신 다음에 설치 하시면 됩니다.




만약 특정스마트기기의 특정한 기능을 이용하고 싶으시면 이 위에 다시 해당 기기용 sdk를 설치해서 사용하시면 됩니다.

그러면 특정 스마트기기용 추가 API Set 이 설치됩니다.

 

active sync는 스마트기기와 VS개발환경간의 통신수단을 해주는 역할을 하므로 Sdk를 설치 하기 이전에 이것부터 설치를 해주셔야 합니다.


wm6가 설치된 스마트기기는 기본적으로 이미 설치되 있으니 개발 pc에서 설치를 한번 해주시면 됩니다.

 

3.     Hello wm6!!

 

모든 설치가 순조롭게 끝나고 새프로잭트->스마트기기(Smart Device) 항목이 나온다면 설치가 성공한 것 입니다.

그럼 간단한 프로그램부터 만들어 보도록 하죠. 아래와 같이 Smart Device->Win32 Smart Device Project를 선택합니다


 


그 다음 platforms 탭에서 windows mobile6 sdk를 추가 시켜줍니다.



 

자동 생성된
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 의 WM_PAINT에 아래와 같이 DrawText 함수를 추가 해 줍니다.

프로잭트 위져드 덕택에 자동으로 기본프레임웍까지 코드가 작성되서 나오니 편리 하지 않습니까? ^^;

 기존 데스크탑용 어플처럼 빌드후 실행하면 에뮬레이터로 필요한 파일이 전송된후(Deployment 설정 참고) 크로스 컴파일된 어플리캐이션이 실행됩니다.


 

4.    Deployment

데스크톱 어플개발시와는 다르게 프로잭트 속성 페이지에 Deployment라는 항목이 있습니다.

Additional Files항목에서는 스마트기기에서 어플리캐이션실행시 필요한 파일들을 정의해줍니다. (물론 에뮬레이터도 똑같은 스마트 기기로 추상화 됩니다.)

항목을 만드는 양식은 다음과 같습니다.

원본파일이름|원본파일이 있는 경로|파일이 카피될 원격경로|0

Remote Directory 에는 스마트기기에서 실행파일이 실행될 경로를 정해줍니다. 그러나 주의 할점은 어플상에서 파일을 참조할경우 경로는 여기서 지정해준 원격경로가 아닌 저장장치단위의 최상위디랙토리인 My Device/ 기준으로 경로를 잡게됩니다.

참고로 %CSIDL_PROGRAM_FILES% 는 My Device/Program files를 가리킵니다.

실행파일은 Deployment ->Additional Files에서 추가 하지않고 디버깅->Remote Executable 에 정해진 파일이 원격실행 디랙토리에 자동으로 카피가 됩니다.

5.     to be continued…

      다음에는 샘플로 제공된 basicApp를 분석해 간단한 이미지 뷰어를 만들어 보도록 하겠습니다.

'Direct3d Mobile' 카테고리의 다른 글

.NET 기반에서 공개소스 게임엔진 포팅하기  (0) 2010.07.25