DirectX 11 Instancing Shader
Verfasst: 24.07.2015, 11:35
Moin Moin alle zusammen.
Nach einem längeren Zeitraum habe ich mir mal wieder Zeit genommen um mich mit DirectX 11 auseinander zu setzten, das mach ich mit dem Buch "Introduction to 3D Game Programming with Directx 11" von Frank Luna. Nun wollte ich simples Instancing implementieren, ohne Beleuchtung und weiters. Auf seiten von DirectX war alles ziemlich schnell gemacht und den Shader, der im Buch verwendet wird, habe ich auf alles notwendig reduziert. Zuerst wollte ich ein 5 * 5 * 5 Feld an instanzierten Würfeln rendern, was auch auf den ersten Blick funktioniert, doch aus irgend einem Grund werden die Innenseiten der Würfel mit der Textur gerendert. Hier ein Bild:
Und das ist der Shader:
Ich habe, um ehrlich zu sein, keine Ahnung woran es sonst liegen könnte da ich bisher von HLSL und der Mathematik dahinter wenig Plan habe da ich, wie gesagt, mich erst mal wieder in die Thematik einarbeiten muss. Falls ihr noch mehr Code braucht einfach bescheid geben.
MfG BlackArma
Nach einem längeren Zeitraum habe ich mir mal wieder Zeit genommen um mich mit DirectX 11 auseinander zu setzten, das mach ich mit dem Buch "Introduction to 3D Game Programming with Directx 11" von Frank Luna. Nun wollte ich simples Instancing implementieren, ohne Beleuchtung und weiters. Auf seiten von DirectX war alles ziemlich schnell gemacht und den Shader, der im Buch verwendet wird, habe ich auf alles notwendig reduziert. Zuerst wollte ich ein 5 * 5 * 5 Feld an instanzierten Würfeln rendern, was auch auf den ersten Blick funktioniert, doch aus irgend einem Grund werden die Innenseiten der Würfel mit der Textur gerendert. Hier ein Bild:
Und das ist der Shader:
Code: Alles auswählen
//=============================================================================
// InstancedBasic.fx
//
// Basic instanced shader
//=============================================================================
Texture2D gDiffuseMap;
SamplerState gTextureSampler;
cbuffer cbPerObject
{
float4x4 gViewProj;
};
struct VertexIn
{
float3 PosL : POSITION;
float2 Tex : TEXCOORD;
row_major float4x4 World : WORLD;
uint InstanceId : SV_InstanceID;
};
struct VertexOut
{
float4 PosH : SV_POSITION;
float3 PosW : POSITION;
float2 Tex : TEXCOORD;
};
VertexOut VS(VertexIn vin)
{
VertexOut vout;
vout.PosW = mul(float4(vin.PosL, 1.0f), vin.World).xyz;
vout.PosH = mul(float4(vout.PosW, 1.0f), gViewProj);
vout.Tex = vin.Tex;
return vout;
}
float4 PS(VertexOut pin) : SV_Target
{
return gDiffuseMap.Sample( gTextureSampler, pin.Tex );
}
technique11 Color
{
pass P0
{
SetVertexShader( CompileShader( vs_5_0, VS() ) );
SetGeometryShader( NULL );
SetPixelShader( CompileShader( ps_5_0, PS() ) );
}
}
MfG BlackArma