이사가요 by 신동호

사실 이사간지는 좀 댔는데 셋팅이 오래걸려서-_-; 너무나도 정든 이글루스를 뒤로하고 새로운 사이트로 이사를 가게 되었습니다. 보다 적극적인 문서화와 공유를 위해서 이글루스 보다 더 편한 시스템이 필요했기 때문입니다.

이 사이트에 있던 모든 아티클은 

aronze.com/wiki

에서 만나실 수 있으며 앞으로도 발전시켜 나아갈 예정입니다. 관심있는 분들은 문서화에 동참해 주시면 감사하겠습니다.

참고로, 저의 개인 블로그는 aronze.com 입니다:D 

[ogre3d] Build with CMake by 신동호

본 문서는, Ogre3d 최신 버전인 1.7(Cthugha) 에서 바뀐 빌드 시스템에 대하여 설명합니다.

원본: http://www.ogre3d.org/wiki/index.php/Building_With_CMake

** 2009.10.31 다시 받아서 돌려보니 오거 실행 방식이 바뀌어서 한참 어리둥절 했네요; 아래 내용은 CMake 에 대한 내용이라 여전히 동일한데요, Sample/Common/$(ConfigurationFile) 폴더에 있어야 할 예제들이 가장 상위 bin 에 몽땅 dll 형태로 들어가 버렸네요. 여러 예제를 하나에 프로그램에서 보여주기 위해 예제 자체를 플러그인 형태로 만들고 각 예제를 한 프로그램에서 실행해 볼 수 있도록 SampleBrowser.exe 를 제공하게 되었습니다.
이어지는 내용

[짧은 생각]변수, 파일명 컨벤션에 관하여 by 신동호

프로그래밍을 하다보면 변수, 파일명을 어떤 방식으로 붙일 것인지 고민이 될 때가 많습니다. 저는 cpp 를 주력으로 사용하고 있습니다만, 오래전에 헝가리안 표기법은 버리고 자바와 같은 방식의 병확하면서도 규칙있는 단순화, 풀 네임으로 된 변수, 파일명을 즐겨 사용하고 있습니다. cpp 를 사용하시면서 컨벤션에 고민이 많으신 분은 빨간책 시리즈의 c++ 코딩 규칙이라는 도움이 될 것 같습니다.

오늘 이야기 하고 싶은 부분은, "효율" 과 "규칙/자연스러움" 에 대한 내용입니다.

HardwareConfiguration
ScreenConfiguration

과 같은 프로퍼티가 있다고 할 때, 저의 의견은 코딩이 아무리 읽기 쉬워야 한다고 자연어를 굳이 고집할 필요가 없다는 부분입니다. 즉,

ConfigurationHardware
ConfigurationSoftware

와 같은 방식이 더욱 효율적이라는 것이죠. 물론 이 방법을 사용하면서 가독성은 상당히 줄었습니다만, 대신 "정렬" 이 되어 버렸습니다. "정렬" 은 대부분의 OS/IDE 가 기본으로 지원하는 기능으로 이 기능을 사용하면 구조 단위(<->언어 단위)의 가독성을 획기적으로 늘릴 수 있다고 생각합니다.

[Terrain paper] Real-Time Generation of Continuous Levels of Detail for Height Fields by 신동호

fetch 의 단위와 카메라와 fetch 의 거리의 비율에 의해 유동적으로 LOD 를 처리하는 방법(CLOD)에 대해 이야기 하고 있습니다.


[Terrain LOD] Runtime Regular-Grid Algorithms - ROAM(1997~) by 신동호


[LOD] SIGGRAPH 2002 Course Materials by 신동호

이 똑똑한 집단이 1년후 얼마나 발전했을까요:D

참조 문서: http://lodbook.com/course/2002/
이어지는 내용

[LOD] SIGGRAPH 2001 Course Materials by 신동호

