호바호바호바

hovamoon.egloos.com

포토로그



생성 - Replace Constructors with Creation Methods


C++ 이나 Java 같은 언어는 생성자의 이름이 class 의 이름과 동일 해야 하기 때문에

클래스의 역할에 따라 너무 많은 생성자들로 인해 몇가지 문제 점이 야기 될수 있다.

- 각 생성자 별 용도 파악의 어려움
- 사용자의 오용 가능성의 중가
- 동일한 시그내처를 가진 생성자 추가의 불가능
- 사용 되지 않는 생성자의 존재 가능성

그리 하여 이 문제를 해결 하기 위해 Creation Method 를 제작 해 볼수 있다.

장점과 단점에 대해 미리 정리 해보자면

장점

- 함수 명에 의한 용도 파악이 명확해 진다
- 동일 시그내처로도 좀 더 역할이 명확한 생성 함수를 만들수 있다.
- 사용 되지 않는 생성 함수들을 찾기 쉬워 진다.

단점

- 표준이 아닌 방식으로 객체를 생성 하게 되므로 전체 적인 클래스 사용에 대한 일관성이 깨질수 있다.


생성자가 너무 많은 경우 (보통 클래스가 너무 많은 역할을 하는 경우..)

이 방법을 적용 하기 전에 Extract Class 혹은 Extract Subclass 리팩터링을 고려해 볼수 있다.

Factory 패턴을 통해 객체 생성 전담 클래스를 두는 방법도 있다.


DirectX 11 로 시작하는 3D 게임 프로그래밍 - 챕터 06 -1 DirectX11

D3D 복습 겸 다시 블로그 정리 시작..


D3D11 은 ID3D11InputLayout 으로 정점들을 Direct3D 에게 전달한다.
ID3D11InputLayout 은 D3D11_INPUT_ELEMENT_DESC 구조체로 이루어진 배열을 통해 구축한다.

msdn 참고 : 

  1. struct Vertex2
  2. {
  3.         XMFLOAT3 Pos;
  4.         XMFLOAT3 Normal;
  5.         XMFLOAT2 Tex0;
  6.         XMFLOAT2 Tex1;
  7. };
  8.  
  9. D3D11_INPUT_ELEMENT_DESC vertexDesc[] =
  10. {
  11.                 { "POSITION"0, DXGI_FORMAT_R32G32B32_FLOAT, 00,
  12.                 D3D11_INPUT_PER_VERTEX_DATA, 0},
  13.                 { "NORMAL"0, DXGI_FORMAT_R32G32B32_FLOAT, 012,
  14.                 D3D11_INPUT_PER_VERTEX_DATA, 0 },
  15.                 { "TEXCOORD"0, DXGI_FORMAT_R32G32_FLOAT, 024,
  16.                 D3D11_INPUT_PER_VERTEX_DATA, 0 },
  17.                 { "TEXCOORD"1, DXGI_FORMAT_R32G32_FLOAT, 032,
  18.                 D3D11_INPUT_PER_VERTEX_DATA, 0 },
  19. };
  20.  
  21. VertexShaderOutput VS(float3 iPos : POSITION,
  22.                       float3 iNormal : NORMAL,
  23.                       float2 iTex0 : TEXCOORD0,
  24.                       float2 iTex2 : TEXCOORD1)
Direct3D 를 통해 Vertex2 를 VertexShader 에 전달 하기 위해 vertexDesc 에 맵핑 하는 걸 위의 소스로 대충 감을 볼수 있다.

이전에 얻은 Device 에서 CreateInputLayout 함수를 을 통해 InputLayout 인터페이스를 생성 해야 한다.

설명은 생략..

이제 InputLayout을 얻었다면..(쉐이더 코드의 Semantic과 엮이는 부분은 당연히 아는 부분이므로 패스..)
deviceContext 이 IASetInputLayout 함수를 통해 inputLayout 을 등록 한다!

당연히 등록된 InputLayout은 다른 InputLayout 이 등록 될때 까지 유지 되므로 잘 알아 둬야 한다.



