Я впервые использую прямой 3d и ищу способ представить ограничивающие прямоугольники (прямоугольники / цилиндры / сферы). Как мне наметить ограничивающую рамку? Это шейдер, или я использую что-то еще, чтобы создать контурную фигуру?
chasester
Самый простой способ — использовать список строк для создания ограничивающего тома каркаса устройства.
используя матрицу преобразования, вы можете масштабировать, переводить или вращать объем вокруг любого объекта в вашем трехмерном мире.
Выполнение этого требует 3 основных части:
(Следует отметить, что тот же принцип применим и к сферам, корпусам и т. Д.)
Шейдеры, которые я использую, выглядят так:
struct WIRE_VS_INPUT
{
float3 Position : POSITION;
float4 Color : COLOR0;
float3 Transform : TRANSFORM;
float3 Size : SIZE;
};
struct WIRE_VS_OUTPUT
{
float4 Position : SV_POSITION;
float4 Color : COLOR0;
};
WIRE_VS_OUTPUT WireBoxVS( WIRE_VS_INPUT Input )
{
WIRE_VS_OUTPUT Output;
Output.Position = mul(float4((Input.Position * Input.Size) + Input.Transform,1),g_mWorldViewProjection);
Output.Color = Input.Color;
return Output;
}
float4 WireBoxPS( WIRE_VS_OUTPUT Input ) : SV_TARGET
{
return Input.Color;
}
Куб В.Б. & Настройка IB:
const DirectX::XMFLOAT3 kWireCube[] =
{
DirectX::XMFLOAT3(-1,-1,-1),
DirectX::XMFLOAT3(1,-1,-1),
DirectX::XMFLOAT3(1,1,-1),
DirectX::XMFLOAT3(-1,1,-1),
DirectX::XMFLOAT3(-1,-1,1),
DirectX::XMFLOAT3(1,-1,1),
DirectX::XMFLOAT3(1,1,1),
DirectX::XMFLOAT3(-1,1,1)
};
const WORD kWireCubeIndices[] =
{
0,1,
1,2,
2,3,
3,0,
4,5,
5,6,
6,7,
7,4,
0,4,
1,5,
2,6,
3,7
};
Других решений пока нет …