https://minusi.tistory.com/entry/XMVECTOR와-XMFLOAT

 

XMVECTOR와 XMFLOAT

DirectX12 외에도 일반적인 선형 대수 및 DirectX 응용 프로그램에 공통적인 그래픽 수한 연산을 위한 SIMD(single instruction multiple data) 친화적인 C++ 형식(type) 및 함수를 제공합니다. 이 라이브러리는 W..

minusi.tistory.com

XMVECTOR 타입은 DirectXMath에서 사용되는 핵심 벡터 타입입니다. XMVECTOR는 SIMD 하드웨어 레지스터에 대응되는데, 즉 128비트(단일정밀도 부동소수점 4개, 32 * 4비트) 크기의 타입을 SIMD 명령 하나로 네 값을 한 번에 처리할 수 있습니다.

x64 플랫폼 및 SSE2가 활성화된 x86 플랫폼에서 이 타입은 다음과 같이 정의됩니다:

typedef __m128 XMVECTOR;

 

__m128이 바로 SIMD 타입으로써, 벡터 계산시 이 타입이어야만 SIMD의 장점을 발휘할 수 있습니다. 단일정밀도 4개로 구성된 값이므로 4차원 벡터를 표현할 수 있지만, 나머지 요소들을 0으로 채워넣음으로써 2차원 및 3차원 벡터에서도 사용할 수 있습니다.

 

 

 

 

// Gets the world transformation matrix
XMMATRIX CSprite::GetWorldMatrix()
{
    XMMATRIX translation = XMMatrixTranslation(m_position.x, m_position.y, 0.0f );
    XMMATRIX rotationZ = XMMatrixRotationZ(m_rotation);
    XMMATRIX scale = XMMatrixScaling(m_scale.x, m_scale.y, 1.0f);
    return translation * rotationZ * scale;
}
void CDemoSprites::Render()
{
    // Check if D3D is ready
    if (m_pD3DContext == NULL)
        return;

    // Clear back buffer
    float color[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
    m_pD3DContext->ClearRenderTargetView(m_pD3DRenderTargetView, color);


    // Stride and offset
    UINT stride = sizeof(Vertex);
    UINT offset = 0;

    // Set vertex buffer
    m_pD3DContext->IASetInputLayout(m_pInputLayout);
    m_pD3DContext->IASetVertexBuffers(0, 1, &m_pVertexBuffer, &stride, &offset);
    m_pD3DContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);

    // Set shaders
    m_pD3DContext->VSSetShader(m_pVS, 0, 0);
    m_pD3DContext->PSSetShader(m_pPS, 0, 0);
    m_pD3DContext->PSSetShaderResources(0, 1, &m_pColorMap);
    m_pD3DContext->PSSetSamplers(0, 1, &m_pColorMapSampler);

    // Draw sprites
    for (int i = 0; i < 2; i++)
    {
        XMMATRIX world = m_Sprites[i].GetWorldMatrix( );
        XMMATRIX mvp = XMMatrixMultiply(world, m_vpMatrix);
        mvp = XMMatrixTranspose(mvp);

        m_pD3DContext->UpdateSubresource( m_MvpCB, 0, 0, &mvp, 0, 0 );
        m_pD3DContext->VSSetConstantBuffers( 0, 1, &m_MvpCB );

        m_pD3DContext->Draw(6, 0);
    }


    // Present back buffer to display
    m_pSwapChain->Present(0, 0);
}

https://copynull.tistory.com/260

 

[DirectX11] Tutorial 11 - 2D 렌더링

Tutorial 11 - 2D 렌더링 원문 : http://www.rastertek.com/dx11tut11.html 화면에 2D 이미지를 그리는 것은 정말 유용합니다. 예를 들어 대부분의 유저 인터페이스(UI), 스프라이트 시스템, 텍스트 엔진들은 2D..

copynull.tistory.com

 

 

 

 // Create world matrix buffer
    D3D11_BUFFER_DESC constDesc;
    ::ZeroMemory(&constDesc, sizeof(constDesc));
    constDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
    constDesc.ByteWidth = sizeof(XMMATRIX);
    constDesc.Usage = D3D11_USAGE_DEFAULT;
    hr = m_pD3DDevice->CreateBuffer(&constDesc, 0, &m_MvpCB);
    if (FAILED(hr)) {
        return false;
    }

    // Position and scale sprites
    m_Sprites[0].SetPosition(XMFLOAT2(400.0f, 600.0f));
    m_Sprites[1].SetPosition(XMFLOAT2(1200.0f, 600.0f));
    m_Sprites[0].SetScale(XMFLOAT2(0.5, 0.5));
    m_Sprites[1].SetScale(XMFLOAT2(0.5, 0.5));

    // Make world matrix
    XMMATRIX view = XMMatrixIdentity();

	//왼손 좌표계에 대한 사용자 지정 직교 투영 행렬을 만든다
    XMMATRIX projection = XMMatrixOrthographicOffCenterLH(
        0.0f, 800.0f, 0.0f, 600.0f, 0.1f, 100.0f);
    m_vpMatrix = XMMatrixMultiply(view, projection);

    // Set blend description
	//투명도 설정을 위해 블렌딩을 사용
	//투명한 텍스쳐를 사용하게 해준다
    D3D11_BLEND_DESC blendDesc;
    ::ZeroMemory(&blendDesc, sizeof(blendDesc));
    blendDesc.RenderTarget[0].BlendEnable = TRUE;
    blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
    blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
    blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_ONE;
    blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
    blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ZERO;
    blendDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO;
    blendDesc.RenderTarget[0].RenderTargetWriteMask = 0x0F;
    float blendFactor[4] = { 0.0f, 0.0f, 0.0f, 0.0f };

'기타 > directX' 카테고리의 다른 글

[DirectX11] 삼각형 그리기  (0) 2022.02.26
[DirectX11] 렌더링  (0) 2022.02.26
[DirectX11] 텍스쳐 그리기  (0) 2022.02.22
bonnate