Quelle est la meilleure pratique pour rendre les sprites en DirectX 11?
Je suis en train d'essayer de s'habituer à l'API DirectX et je me demande qu'est-ce que l'approche habituelle pour afficher un sprite en DirectX 11 (par exemple, pour un clone de tetris).
Est-il un simmilar interface ID3DX10Sprite
, et si non, quel serait la méthode habituelle pour dessiner des sprites en DirectX 11?
Edit: Voici le code HLSL qui a fonctionné pour moi (le calcul de la projection de coordonner pourrait faire mieux):
struct SpriteData
{
float2 position;
float2 size;
float4 color;
};
struct VSOut
{
float4 position : SV_POSITION;
float4 color : COLOR;
};
cbuffer ScreenSize : register(b0)
{
float2 screenSize;
float2 padding; //cbuffer must have at least 16 bytes
}
StructuredBuffer<SpriteData> spriteData : register(t0);
float2 GetVertexPosition(uint VID)
{
[branch] switch(VID)
{
case 0:
return float2(0, 0);
case 1:
return float2(1, 0);
case 2:
return float2(0, 1);
default:
return float2(1, 1);
}
}
float4 ComputePosition(float2 positionInScreenSpace, float2 size, float2 vertexPosition)
{
float2 origin = float2(-1, 1);
float2 vertexPositionInScreenSpace = positionInScreenSpace + (size * vertexPosition);
return float4(origin.x + (vertexPositionInScreenSpace.x /(screenSize.x /2)), origin.y - (vertexPositionInScreenSpace.y /(screenSize.y /2)), 1, 1);
}
VSOut VShader(uint VID : SV_VertexID, uint SIID : SV_InstanceID)
{
VSOut output;
output.color = spriteData[SIID].color;
output.position = ComputePosition(spriteData[SIID].position, spriteData[SIID].size, GetVertexPosition(VID));
return output;
}
float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET
{
return color;
}
OriginalL'auteur Mario Pistrich | 2010-10-07
Vous devez vous connecter pour publier un commentaire.
Pas il n'y a pas d'équivalent. La méthode habituelle serait de tracer un triangle bande formant un quad.
Vous pourriez faire usage de l'instanciation, donc vous avez juste à mettre à jour un tampon avec le sprite de données (x, y de la position de l'écran en pixels, de l'id de la texture fetch dans une texture tableau, mise à l'échelle, rotation, couche, etc) et l'utilisation des shaders pour le rendu de tous les sprites en un seul appel.
Voici quelques HLSL informations croustillantes sur le dessus de ma tête:
Découvrez tous les D3D11 échantillons de DXSDK, et d'examiner attentivement la façon dont ils le font pour la création de Tampons, de les lier, de les mettre à jour, etc.
Wow, merci. Cela m'a vraiment aidé pour commencer 🙂
OriginalL'auteur Stringer