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