terrain 관련 궁금한 내용 중 LOD(Level of Detail) 에 대해 먼저 살펴보고 있습니다. 아래 논문들은 좀 오래된 문서지만 역사의 흐름도 알아볼 겸 보고 있습니다.

참조 사이트: http://lodbook.com/course/2001/


이어지는 내용

terrain 연구 시작 by 신동호

오래 전부터 terrain 엔진에 대해 궁금한 것들이 많았는데, 이번 기회에 관련된 논문과 정보들을 분석해 보기로 마음을 먹었습니다.
이어지는 내용

30 Frame per Second vs 60 Frame per Second by 신동호


[TTS] Text to Speech by 신동호

TTS(Text to Speech) 란 문자를 목소리로 변환하는 기술을 말합니다. 뉴스 같은 걸 웹에서 긁어서 mp3 로 변환, 자동차에서나 운동하면서 들으면 좋을 것 같아 서칭을 좀 해봤는데 마땅한 솔루션이 없군요. 우리나라의 경우 voiceware 라는 곳의 품질이 좋아 구입하려했으나 불법 복제등의 이유로 기업형 판매만 하고 있고, 외국의 경우 http://free-translator.imtranslator.net/speech.asp?dir=ko 사이트에서 판매를 하고 있으나, 왜인지 한글 TTS 는 판매를 하지 않네요; 이런 기술이 대중에게 널리 사용되지 못하고 있다는 것이 안타깝네요.


[Windows7] chm 파일 보는 방법 by 신동호

DirectX10, 11 을 공부해보고 싶었던 참에 이번에 대학생 할인가 구매 찬스가 있어 windows7 을 구입하게 되었습니다. 다행히도 대학교 이메일만 살아 있으면 구매가 가능하더군요; 아무튼 정말 저렴한 가격 39900원에 10년간 미뤄뒀던 OS 구매의 꿈을 이루었습니다:D

하지만 기쁨도 잠시.. chm 도움말 문서가 블락이 되어 열리지 않더군요. 다음은 windows7 을 설치한 후 chm 파일이 보이지 않는 경우 대처 방법입니다.

1. 정확한 내용은 아니지만 단순 chm 은 보안상의 문제가 있어 윈도 어떤 버전에서 부턴가 방식이 약간 바뀐 것으로 알고 있습니다. windows7 에서도 이런 내용 때문인지 기본적으로 열람할 수 없도록 블락을 거는 것이 기본 설정으로 되어 있는 것 같습니다.
2. 본론으로 들어가서 열려고 하는 chm 파일을 선택한 뒤 오른쪽 클릭을 하여 속성을 선택합니다.
3. 일반 텝에서 "차단 해제" 를 클릭하고 "적용" 을 클릭하고 "확인" 을 클릭합니다.
4. 다시 chm 파일을 실행해 보세요. 이제 잘 보일 겁니다.


[링크] 동양과 서양의 차이 by 신동호

개발 이외의 자료는 링크하지 않으려고 했지만, 꽤나 공감가는 그림을 봐서 링크합니다. 동양과 서양의 차이를 중국 디자이너가 그렸다고 함니다. 공감가면서도 한편으로 씁쓸하군요:D

http://blog.naver.com/booyaso/50071240127

프로그래밍, 그것을 알려주마! - 아키텍쳐 편1 by 신동호

이런 글을 쓰기 애매한 초보 프로그래머 입니다만, 전부터 프로그래밍에 대한 핵심을 정리하고 싶었습니다.


이어지는 내용

moment(적률) by 신동호

boost accumulator 를 보면서 moment 라는 단어가 잘 이해가 되지 않아서 wikipedia 에 있는 설명을 좀 살펴 봤습니다.

원문: http://en.wikipedia.org/wiki/Moment_(mathematics)
이어지는 내용

[미완성] CMake 2.6 Documentation by 신동호

** 너무 길고 번역이 재미가 없어 번역을 종료합니다.


CMake 는 이기종 간의 make 파일을 효과적으로 생성할 수 있도록 도와주는 유용한 도구입니다.

