분류 전체보기

    2. Base From Member Idiom

    2. Base From Member Idiom

    우선 Idiom이 무엇인지 부터 알아보자 C++ Idiom 프로그래밍시 발생하는 문제를 해결하기 위한 기법. C++의 언어적인 특성에 기반한 팁 문제해결 패턴이다. (https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms) 이 수많은 Idiom 중에 Base From Member Idiom 을 알아보자 (나머지는 추후 업로드 하거나 안하거나 미래의 나만 알 것 같다...) Base From Member Idiom #include class KObject { public: KObject() { m_iInitialized = 99; } int GetInitialized() const { return m_iInitialized; } private: int m_iInitiali..

    1. STL - Contaier and Iterator

    1. STL - Contaier and Iterator

    C++로 개발할 때는 그냥 사용했지, 내부구조가 어떻고, 어떤 방식으로 구현돼있는지 몰랐다. 따라서, 현재 C++에서 가장 많이 사용되고 있는 라이브러리인 STL에 대해 공부해본다. Container 여러가지 요소들을 담고있는 자료구조 많이 사용되고 있는 vector, linked_list, 그리고 tree 등등 원하는 자료형을 담아둔 자료구조를 Container라고 한다. Iterator 컨테이너의 요소들을 클래스 외부에서 접근할 때 사용되는 포인터 위에서 언급한 자료구조들을 Iterator를 사용하여 접근 할 수 있다. 간단히 어떻게 사용되는지, 그리고 어떤 구조로 만들어져 있는지 확인해보자 vector void main() { std::vector v; v.push_back(1); v.push_ba..

    6. 3D 모델 렌더링

    6. 3D 모델 렌더링

    이번에 사용할 포맷은 정말 기본적인 것만 담고 있습니다. 우선 그 모겔의 점ㅇ점을 연결하는 선을 담고 있습니다. 각 선분들은 위치벡터(x,y,z)와 텍스쳐 좌표 (tu, tv), 그리고 법선 벡터 (nx, ny, nz)를 가지는 정점 포맷과 일치합니다. 이 포맷은 또한 가장 위에 정점의 갯수가 있어서 첫번째 라인을 읽고 데이터를 읽기 위한 준비로 구조체들을 위한 메모리들을 미리 할당할 수 있습니다. 또한 세 개의 선분이 삼각형을 만들며, 각 삼각형의 정점들은 시계 방향으로 배열되어 있어야 합니다. 아래에 앞으로 렌더링에 사용할 육면체의 모델이 있습니다. Cube.txt Vertex Count: 36 Data: -1.0 1.0 -1.0 0.0 0.0 0.0 0.0 -1.0 1.0 1.0 -1.0 1.0 0..

    5. 조명

    5. 조명

    이번에 구현하게 될 조명의 종류는 방햔 조명(Directional Lighting)입니다. 방향 조명의 개념은 태양이 지구를 비추는 것을 생각해 보면 됩니다. 태양은 엄청나게 먼 거리에서 빛을 비추는 광원이기 때문에 그 방향ㅇ ㅔ근거하여 물체에 얼마만큼의 빛이 투사되는 지 어림잡을 수 있습니다. 하지만 주변광(Ambient Lighting) 과는 달리 빛이 직접 닿지 않은 곳은 밝아지지 않습니다. 우선은 눈에 보이는 디버깅이 쉽다는 장점 때문에 방향 조명을 먼저 다루겠습니다. 방향 조명은 또한 점조명이나 스포트라이트 조명 같은 다른 조명 모델과는 달리 단순히 방향만 생각하면 되므로 계산에서의 요구사항이 단순합니다. DirectX 11 에서의 방향 조명의 주현은 정점 쉐이더와 픽셀 쉐이더를 통해서 이뤄집니..

    4. 텍스쳐

    4. 텍스쳐

    텍스쳐를 사용하면 도형 표면에 사진과 다른 이미즐ㄹ 적용하여 더욱 현실적인 장면을 연출할 수 있습니다. 아래와 같은 사진을 이용하여 작성해보겠습니다. 이 이미지를 지난 삼각형에 덮어씌어주면 아래와 같은 이미지로 도형 표면이 변하게 됩니다. 이번에 사용할 이미지 형식은 .tga 파일입니다. 이것은 R,G,B 그리고 A(알파채널)을 지원하는 일반적인 그래픽 형식입니다. 일반적으로 모든 이미지 편집 소프트웨어를 사용하여 targa 파일을 만들고 편집 할 수 있습니다. 그리고 파일 형식은 대부분 간단합니다. 코드에 들어가기 전에 텍스쳐 매핑이 어떻게 작동하고 있는지 구조를 확인해야 합니다. .tga 이미지의 픽셀을 도형에 매핑하기 위해 텍셀 좌표계(Texel Coordinate System)를 사용합니다. 이 ..

    3. 버퍼, 쉐이더 및 HLSL

    3. 버퍼, 쉐이더 및 HLSL

    버텍스 버퍼(Vertex Buffer) 이해해야 할 첫 번째 개념은 정점 버퍼 입니다. 이 개념을 설명하기 위해 구의 3D 모델을 예로 들어보겠습니ㅏㄷ. 3D 구형 모델은 실제로 수백개의 삼각형으로 구성됩니다. 구형 모델의 각 삼각형에는 3개읜 점이 있으며, 각 점을 꼭짓점이라고 부릅니다. 따라서 우리가 구형 모델을 렌더링 하려면, 구형을 구성하는 모든 정점을 정점버퍼라고 부르는 특수 데이터 배열에 넣어야 합니다. 구형 모델의 모든 점이 버텍스 버퍼에 있으면 우리는 버텍스 버퍼를 GPU 에 전송하여 모델을 렌더링 할 수 있습니다. 인덱스 버퍼 인덱스 버퍼는 정점 버퍼와 관련이 있습니다. 그 목적은 정점 버퍼에 있는 각 정점의 위치를 기록하는 것입니다. 그런 다음 GPU는 인덱스 버퍼를 사용하여 정점 버퍼..

    번외) Warning - warning C4316 에러 문제

    번외) Warning - warning C4316 에러 문제

    아래와 같이 컴파일 시, warning C4316을 뱉어낸다는 문제가 발생했습니다. alignment error(C4316)은 무엇인가!?!? 위 경고는 __declspec(align(byte))로 정렬돼야 하는 데이터를 멤버로 가지거나, 할당할 때 생기는 경고입니다. 오류나는 부분을 점검해보면 XMMATRIX 변수부분에 대한 에러가 발생하는데 다음과 같습니다. 정의 부분을 보면 __declspec(align(16))으로 16바이트 정렬을 사용한다고 명시되어 있습니다. 이는 자주 사용되는 데이터를 특정 프로세서 캐시라인 크기로 정렬하여 한꺼번에 계산하여 CPU 캐시 처리 성능을 높여줍니다. 게임 프로그래밍에 사용되는 행렬 연산을 고속으로 한꺼번에 처리하기 위해서 SSE라는 새로운 명령어 집합이 생겨나게 ..

    2. DirectX 초기화

    2. DirectX 초기화

    프레임워크 업데이트 기존의 윈도우 프로그램 프레임워크에 Direct3D 기능을 가지는 클래스를 추가하여 확장할 것 입니다. 새롭게 변경된 프레임워크는 아래와 같습니다. 보기사시피 D3DClass는 GraphicsClass 안에 있습니다. 클래스 다이어그램이 아닌점을 감안하시고 보시기 바라며, 상속 관계가 아닙니다. 이전 튜토리얼에서는 모든 새로운 그래픽 관련 클래스가 GraphicsClass에 캡슐화 되어 새로운 D3DClass에 가장 적합한 위치라는 것을 언급했습니다. 이제 DxDefine.h에 대한 변경 사항을 살펴 보겠습니다. DirectX SDK를 사용하기 위해서 DirectX에 필요한 헤더 및 라이브러리를 포함했습니다. DxDefine.h 업데이트 #pragma once /////////////..