До сих пор я делал очень простой куб, но цвета, которые я использую, являются неправильными. Если я определяю Red в моем Vertex Buffer, то есть no красный во всех точках на кубе!Отображаются неправильные цвета - Direct3D
Красный переходит в светло-зеленый
Желтый идет в Light Blue
....
Некоторые цвета, как зеленый, черный, ... являются найти, только некоторые из них !! Вот как я определяю мой Vertex Buffer (игнорировать /*UV Coords*/
)
Vertex vertices[] =
{
//Front face vertices
{ XMFLOAT3(-1.0f, +1.0f, +1.0f), /*XMFLOAT2(0.5f, 0.0f)*/ Colors::Yellow },
{ XMFLOAT3(+1.0f, +1.0f, +1.0f), /*XMFLOAT2(1.0f, 0.0f)*/ Colors::Yellow },
{ XMFLOAT3(-1.0f, -1.0f, +1.0f), /*XMFLOAT2(0.5f, 1.0f)*/ Colors::Yellow },
{ XMFLOAT3(+1.0f, -1.0f, +1.0f), /*XMFLOAT2(1.0f, 1.0f)*/ Colors::Yellow },
//Back face vertices
{ XMFLOAT3(-1.0f, +1.0f, -1.0f), /*XMFLOAT2(0.5f, 0.0f)*/ Colors::Yellow },
{ XMFLOAT3(+1.0f, +1.0f, -1.0f), /*XMFLOAT2(1.0f, 0.0f)*/ Colors::Yellow },
{ XMFLOAT3(-1.0f, -1.0f, -1.0f), /*XMFLOAT2(0.5f, 1.0f)*/ Colors::Yellow },
{ XMFLOAT3(+1.0f, -1.0f, -1.0f), /*XMFLOAT2(1.0f, 1.0f)*/ Colors::Yellow },
//Right face vertices
{ XMFLOAT3(+1.0f, +1.0f, -1.0f), /*XMFLOAT2(1.0f, 0.0f)*/ Colors::Yellow },
{ XMFLOAT3(+1.0f, -1.0f, -1.0f), /*XMFLOAT2(1.0f, 1.0f)*/ Colors::Yellow },
{ XMFLOAT3(+1.0f, +1.0f, +1.0f), /*XMFLOAT2(0.5f, 0.0f)*/ Colors::Yellow },
{ XMFLOAT3(+1.0f, -1.0f, +1.0f), /*XMFLOAT2(0.5f, 1.0f)*/ Colors::Yellow },
//Left face vertices
{ XMFLOAT3(-1.0f, +1.0f, -1.0f), /*XMFLOAT2(0.5f, 0.0f)*/ Colors::Yellow },
{ XMFLOAT3(-1.0f, -1.0f, -1.0f), /*XMFLOAT2(0.5f, 1.0f)*/ Colors::Yellow },
{ XMFLOAT3(-1.0f, +1.0f, +1.0f), /*XMFLOAT2(0.0f, 0.0f)*/ Colors::Yellow },
{ XMFLOAT3(-1.0f, -1.0f, +1.0f), /*XMFLOAT2(0.0f, 1.0f)*/ Colors::Yellow },
//Top face vertices
{ XMFLOAT3(+1.0f, +1.0f, -1.0f), /*XMFLOAT2(0.5f, 1.0f)*/ Colors::Yellow },
{ XMFLOAT3(-1.0f, +1.0f, -1.0f), /*XMFLOAT2(0.0f, 1.0f)*/ Colors::Yellow },
{ XMFLOAT3(+1.0f, +1.0f, +1.0f), /*XMFLOAT2(0.5f, 0.0f)*/ Colors::Yellow },
{ XMFLOAT3(-1.0f, +1.0f, +1.0f), /*XMFLOAT2(0.0f, 0.0f)*/ Colors::Yellow },
//Bottom face vertices
{ XMFLOAT3(+1.0f, -1.0f, -1.0f), /*XMFLOAT2(0.5f, 1.0f)*/ Colors::Yellow },
{ XMFLOAT3(-1.0f, -1.0f, -1.0f), /*XMFLOAT2(0.0f, 1.0f)*/ Colors::Yellow },
{ XMFLOAT3(+1.0f, -1.0f, +1.0f), /*XMFLOAT2(0.5f, 0.0f)*/ Colors::Yellow },
{ XMFLOAT3(-1.0f, -1.0f, +1.0f), /*XMFLOAT2(0.0f, 0.0f)*/ Colors::Yellow }
};
Здесь я тестировал только с Желтой, результат:
Некоторая информация:
Vertex Состав:
struct Vertex
{
XMFLOAT3 pos;
XMVECTORF32 color;
};
The Colours Enum от DirectXColors.h
. Он использует для цветов XMVECTORF32
.
Мои действительно основной Pixel Shader:
struct PixelIN
{
float4 pos : SV_POSITION;
float4 color : COLOR;
};
float4 main(PixelIN i) : SV_TARGET
{
return i.color;
}
Мой Input Layout Описание:
D3D11_INPUT_ELEMENT_DESC ie[] = {
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0}
};
BufferDesc.Format
имеет значение DXGI_FORMAT_R8G8B8A8_UNORM
Спасибо за помощь!
Несколько вопросов: Как выглядит ваша структура «Vertex»? Какова ценность 'Colors :: Yellow'? Можете ли вы опубликовать код для своего пиксельного шейдера и объявления ввода макета? Какой «BufferDesc.Format» вы использовали при создании своей своп-цепи? – megadan
Добавлена информация! Спасибо за помощь! ; D – Rakete1111
Вы можете посмотреть [DirectX Tool Kit] (https://directxtk.codeplex.com/) для некоторых примерных структур вершин с соответствующими макетами ввода ('' VertexPositionColor'') и примерными шейдерами ('' BasicEffect «и друзья». –