본 문서는 http://www.cmake.org/cmake/help/cmake2.6docs.html 를 번역하고 있습니다.


* 영어를 잘 못해서 번역을 하게 되었는데, 이번 번역은 특히나 허접하군요. 전.혀. 참고가 되지 않을 듯 싶습니다. 번역 후 CMake 를 사용하면서 좀 더 실용적인 지식이 풍부해지면 다시 블로깅을 해야 할 것 같습니다.
이어지는 내용

Post-Morden Debugging Your Application with Minidumps and Visual Studio.NET by 신동호

원본 출처: http://www.codeproject.com/KB/debug/postmortemdebug_standalone1.aspx?fid=3419&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=26&select=1246024

Summary: 고객쪽에서 여러분의 응용프로그램이 다운되었다고 하더라도 minidumps 와 Microsoft Visual Studio.NET 디버거를 이용하여 디버깅을 할 수 있습니다. 이 아티클은 어떻게 minidumps 가 동작하는지, 어떻게 여러분의 프로그램이 다운될 때 덤프 파일을 생성할 수 있는지, 어떻게 덤프 파일을 Visual Studio.NET 에서 읽을 수 있는지에 대해 설명하고 있습니다. Minidumps 는 윈도우 운영체제와 Visual Studio.NET 과 같은 응용프로그램들의 안정성을 향상시키기 위한 Microsoft 의 에러 리포팅 프로그램의 핵심입니다. 이 아티클은 또한 어떻게 시스템 컴포넌트 중에 자동적으로 심볼을 찾는 Microsoft 심볼 서버를 사용하는지 설명하고 있습니다. 이 아티클은 여러분이 Win32 와 C++ 프로그래밍을 사용하고 있다고 가정합니다.


이어지는 내용

VC2008 환경설정 정리 by 신동호

제가 활용하고 알고 있는 것 위주로 간략하게 정리해 보았습니다.


이어지는 내용

Lua Module Definition by 신동호


Lua Tutorial 2, Programming in Lua by 신동호

참조 문서: http://lua-users.org/wiki/TutorialDirectory

본 문서는 Lua Tutorial 의 일부를 발췌하여 간단하게 lua 문법과 활용 예제를 정리하고 있습니다.
이어지는 내용

Lua Tutorial 1, Introductory topics by 신동호

참조 문서: http://lua-users.org/wiki/TutorialDirectory

본 문서는 Lua Tutorial 의 일부를 발췌하여 간단하게 lua 문법과 활용 예제를 정리하고 있습니다.
이어지는 내용

VisualStudio2008 에 cg 파일 highlight 기능 넣기 by 신동호

1. NVIDIA 사이트에서 최신 cg toolkit 을 다운로드 한 뒤 설치합니다.
2. 설치 폴더(예, C:\Program Files\NVIDIA Corporation\Cg\msdev_syntax_highlighting)로 이동하여 usertype.dat 파일을 VisualStudio common7\ide(예, C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE) 에 복사합니다.
3. 현재 버전까지는 vs9 에 등록하는 레지스트리 파일이 없으므로, vs8 레지스트리 파일의 사본을 만들고 텍스트 에디터로 사본을 수정합니다.
4. 아래와 같이 되어 있는 구문을,

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Languages\File Extensions\.cg]
@="{B2F072B0-ABC1-11D0-9D62-00C04FD9DFD9}"

다음과 같이 간단하게 수정하면 됩니다.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Languages\File Extensions\.cg]
@="{B2F072B0-ABC1-11D0-9D62-00C04FD9DFD9}"

5. 수정된 사본을 실행하여 레지스트리에 사용자 데이터를 등록합니다.
6. 이제 VisualStudio 2008 에서 cg 의 키워드가 하이라이트 된 것을 확인할 수 있습니다.

GPU Gems 3, Chapter 27. Motion Blur as a Post-Processing Effect by 신동호

