Tôi hiện đang cố gắng làm quen với API DirectX và tôi tự hỏi phương pháp thông thường để hiển thị một sprite trong DirectX 11 (ví dụ: đối với bản sao tetris).Pratice tốt nhất để render sprites trong DirectX 11 là gì?
Có giao diện tương tự như ID3DX10Sprite
và nếu không, đó sẽ là phương pháp thông thường để vẽ họa tiết trong DirectX 11?
Edit: Đây là mã HLSL mà làm việc cho tôi (việc tính toán chiếu tọa độ có thể được thực hiện tốt hơn):
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;
}
Ông có thể cho tôi một ví dụ mã ngắn xin vui lòng? Tôi đấu tranh để bắt đầu với bộ đệm. –
Kiểm tra tất cả các mẫu D3D11 từ DXSDK, và xem xét cẩn thận cách chúng tạo ra bộ đệm, gắn chúng, cập nhật chúng, v.v. – Stringer
Wow, cảm ơn bạn. Điều này thực sự đã giúp tôi bắt đầu :) –