[DX] SimpleMath

vector·2025년 11월 9일

기존 offset으로 Position을 잡았던 부분을 Matrix를 활용

선행

SimpleMath.cpp / SimpleMath.h / SimpleMath.inl을 추가

Types.h 수정

기존

using Vec2 = DirectX::XMFLOAT2;
using Vec3 = DirectX::XMFLOAT3;
using Vec4 = DirectX::XMFLOAT4;

수정

#include <Windows.h>
#include "SimpleMath.h"

using Vec2 = DirectX::SimpleMath::Vector2;
using Vec3 = DirectX::SimpleMath::Vector3;
using Vec4 = DirectX::SimpleMath::Vector4;

using Matrix = DirectX::SimpleMath::Matrix;

Struct.h 수정

기존

Vec3 offset;
float dummy;

수정

Matrix matWorld = Matrix:Identity;
Matrix matView = Matrix:Identity;
Matrix matProjection = Matrix:Identity;

Game.h / Game.cpp 수정

기존

void Game::Update()
{
	_transformData.offset.x = 0.3f;
	_transformData.offset.y = 0.3f;
}

수정

void Game:;Update()
{
	Matrix matScale = Matrix::CreateScale(_localScale);
    Matrix matRotation = Matrix::CreateRotationX(_localRotation.x);
    matRotation *= Matrix::CreateRotationY(_localRotation.y);
    matRotation *= Matrix::CreateRotationZ(_localRotation.z);
    Matrix matTranslation = Matrix::CreateTranslation(_localPosition);
    
    Matrix matWorld = matScale * matRotation * matTranslation;
    _transformData.matWorld = matWorld;
}

Default.hlsl 수정

기존

cbuffer TransformData : register(b0)
{
	float4 offset;
}

VS_OUTPUT VS (VS_INPUT input)
{
	output.position = input.position + offset;
}

수정

cbuffer TransformData : register(b0)
{
	row_major matrix matWorld;
    row_major matrix matView;
    row_major matrix matProjection;
}

VS_OUTPUT VS (VS_INPUT input)
{
	float4 position = mul(input.position, matWorld);
    position = mul(position, matView);
    position = mul(position, matProjection);
    
    output.position = position;
}
profile
게임 클라이언트 프로그래머 준비중 (공부 및 기록용)

0개의 댓글