알기 쉽게 설명한 이산 수학(1)

그냥 공부 겸 정리.. 전공자가 아니기 때문에 한번 쭉 훑어 보기로 했다...

집합과 원소

집합(Set) 의 정의 : 집합은 어떤 규칙을 갖는 정의된 대상들의 모임이다.

집합 A == 집합 B 는 두집합이 서로 같은 원소를 가진다라는 뜻.

Code 구현
eSHi © 2004-2007 Nigel McNie, 2007-2010 Benny Baumann, 2008-2009 Milian Wolff
  1. template<typename T>
  2. class IRule
  3. {
  4. public:
  5.         virtual bool Acceptable(T value) = 0;
  6. };
  7.  
  8. class Rule1 : IRule<int>
  9. {
  10. public:
  11.         virtual bool Acceptable(int value)
  12.         {
  13.                 return (value > 0 && value <= 10 && value % 3 == 0);
  14.         }
  15.        
  16. };
  17.  
  18. template<typename T,  class Rule = IRule<T>>
  19. class Set
  20. {
  21. private:
  22.         std::set<T> elements;
  23. public:
  24.         bool EvaluateAndAdd(T value)
  25.         {
  26.                 Rule evaluator;
  27.                 if (evaluator.Acceptable(value))
  28.                 {
  29.                         elements.insert(value);
  30.                         return true;
  31.                 }
  32.                 return false;
  33.         }
  34.         void Print()
  35.         {
  36.                 for each(T each in elements)
  37.                 {
  38.                         cout << each << endl;
  39.                 }
  40.         }
  41. };

Parsed in 0.007 seconds at 111.60 KB/s


Dance Dance Revolution 2013 이 드디어 출시 했네요 게임 이야기



드디어 약 십수년 만에 디디알이 다시 정식 출시 되었습니다.

작년에 인컴 테스트를 하고 설마 설마 하고 있었는데.....

가장 가까운 아케이드 센터인 서현 게임 파크에 입고 되었단 얘기를 듣고 토요일에 찾아가 보았습니다






오오오오오!!!!!




이 어뮤 카드도 잃어 버린지 좀 되서 새로 하나 구입하고 플레이 해보았습니다.

나름 디디알 골수 팬인지라 DDR X 곡 까지는 많이 해보았는지라 할 만 하겠지 하고

1 스테이지 - Tsugaru (개인적으로 좋아 하는곡)


2 스테이지 - 1998 (올만이지만 풀콤)



이미 여기 까지 플레이 하고 숨은 턱 및까지 차고 다리는 풀리기 직전이었습니다...

다리가 피곤 하지만 한번 도전해 보자고 

스테이지 3 - Max 300


당연히 중간에 다리가 풀려서 폭사.....

아무래도 디디알 재활 기간이 좀 필요 할듯 합니다.

전체 적인 소감은

1. 발전된 UI

2. 많은 곡들 - 오리지날 곡들은 거의 다 있어서 좋았습니다.

3. 이 어뮤 카드 연동 - 게임 결과 저장이 되네요 아싸!

4. 편의성 증가

일단 단점 따위는 매니아 시선에선 보이지 않기 때문에 제외.

현재 열기가 장난 아니라 겁나 기다려야 되서 하루 한판 겨우 겨우 하고 있는데

계속 장사 잘 되서 게임파크에 한 대 더 들어오면 좋겠군요~!





Stack 에 메모리 할당 - alloca C/C++


Stack 영역에도 메모리를 명시적으로 할당 할수 있는 alloca  라는 함수가 있다.

이로 할당한 메모리는 함수를 벗어남에 자동으로 해제가 된다. 

당연 지사 겠지만 현재 할당할수 있는 스택 영역 보다 큰 메모리를 할당하면 Stack Overflow Exception 이 난다.

그리고 Exception Handler 안에서 명시적으로 호출 하는걸 금지 하고 있다.

아직 유용 할지 모르겠지만 일단 정리용으로...!

자세한 내용은 MSDN 에 명시 되어 있다.


1 2 3 4 5