목록DirectX (13)
DOTY
주변광과 반사광을 구현. 주변광의 경우 표면을 직접 쬐지 않지만 반사되는 빛으로 인해 밝아지므로 이를 표현. 반사광의 경우 더욱 3D효과를 내기 위해서 구현 (코드가 크게 추가되는 것은 없었지만 벡터의 계산을 이해하는데 어려웠다.) 1. LightShaderClass.h #pragma once #ifndef _LIGHTSHADERCLASS_H_ #define _LIGHTSHADERCLASS_H_ #include #include #include #include using namespace DirectX; using namespace std; class LightShaderClass { private: struct MatrixBufferType { XMMATRIX world; XMMATRIX view; XM..
이전의 코드에서는 3D 공간에서 평면인 모델만 렌더링 했지만 이번에는 입체를 렌더링 한다. 따라서 이전의 코드와 큰 차이가 없지만 3D 모델을 처리하기 위한 Vertex(x, y, z), Texture(tu, tv), Normal(nx, ny, nz)가 포함된 텍스쳐 파일을 읽어와 이를 처리하여 렌더링 하는 것을 익힐 수 있었다. 추가로 Rotate, Translate, Scale 관련 코드도 추가되었다. HTML 삽입 미리보기할 수 없는 소스 1. ModelClass.h #pragma once #ifndef _MODELCLASS_H_ #define _MODELCLASS_H_ #include "TextureClass.h" #include #include #include using namespace Dir..

공부 하다가 왜 회전하는 삼각형이 앞면에만 표시되고 뒷면은 보여지지 않는걸까 생각을 해봤다. vertices[0].position = XMFLOAT3(-1.0f, -1.0f, 0.0f); // Bottom left. vertices[0].texture = XMFLOAT2(0.0f, 1.0f); vertices[0].normal = XMFLOAT3(0.0f, 0.0f, -1.0f); vertices[1].position = XMFLOAT3(0.0f, 1.0f, 0.0f); // Top middle. vertices[1].texture = XMFLOAT2(0.5f, 0.0f); vertices[1].normal = XMFLOAT3(0.0f, 0.0f, -1.0f); vertices[2].position = ..

Light는 이전의 Texture에서 Light가 추가되었고 이번 코드에서는 오브젝트의 회전을 추가되었다. 1. LightShaderClass.h #pragma once #ifndef _LIGHTSHADERCLASS_H_ #define _LIGHTSHADERCLASS_H_ #include #include #include #include using namespace DirectX; using namespace std; class LightShaderClass { private: struct MatrixBufferType { XMMATRIX world; XMMATRIX view; XMMATRIX projection; }; struct LightBufferType { XMFLOAT4 diffuseColor; ..

이전의 Color Shader과 비슷한 Texture Shader로 코드가 거의 비슷하지만 Color관련 부분만 Texture로 바뀌었다. Texture은 RGBA의 정보가 담겨있는 .tga(TARGA)파일을 사용하고 픽셀의 위치는 0 ~ 1 사이의 float형식으로 표현된다. ※ Texture Class가 Framework에 추가된다. 1. TextureShaderClass.h #pragma once #ifndef _TEXTURESHADERCLASS_H_ #define _TEXTURESHADERCLASS_H_ #include #include #include #include using namespace DirectX; using namespace std; class TextureShaderClass { ..
1. ModelClass.h #pragma once #ifndef _MODELCLASS_H_ #define _MODELCLASS_H_ #include #include using namespace DirectX; class ModelClass { private: struct VertexType { XMFLOAT3 position; XMFLOAT4 color; }; public: ModelClass(); ModelClass(const ModelClass&); ~ModelClass(); bool Initialize(ID3D11Device*); void Shutdown(); void Render(ID3D11DeviceContext*); int GetIndexCount(); private: bool Initial..

0. Buffer / Shader Buffer : 데이터를 저장하는 메모리 영역 Shader : GPU에서 실행되는 경우가 많으며 그래픽스 파이프라인의 각 단계에서 실행된다. 0-1. Vertex Buffer 3D 모델은 여러 개의 삼각형으로 구성된다. 이 모델을 구성하는 삼각형 꼭짓점들에 대한 정보를 Vertex Buffer라고 하는 데이터 배열에 넣어야 한다. 이를 활용해서 렌더링을 한다. 0-2. Index Buffer Vertex Buffer와 비슷하지만 다른 버퍼로 모든 꼭짓점들을 저장하는 것이 아닌 꼭짓점들의 위치를 저장하는 것이다. Vertex Buffer보다 메모리를 절약할 수 있다는 장점이 있다. 0-3. Vertex Shader Vertex Buffer의 꼭짓점을 3D로 변환해주기 위해..

D3DClass는 ApplicationClass 하위에 존재하고 시스템 기능을 처리하게 된다. 이에 따라 ApplicationClass에도 변경점이 존재한다. 1. ApplicationClass.h #ifndef _APPLICATIONCLASS_H_ #define _APPLICATIONCLASS_H_ // #include 를 지우고 대체한다. #include "d3dclass.h" const bool FULL_SCREEN = false; const bool VSYNC_ENABLED = true; const float SCREEN_DEPTH = 1000.0f; const float SCREEN_NEAR = 0.3f; class ApplicationClass { public: ApplicationClass(..

1. WinMain #include "Systemclass.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pScmdline, int iCmdshow) { SystemClass* System; bool result; // Create the system object. System = new SystemClass; // Initialize and run the system object. result = System->Initialize(); if (result) { System->Run(); } // Shutdown and release the system object. System->Shutdown(); delete Sys..
DirectXMath의 변환 함수로 앞의 Vector과 Matrix를 사용한다.\ // 비례행렬 만들기 // 1. 계수 사용 XMMATIX XM_CALLCONV XMMatrixScaling( float ScaleX, float ScaleY, float ScaleZ); // 2. 벡터 사용 XMMATRIX XM_CALLCONV XMMatrixScaling( FXMVECTROR Scale); // 회전행렬 만들기 (Angle은 시계방향 각도) // 1. X축 회전 XMMATRIX XM_CALLCONV XMMatrixRotationX( float Angle); // 2. Y축 회전 XMMATRIX XM_CALLCONV XMMatrixRotationY( float Angle); // 3. Z축 회전 XMMATR..