本文整理汇总了C++中Mat4x4::affineTransformation2D方法的典型用法代码示例。如果您正苦于以下问题:C++ Mat4x4::affineTransformation2D方法的具体用法?C++ Mat4x4::affineTransformation2D怎么用?C++ Mat4x4::affineTransformation2D使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mat4x4
的用法示例。
在下文中一共展示了Mat4x4::affineTransformation2D方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnDraw
void SpriteBase::OnDraw() {
auto TexPtr = App::GetApp()->GetResource<TextureResource>(m_TextureResName);
auto Dev = App::GetApp()->GetDeviceResources();
auto pD3D11DeviceContext = Dev->GetD3DDeviceContext();
auto RenderState = Dev->GetRenderState();
//ワールド行列の決定
Mat4x4 World;
World.affineTransformation2D(
m_Scale, //スケーリング
Vec2(0, 0), //回転の中心(重心)
m_Rot, //回転角度
m_Pos //位置
);
//射影行列の決定
float w = static_cast<float>(App::GetApp()->GetGameWidth());
float h = static_cast<float>(App::GetApp()->GetGameHeight());
Mat4x4 Proj(XMMatrixOrthographicLH(w, h, -1.0, 1.0f));
//行列の合成
World *= Proj;
//コンスタントバッファの準備
SpriteConstantBuffer sb;
//エミッシブ加算。
sb.Emissive = m_Emissive;
//行列の設定
sb.World = World;
//コンスタントバッファの更新
pD3D11DeviceContext->UpdateSubresource(CBSprite::GetPtr()->GetBuffer(), 0, nullptr, &sb, 0, 0);
//ストライドとオフセット
UINT stride = sizeof(VertexPositionColorTexture);
UINT offset = 0;
//頂点バッファのセット
pD3D11DeviceContext->IASetVertexBuffers(0, 1, m_SquareMesh->GetVertexBuffer().GetAddressOf(), &stride, &offset);
//インデックスバッファのセット
pD3D11DeviceContext->IASetIndexBuffer(m_SquareMesh->GetIndexBuffer().Get(), DXGI_FORMAT_R16_UINT, 0);
//描画方法(3角形)
pD3D11DeviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
//コンスタントバッファの設定
ID3D11Buffer* pConstantBuffer = CBSprite::GetPtr()->GetBuffer();
ID3D11Buffer* pNullConstantBuffer = nullptr;
//頂点シェーダに渡す
pD3D11DeviceContext->VSSetConstantBuffers(0, 1, &pConstantBuffer);
//ピクセルシェーダに渡す
pD3D11DeviceContext->PSSetConstantBuffers(0, 1, &pConstantBuffer);
//シェーダの設定
pD3D11DeviceContext->VSSetShader(VSPCTSprite::GetPtr()->GetShader(), nullptr, 0);
pD3D11DeviceContext->PSSetShader(PSPCTSprite::GetPtr()->GetShader(), nullptr, 0);
//インプットレイアウトの設定
pD3D11DeviceContext->IASetInputLayout(VSPCTSprite::GetPtr()->GetInputLayout());
//ブレンドステート
switch (m_BlendState) {
case BlendState::Opaque:
pD3D11DeviceContext->OMSetBlendState(RenderState->GetOpaque(), nullptr, 0xffffffff);
break;
case BlendState::Trace:
pD3D11DeviceContext->OMSetBlendState(RenderState->GetAlphaBlendEx(), nullptr, 0xffffffff);
break;
case BlendState::Additive:
pD3D11DeviceContext->OMSetBlendState(RenderState->GetAdditive(), nullptr, 0xffffffff);
break;
}
//デプスステンシルステート
pD3D11DeviceContext->OMSetDepthStencilState(RenderState->GetDepthNone(), 0);
//ラスタライザステート
pD3D11DeviceContext->RSSetState(RenderState->GetCullBack());
//テクスチャとサンプラーの設定
ID3D11ShaderResourceView* pNull[1] = { 0 };
pD3D11DeviceContext->PSSetShaderResources(0, 1, TexPtr->GetShaderResourceView().GetAddressOf());
//ラッピングサンプラー
ID3D11SamplerState* pSampler = RenderState->GetLinearWrap();
pD3D11DeviceContext->PSSetSamplers(0, 1, &pSampler);
//描画
pD3D11DeviceContext->DrawIndexed(m_SquareMesh->GetNumIndicis(), 0, 0);
//後始末
Dev->InitializeStates();
}