원문: http://http.developer.nvidia.com/GPUGems3/gpugems3_ch27.html

본 문서는 GPU Gems 3 권, 27장에 나오는 깊이 버퍼를 이용한 포스트 프로세싱 모션 블러에 대한 논문을 번역하고 있습니다. 깊이 버퍼만 있다면 이처럼 여러가지 재미있는 것들을 할 수 있군요:D 최근 논문들은 이처럼 깊이 버퍼를 활용한 내용이 많은데 이는 directx10 에 추가된 기능이기도 하다는 군요. directx9 에서는 rendertexture 로 만들어 줘야 할 것 같습니다.


이어지는 내용

엔진 개선 by 신동호

현재 사용하고 있는 엔진은 오픈소스 게임엔진인 Ogre3D 이지만 전체 시스템을 구성하기 위하여 database, script, statechart, management factor 를 추가로 구현하였다. 아래는 그간 구성하면서 느꼈던 점과 개선안을 정리한 개인적인 문서이다.

1. 에디터를 위한 UI 는 database 와 자동으로 연결이 되어있어야 한다. 즉, 어떤 기능을 만들고 table 을 만들어 수정가능하도록 구현하였다면, 새로운 기능의 table 을 수정하기 위한 에디터가 필요하게 되는데 이 작업이 매우 번거롭다. 최종 사용자가 아닌 내부 개발자 혹은 디자이너, 기획자가 사용할 에디터이므로 더더욱 미적 감각보다는 database 를 자동으로 반영하여 에디터를 자동으로 생성해 내는 쪽이 편리할 것 같다. 두번 이상의 반복은 죄악이다.

2. script, state, database 는 게임 안에서 바로 수정가능해야 한다. 윈도우로 나갈 필요도 없다. 직접 구현을 해보고 적용을 해보니 이 컨셉이 생각보다 유용하다. 좀 더 강력하게 보완해야 할 것 같다.

3. database 는 boost seriallizer 여 연동하여 xml 파일 시스템을 사용하고 있는데, 정의와 버전관리가 번거롭다. 새로운 테이블은 언제든지 수정되거나 추가/삭제 될 수 있으며 이는 기존 데이터의 무결성에 영향을 주어서는 안되며 컴파일 없이 이루어져야 편리하다. 마찬가지로, boost 를 적극적으로 사용하다 보니 성능은 우수하지만 컴파일 타임이 늦어지고 serializer, statechart 등이 빌드에 종속적이라는 것이 매우 큰 단점이 되었다. 성능적인 우수함을 손해보더라도 database 와 state 는 동적으로 제어 가능한 것이 좋을 것 같다.

4. 모든 모듈은 언제든지 붙였다가 땔 수 있어야 한다. 특히 게임상에서 listener 와 같은 녀석들을 효과적으로 제어할 수 있는 기능은 개발의 국제화(외국 프로그래머 및 외주에서 작업)에도 도움이 된다. 이는 모듈화를 더욱 잘게 쪼갠 개념인데 어떤 라이브러리 및 기능단위로 나뉘는 것보다 더 작은 규모인, "작업" 단위의 모듈을 말하는 것이다. 이렇게 잘게 쪼게어진 모듈은 자체가 단위 테스트가 될 수도 있다.

5. 이번 엔진을 설계할 때, 큰 줄기를 statechart, script, database, listener 로 삼았는데 개념적 확장이 필요할 것 같다. 기본 개념은 statechart 는 상태 진입/종료 시 script 를 호출하고 스스로는 자신의 상태와 어떤 상태로 전이 될 수 있는 지 등의 기본 개념만 알고 있다. script 는 누가 자신을 실행했는지, 현재가 어떤 상황인지는 모르고 그저 일하라고 하면 자신을 일만 하면 된다. database 는 말 그대로 database 로써 script 및 listener 에서 상수로써 접근하여 사용한다. listener 는 "작업" 단위로써 랜더 루프에 언제든지 꼽거나 뽑을수 있는 형태로 구현하였다. 

