Directx 11, senden mehrere Texturen, shader
mit diesem code kann ich senden Sie eine textur an den shader:
devcon->PSSetShaderResources(0, 1, &pTexture);
Natürlich machte ich die pTexture von: D3DX11CreateShaderResourceViewFromfile
Shader:
Texture2D Texture;
return color * Texture.Sample(ss, texcoord);
Ich bin derzeit nur das senden einer textur in den shader, aber ich würde Sie gerne mehrere Texturen, wie ist das möglich?
Danke.
sind Sie versuchen zu tun, mischen/multi-texturing?
InformationsquelleAutor Miguel P | 2012-07-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mithilfe Textur-Arrays. Wenn Sie füllen Sie Ihre
D3D11_TEXTURE2D_DESC
Blick auf dieArraySize
Mitglied. Dies desc, struct ist derjenige, der geleitet wird, umID3D11Device::CreateTexture2D
. Dann in deinem shader, Sie verwenden eine 3rd texcoord sampling-index, die zeigt, welcher 2D-textur im array auf die Sie sich beziehen.Update: ich habe erkannt, könnte man darüber reden, tun es über mehrere Aufrufe (d.h. für verschiedene geo), in welchem Fall Sie ein update für die shader-textur-Ressourcen-Ansicht. Wenn Sie mit dem effects-framework, die Sie verwenden können ID3DX11EffectShaderResourceVariable::SetResource, oder alternativ binden Sie eine neue textur mit
PSSetShaderResources
. Jedoch, wenn Sie versuchen, eine Mischung zwischen mehreren Texturen, dann sollten Sie die textur-arrays.Möglicherweise möchten Sie auch zu schauen in 3D-Texturen, die bieten eine Natürliche Art und Weise zu interpolieren zwischen benachbarten Texturen in das array (während 2D-arrays werden automatisch gespannt auf die nächste Ganzzahl) über das 3. element in der texcoord. Finden Sie die HLSL
sample
Bemerkungen.Nur eine Frage, wie kann ich wählte, wenn ich Zusammenführen möchten, so möchte ich nur merge in einigen Situationen? Deaktiviere ich die zweite texcoord?
Ich glaube nicht, verwenden Sie die Effekte-framework.
Ich mag die Idee, über die textur-arrays! Ill versuchen Sie es!
aktualisiert mit Kommentar zu 3d-Texturen.
InformationsquelleAutor Preet Kukreti
Können Sie mehrere Texturen, solange Ihre Anzahl nicht überschreiten shader-Profil Spezifikationen. Hier ist ein Beispiel:
HLSL-Code:
C++ - Code:
So zum Beispiel für den oben HLSL-code:
ODER:
HLSL-Namen können beliebig sein und muss nicht entsprechen bestimmten Namen - Indizes ausschließlich Angelegenheit. Während "registrieren(tXX);" - Anweisungen sind nicht erforderlich, würd ich dir empfehlen, Sie zu verwenden, um Verwechslungen zu vermeiden, als um die textur entspricht dem Steckplatz.
InformationsquelleAutor asmi84