DirectX

    11. 글꼴 엔진

    11. 글꼴 엔진

    이전에 사용했던 2D 이미지를 그리는 방법으로 이제 텍스트를 출력하려고 합니다. 우선 필요한 것은 자신만의 글꼴 이미지 입니다. 여기에 몇 개의 글씨가 있는 간단함 1024 x 16 크기의 dds 텍스쳐를 만들었습니다. 보이는 것처럼 하나의 텍스쳐 파일 안에 필요한 기본 글자가 모두 들어있습니ㅏㄷ. 이것을 이용해 필요한 글자의 텍스쳐를 인덱스를 이용해 그려내는 단순한 글꼴 엔진을 만들 수 있습니다. DirectX11 에서는 2개의 삼각형으로 이루어진 사각형을 만들고 그 사각형에 원하는 글자의 텍스쳐를 그리면 됩니다. 따라서 문장이 이씅면 문장에 있는 가 문자별로 사각형을 만들어 주고 그 위에 글자를 그립니다. 이렇게 모든 사각형이 화면에 그려지면 문장이 완성됩니다. 이 과정은 지난 튜토리얼의 2D이미지를..

    10. 2D 렌더링

    10. 2D 렌더링

    화면에 2D 이미지를 그리는 것은 정말 유용합니다. 예를 들어 대부분의 유저 인터페이스(UI), 스프라이트 시스템, 텍스트 엔진들은 2D 이미지들로 만들어져 있습니다. DirectX 11 에서는 도형에 2D 이미지들을 매핑하고 정사영 행렬을 이용하는 방식으로 2D 이미지를 그릴 수 있게 해 줍니다. 2D 화면 좌표계 2D 이미지를 화면에 그리기 위해서는 화면의 X,Y 좌표를 계산해야 합니다. DirectX에서는 스크린의 중앙이 (0, 0) 입니다. 그리고 중앙을 기준으로 왼쪽과 아래쪽 화면이 음수 좌표가 되고, 오른쪽과 위쪽 화면 좌표는 양수 방향이 됩니다. 예를 들어 1024 x 768 해상도의 화면이 있다면 화면 경계의 좌표는 다음과 같습니다. 올바르게 2D 렌더링을 하기 위해서는 이 화면의 좌표계를..

    9. 정반사광

    9. 정반사광

    정반사광은 밝은 점광원의 위치가 어디인지 알려주는 단서의 역할을 합니다. 예를들어 단순조명과 주변광이 적용된 시뻘건 구체가 있다면 다음과 같을 것입니다. 여기에 하얀 정반사광 효과를 넣어주면 다음과 같아질겁니다. 정반사광은 거울이나 반짝반짝한 금속 표면과 같은 재밀에서의 빛의 반사를 표현하는 거의 모든 경우에 사용됩니다. 또한 태양빛이 물에 반사괴는덧도 같은 다른 재질도 이것으로 표현이 가능합니다. 잘만 사용된다면, 3D장면의 리얼리티 수준을 한층 더 끌어올려 줄 수 있습니다. (레이트레이싱 기술만 봐도 빛 연산을 엄청나게 끌어올린 기술인데 현실과 비슷해진다.) 정반사광의 방적식은 다음과 같습니다. 반사광 = 반사색 * (반사된 빛의 색 * ((법선과 하프벡터의 내적) ^ 반사강도) * 감쇄계수 * 스포..

    8. 주변광

    8. 주변광

    주변광은 특정한 방향이 없이 주변을 덮고 있는 빛을 말합니다. 물론 광원은 있지만, 여러가지 요소들에 부딪히고 반사되어 점차 방향을 잃어버린 빛의 현태에 해당합니다. 따라서 이러한 조명은 물체의 어떤 면에나 비춰지며, 지금까지 살펴본 예제에서와 같이 어느쪽으로 회전하던간에 일정한 밝기와 색상으로 표현되는 경우가 바로 이 주변광의 영향을 받은 것입니다. 주변광을 흉내내기 위해서 간단한 방정식을 사용할 것입니다. 단지 픽셀 셰이더에서 맨처음 각 픽셀마다 일정 수준의 주변광에 해당하는 값을 줍니다. 드 귀에 이루어지는 모든 연산들은 단지 그 주변광 값에 계산된 값들을 더하는 것입니다. 이렇게 하여 아무리 어두운 곳이더라도 최소한 주변광 만큼의 색상을 가지게 할 수 있습니다. LightPixelShader에 확..

    7. Maya 2011 모델 불러오기

    7. Maya 2011 모델 불러오기

    마야 프로그램에서 모델을 불러와야 하지만, 없기 때문에 불러오는 법은 생략 하겠습니다. ㅎㅎ;; Cube.obj # This file uses centimeters as units for non-parametric coordinates. mtllib cube.mtl g default v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 v -0.500000 0.500000 0.500000 v 0.500000 0.500000 0.500000 v -0.500000 0.500000 -0.500000 v 0.500000 0.500000 -0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 -0.50..

    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)를 사용합니다. 이 ..