6. UI 는 역시 flash 다! flash 를 사용할 경우 가장 큰 이득은, 개발자가 UI 를 "완전"하게 무시할 수 있다는 데 있다. 

그간 작성하다 말았던 비공개 포스트를 모두 공개로 바꿉니다. by 신동호

마저 작성하자니 쉽지가 않아서, 그냥 공개로 바꿉니다.

Visual Studio 2008 로 C/C++ 공부 시작하기 by 신동호

많은 사람들이 열정을 가지고 C/C++ 에 도전을 하지만 C/C++ 이라는 녀석이 생각보다 녹록치가 않아서 정복까지는 고된 여정이 기다리고 있습니다. 


본 문서는 처음 C/C++ 에 도전하는 도전자들을 위하여 MS 에서 제공하는 최신 컴파일 환경인 Visual Studio 2008 에 대해 간단히 알아보고, vs2008 의 기능을 이용하여 어떻게 문제를 분석하고 해결할 수 있는지에 대하여 간단하게 정리하고 있습니다.



이어지는 내용

다소 싼티나는 논문 분석 요령 by 신동호

수많은 논문과 최신의 기술들이 공개가 되어 있음에도 무조건 어려울 것이라는 거부감으로 인해 클릭하지 않았던 경험이 있으실 겁니다. 저 역시 미약한 지식과 짧은 가방끈으로 인해 아직까지도 분석에 어려움이 많이 있습니다만, 그 동안 분석하면서 느꼈던 내용을 짧게 정리해 보았습니다.
이어지는 내용

[ogre3d] Profiler by 신동호

오거 프로파일러에 대한 간단한 사용 방법입니다.

1. 오거 프로파일러를 사용하려면 ogre 를 새로 빌드해야 합니다. OgreConfig.h 에 OGRE_PROFILING 0 을 1 로 바꾸고 빌드합니다.
2. 실제 프로젝트의 원하는 코드에 OgreProfiler.h 를 인클루드 하고 프로파일러 매크로를 사용하여 등록합니다. 
    OgreProfile("test");
   와 같이 적으면 해당 코드가 있는 지역 범위를 프로파일링 합니다. 특정 코드만 프로파일링 하는 경우,
    OgreProfileBegin("test");
    ...
    OgreProfileEnd("test");
   와 같은 메크로를 사용합니다.
3. 프로파일링 결과를 log 로 남기려면 원하는 시점에 Ogre::Profiler::getSingleton().logResults(); 를 호출하면 됩니다.
4. 실제 게임 화면에 비주얼하게 결과를 표시하고 싶다면 Ogre::Profiler::getSingleton().setEnabled(true); 를 호출합니다.
5. 프로파일링 결과는 기본값으로 퍼센트로 표기합니다만, Ogre::Profiler::getSingleton().setDisplayMode( Ogre::Profiler::DISPLAY_MILLISECONDS); 와 같이 시간으로 바꾸어 볼 수도 있습니다.

1번 정정합니다. 오거 프로파일러 메크로를 사용하거나 기본 프로파일링 찍힌 녀석들을 못쓰는 것 뿐이군요. 걍 오거 프로파일러는 빌드 안하고도(Ogre::Root 에서 생성을 안하게 됩니다) 직접 생성하여 사용 가능합니다.



[build] 빌드 시간에 관한 고찰 by 신동호

제가 사용하고 있는 tip 을 간략하게 정리해 보도록 하겠습니다.
이어지는 내용

[dos] batch by 신동호

Visual studio 혹은 간단하게 사용할 수 있는 batch 명령어 중에 유용한 옵션을 정리했습니다.

이어지는 내용

[gpu gems] 온라인 공개 by 신동호

GPU Gems 가 1, 2, 3 권 모두 온라인으로 공개가 되었네요. -_-; 비싸게 주고 샀는데.. NVIDIA developer 가시면 열람이 가능합니다.



1 2 3