DirectXToolKit を使用しています。このようなモデルを作成しました
m_Model = Model::CreateFromCMO(device, L"Content/Meshes/cube.cmo", *m_EffectFactory);
また、DirectX::IEffect から継承して作成したカスタム エフェクトを使用したいと考えています。
m_ModelEffect = std::make_shared<UnlitEffect>(device);
ただし、DirectX::Model はデフォルトで独自の効果を作成します。つまり、独自のシェーダーを使用するには、それらを次のように置き換える必要があります。
MeshPart::ModifyEffect(ID3D11Device* d3dDevice, std::shared_ptr<IEffect>& ieffect, bool isalpha);
自分の効果をその関数に送信する方法について混乱しています。
これが私が今使っているコードです:
for(const auto& mesh : m_Model->meshes)
{
for(const auto& part : mesh->meshParts)
{
part->ModifyEffect(device, &m_ModelEffect);
}
}
ただし、これによりこのエラーが発生 initial value of reference to non-const must be an lvalue
しますそのエラーを検索すると、関数シグネチャを const 参照を使用するように変更することを含む多くの解決策が得られますが、関数を変更せずにそのまま使用するにはどうすればよいでしょうか? shared_ptr のアドレスを渡す適切な方法は何ですか?
編集:このコードを使用して動作するようになりました
m_ModelEffect = std::make_shared<UnlitEffect>(device);
m_Model = Model::CreateFromCMO(device, L"Content/Meshes/cube.cmo", *m_EffectFactory);
for(auto& mesh : m_Model->meshes)
{
for(auto& part : mesh->meshParts)
{
part->ModifyEffect(device, m_ModelEffect);
}
}