Game Dev/Article 59

배열과 Loop를 다루는 3가지 방법

1. 배열의 크기를 리터럴로 설정 - Magic Number로 인해 추적이 어려울 수 있다. - 배열의 크기가 변경되면 Loop도 변경해야 한다. int aSomeArray[5] = {0}; for (int i = 0; i < 5; ++i) { // Do Something aSomeArray[i] = Func(i); } 2. 배열의 크기를 상수로 설정 - Magic Number는 사라졌지만, 상수에 따라 for 조건문 등이 변경되야 한다. #define MAX_ARRAY_SIZE5 int aSomeArray[MAX_ARRAY_SIZE] = {0}; for (int i = 0; i < MAX_ARRAY_SIZE; ++i) { // Do Something aSomeArray[i] = Func(i); } 3...

Game Dev/Article 2009.01.12

소프트웨어 일정 예측

일정의 예측 일정 (개월) = 3.0 * pow(월-인원, 1/3) 예를 들어 프로젝트에 65월-인원이 든다고 예측하였다면 이 공식에 따른 예측 일정은 12개월이다. 12 = 3.0 * pow(65, 1/3) 최단 일정 : 이론적이며 달성 불가능 - 인력 : 상위 10% 능력의 팀원 - 지원 : 첨단 HW 및 SW 지원 - 방법론 : 시간 효율이 가장 큰 개발법과 개발 도구 - 일정 단축 가능성 : 불가능 Code Line 일정 (개월) 노력 (월-인원) 10,000 4.2 8 30,000 7 37 50,000 8 79 100,000 11 190 160,000 13 335 180,000 13 390 200,000 14 440 250,000 15 580 300,000 16 725 400,000 19 1,0..

Game Dev/Article 2008.10.22

Ogre Engine v1.6.0 설치하기 (VC 2008)

Ogre Source Down http://downloads.sourceforge.net/ogre/ogre-v1-6-0RC1.zip Ogre Dependencies Down http://downloads.sourceforge.net/ogre/OgreDependencies_VC9_Eihort_20080203.zip Ogre Source 및 Dependencies 압축 해제 Ogre Source를 위한 폴더 생성 (C:\Ogre) Ogre Source 압축 해제 (C:\Ogre\Ogre_v1.6.0) Ogre Source 폴더 내에 Dependencies 압축 해제 (C:\Ogre\Ogre_v1.6.0\Dependencies) 환경 변수 등록 (필수 요소는 아님) "제어판 - 시스템 - 고급 - 환경변수"로..

Game Dev/Article 2008.09.10

rand 함수의 올바른 사용

예전에 포스팅했던 방식으로 rand 함수를 사용하면 '일반적으로' 사용하던 범위가 생성되지 않는다. 예를들어 rand() % 1000은 [0, 999]의 범위를 지니는 반면 rand() * 1000 / RAND_MAX은 [0, 1000]의 범위를 가지게 된다. 또 rand()와 1000 혹은 더 큰 수를 곱할 때 오버플로우의 위험이 존재한다. GPG에서 illlust님이 이러한 문제를 제기하였고, visco님이 rand 함수를 제대로 사용하는 방법을 올려주셨다. 해당 글의 원문은 다음과 같다. GPG 논의 : http://www.gpgstudy.com/forum/viewtopic.php?t=19568 rand 함수의 올바른 사용 : http://members.cox.net/srice1/random/cra..

Game Dev/Article 2008.09.09

Texture Blending

2개의 Texture를 혼합하는 Texture Blending을 진행하고 있다. 현재까지 Survey 한 결과는 다음과 같다. 1. UpdateSurface, StretchRect 가장 쉽고 빠른 방법이 아닐까 생각한다. 하지만 각 Surface의 POOL에 따라 성공 여부가 결정되기 때문에, 사용하기가 꽤나 까다롭다. Driver에 따라서 지원 여부가 다르기도 하다. 2. D3DXLoadSurfaceFromSurface 이 방법을 사용하면 ColorKey가 검은색으로 나오는 버그가 있다. 이에 대한 논의는 아래 사이트에 나와있는데, 이에 대한 명쾌한 해결책은 나와있지 않다. http://www.gamedev.net/community/forums/topic.asp?topic_id=184955 http:/..

Game Dev/Article 2008.09.08

Introducing DirectX 11

원문 : http://www.gamasutra.com/view/feature/3759/sponsored_feature_introducing_.php 번역 : 최유표 Microsoft는 Gamefest Conference에서 DirectX 11에 대한 API를 발표하였다. 이에 따르면 개발자는 CPU와 GPU를 통한 개발을 보다 쉽게 할 수 있는데, DirectX 11의 주요 사항은 다음과 같다. Feature Highlights Down-level hardware and operating system support Improved multithreaded device New hardware stages for tessellation Improved texture compression Shader Mode..

Game Dev/Article 2008.08.17

정밀도가 높은 수행시간 측정

LARGE_INTEGER lStart, lEnd, lFreq; if (QueryPerformanceFrequency(&lFreq)) { QueryPerformanceCounter(&lStart); // Do Something QueryPerformanceCounter(&lEnd); TRACE("%d msec", (lEnd.QuadPart-lStart.QuadPart) * 1000 / lFreq); TRACE("%d nsec", (lEnd.QuadPart-lStart.QuadPart) * 1000000 / lFreq); } else { // CPU 속도가 2GHz를 초과하는 하이퍼 스레드 컴퓨터, // 이중 프로세서 컴퓨터 또는 단일 프로세서 컴퓨터에서는 // 게임과 같은 특정 프로그램이 제대로 실행되지 ..

Game Dev/Article 2008.08.07

Internal Reference Count

IUnknown Interface를 상속하는 Object들은 내부적으로 Reference Count를 통하여 자원을 관리한다. IUnknow Interace에는 AddRef, QueryInterface, Release 등 명시적인 외부 Interface가 존재하지만, 내부적으로 Reference Count를 증가, 감소하는 함수들이 있으므로 이러한 함수를 호출할 때는 Reference Count를 원래대로 복구시켜야 한다. 다음은 DirectX SDK 9.0c에서 발견한 Internal Reference Count 변경 함수 목록이다. 이 Get* 함수들은 사용한 후 반드시 Release 해주어야 한다. ID3DXRenderToSurface::GetDevice ID3DXRenderToEnvMap::Get..

Game Dev/Article 2008.08.06