목차

     

     


     

    Texture

     

     


    Rotation 원리

     

     

    https://learn.microsoft.com/ko-kr/windows/win32/direct2d/how-to-rotate

     

    개체를 회전하는 방법 - Win32 apps

    개체를 회전하는 방법을 보여줍니다.

    learn.microsoft.com

     

    http://www.directxtutorial.com/Lesson.aspx?lessonid=9-4-5 

     

    DirectXTutorial.com

    In the last lesson you built a simple, flat triangle lit with simple diffuse lighting. This triangle was not 3D, it was flat. If you managed to change it, you found it was a 2D triangle drawn in screen coordinates. The triangle you made was pre-transformed

    www.directxtutorial.com


     

    Rotation Demo

     

    RotationDemo.h

    더보기
    #pragma once
    #include "Systems/IExecute.h"
    
    class RotationDemo : public IExecute
    {
    public:
    	virtual void Initialize() override;
    	virtual void Ready() override {}
    	virtual void Destroy() override;
    	virtual void Update() override;
    	virtual void PreRender() override {}
    	virtual void Render() override;
    	virtual void PostRender() override {}
    	virtual void ResizeScreen() override {}
    
    private:
    	Shader* shader;
    
    	Vertex vertices[6];
    	ID3D11Buffer* vertexBuffer;
    
    	float z = 0.0f;
    	Matrix world;
    };

     

     

    RotationDemo.cpp

    더보기
    #include "stdafx.h"
    #include "RotationDemo.h"
    
    void RotationDemo::Initialize()
    {
    	Context::Get()->GetCamera()->Position(0, 0, -5.0f);
    
    	shader = new Shader(L"09_World.fx");
    	
    	//좌측하단 기준으로 회전
    	//vertices[0].Position = Vector3(+0.0f, +0.0f, 0.0f);
    	//vertices[1].Position = Vector3(+0.0f, +0.5f, 0.0f);
    	//vertices[2].Position = Vector3(+0.5f, +0.0f, 0.0f);
    	//vertices[3].Position = Vector3(+0.5f, +0.0f, 0.0f);
    	//vertices[4].Position = Vector3(+0.0f, +0.5f, 0.0f);
    	//vertices[5].Position = Vector3(+0.5f, +0.5f, 0.0f);
    
    	//중앙 기준으로 회전
    	vertices[0].Position = Vector3(-0.5f, -0.5f, 0.0f);
    	vertices[1].Position = Vector3(-0.5f, +0.5f, 0.0f);
    	vertices[2].Position = Vector3(+0.5f, -0.5f, 0.0f);
    	vertices[3].Position = Vector3(+0.5f, -0.5f, 0.0f);
    	vertices[4].Position = Vector3(-0.5f, +0.5f, 0.0f);
    	vertices[5].Position = Vector3(+0.5f, +0.5f, 0.0f);
    
    	D3D11_BUFFER_DESC desc;
    	ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
    	desc.ByteWidth = sizeof(Vertex) * 6;
    	desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    
    	D3D11_SUBRESOURCE_DATA subResource = { 0 };
    	subResource.pSysMem = vertices;
    
    	Check(D3D::GetDevice()->CreateBuffer(&desc, &subResource, &vertexBuffer));
    
    
    	D3DXMatrixIdentity(&world);
    }
    
    void RotationDemo::Destroy()
    {
    	SafeDelete(shader);
    
    	SafeRelease(vertexBuffer);
    }
    
    void RotationDemo::Update()
    {
    	if (Keyboard::Get()->Press(VK_RIGHT))
    	{
    		z += 20 * Time::Delta();
    	}
    	else if (Keyboard::Get()->Press(VK_LEFT))
    	{
    		z -= 20 * Time::Delta();
    	}
    
    	D3DXMatrixRotationZ(&world, z * Math::ToRadian(z));
    }
    
    void RotationDemo::Render()
    {
    	shader->AsMatrix("World")->SetMatrix(world);
    	shader->AsMatrix("View")->SetMatrix(Context::Get()->View());
    	shader->AsMatrix("Projection")->SetMatrix(Context::Get()->Projection());
    
    
    	UINT stride = sizeof(Vertex);
    	UINT offset = 0;
    
    	D3D::GetDC()->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);
    	D3D::GetDC()->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
    
    	shader->Draw(0, 0, 6);
    }

     

    Rotation 실행화면

     

    좌측하단 기준 회전

     

    중앙 기준 회전

     

     


     

    UV 좌표계

     

     

    https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sipack7297&logNo=220424401873 

     

    [D3D] 5장 : 텍스처(Texture)

    텍스처(Texture)  - 일반적으로 2차원 텍스처를 사용한다. 텍스처 좌표계(Texture Coordinate Sys...

    blog.naver.com

     

     


     

    Texture.fx

     

    Texture.fx

    더보기
    matrix World;
    matrix View;
    matrix Projection;
    Texture2D Map;
    
    struct VertexInput
    {
        float4 Position : Position;
        float2 Uv : Uv;
    };
    
    struct VertexOutput
    {
        float4 Position : SV_Position;
        float2 Uv : Uv;
    };
    
    VertexOutput VS(VertexInput input)
    {
        VertexOutput output;
        output.Position = mul(input.Position, World);
        output.Position = mul(output.Position, View);
        output.Position = mul(output.Position, Projection);
        
        output.Uv = input.Uv;
        
        return output;
    }
    
    SamplerState Samp;
    float4 PS(VertexOutput input) : SV_Target
    {
        return Map.Sample(Samp, input.Uv);
    }
    
    RasterizerState FillMode_Wireframe
    {
        FillMode = Wireframe;
    };
    
    technique11 T0
    {
        pass P0
        {
            SetVertexShader(CompileShader(vs_5_0, VS()));
            SetPixelShader(CompileShader(ps_5_0, PS()));
        }
    
        pass P1
        {
            SetRasterizerState(FillMode_Wireframe);
    
            SetVertexShader(CompileShader(vs_5_0, VS()));
            SetPixelShader(CompileShader(ps_5_0, PS()));
        }
    }

     

    Texture2D Map; 추가

    float2 Uv : Uv 추가

    output.Uv = input.Uv

     

    SamplerState Samp;
    float4 PS(VertexOutput input) : SV_Target
    {
        return Map.Sample(Samp, input.Uv);
    }

     


     

    Texture

     

    Texture.h

    더보기
    #pragma once
    #include "Systems/IExecute.h"
    
    class TextureDemo : public IExecute
    {
    public:
    	virtual void Initialize() override;
    	virtual void Ready() override {}
    	virtual void Destroy() override;
    	virtual void Update() override;
    	virtual void PreRender() override {}
    	virtual void Render() override;
    	virtual void PostRender() override {}
    	virtual void ResizeScreen() override {}
    
    private:
    	Shader* shader;
    
    	VertexTexture vertices[6];
    	ID3D11Buffer* vertexBuffer;
    
    	UINT indices[6] = { 0, 1, 2, 2, 1, 3 };
    	ID3D11Buffer* indexBuffer;
    
    	Matrix world;
    	ID3D11ShaderResourceView* srv;
    };

     

    VertexTexture vertices[6];

    UINT indices[6] = { 0, 1, 2, 2, 1, 3};

    ID3D11ShaderResourceView* srv;

     

    Texture.cpp

    더보기
    #include "stdafx.h"
    #include "TextureDemo.h"
    
    void TextureDemo::Initialize()
    {
    	Context::Get()->GetCamera()->Position(0, 0, -5.0f);
    
    	shader = new Shader(L"16_Texture.fx");
    	
    	vertices[0].Position = Vector3(-0.5f, -0.5f, 0.0f);
    	vertices[1].Position = Vector3(-0.5f, +0.5f, 0.0f);
    	vertices[2].Position = Vector3(+0.5f, -0.5f, 0.0f);
    	vertices[3].Position = Vector3(+0.5f, +0.5f, 0.0f);
    
    	vertices[0].Uv = Vector2(0, 1);
    	vertices[1].Uv = Vector2(0, 0);
    	vertices[2].Uv = Vector2(1, 1);
    	vertices[3].Uv = Vector2(1, 0);
    
    
    
    	//Create Vertex Buffer
    	{
    		D3D11_BUFFER_DESC desc;
    		ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
    		desc.ByteWidth = sizeof(VertexTexture) * 4;
    		desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    
    		D3D11_SUBRESOURCE_DATA subResource = { 0 };
    		subResource.pSysMem = vertices;
    
    		Check(D3D::GetDevice()->CreateBuffer(&desc, &subResource, &vertexBuffer));
    	}
    
    	//Create Index Buffer
    	{
    		D3D11_BUFFER_DESC desc;
    		ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
    		desc.ByteWidth = sizeof(UINT) * 6;
    		desc.BindFlags = D3D11_BIND_INDEX_BUFFER;
    
    		D3D11_SUBRESOURCE_DATA subResource = { 0 };
    		subResource.pSysMem = indices;
    
    		Check(D3D::GetDevice()->CreateBuffer(&desc, &subResource, &indexBuffer));
    	}
    
    
    	D3DXMatrixIdentity(&world);
    
    	Check(D3DX11CreateShaderResourceViewFromFile
    	(
    		D3D::GetDevice(), L"../../_Textures/Box.png", NULL, NULL, &srv, NULL
    	));
    }
    
    void TextureDemo::Destroy()
    {
    	SafeDelete(shader);
    
    	SafeRelease(vertexBuffer);
    }
    
    void TextureDemo::Update()
    {
    	
    }
    
    void TextureDemo::Render()
    {
    	shader->AsMatrix("World")->SetMatrix(world);
    	shader->AsMatrix("View")->SetMatrix(Context::Get()->View());
    	shader->AsMatrix("Projection")->SetMatrix(Context::Get()->Projection());
    	shader->AsSRV("Map")->SetResource(srv);
    
    
    	UINT stride = sizeof(VertexTexture);
    	UINT offset = 0;
    
    	D3D::GetDC()->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);
    	D3D::GetDC()->IASetIndexBuffer(indexBuffer, DXGI_FORMAT_R32_UINT, 0);
    	D3D::GetDC()->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
    
    	shader->DrawIndexed(0, 0, 6);
    }

     

     

     


     

    Texture 실행화면

     

     

     

     

    '⭐ DirectX > DirectX11 3D' 카테고리의 다른 글

    [DirectX11] 018 Texture Sampler  (0) 2023.01.16
    [DirectX11] 017 Texture Load  (0) 2023.01.14
    [DirectX11] 015 Cube  (0) 2023.01.13
    [DirectX11] 013~014 Camera  (0) 2023.01.11
    [DirectX11] 012 Grid  (1) 2023.01.10