D3D11 - передача веса и индексов смешивания в вершинный шейдер - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь передать смешанный вес и индексы моему вершинному шейдеру как float4s;структура, которая содержит данные для каждой вершины, выглядит следующим образом в C ++:

struct VertexType_Skin {
    XMFLOAT3 position;
    XMFLOAT2 texture;
    XMFLOAT3 normal;
    XMFLOAT4 boneIds;
    XMFLOAT4 boneWeights;
};

и в вершинном шейдере HLSL:

struct VS_IN {
    float3 position : POSITION;
    float2 tex : TEXCOORD0;
    float3 normal : NORMAL;
    float4 boneIds : BLENDINDICES;
    float4 boneWeights : BLENDWEIGHT;
};

Я устанавливаю буфер вершин следующим образом:C ++:

D3D11_BUFFER_DESC vertexBufferDesc = { sizeof(VertexType_Skin) * vertexCount, D3D11_USAGE_DEFAULT, D3D11_BIND_VERTEX_BUFFER, 0, 0, 0 };
vertexData = { skinVertices, 0 , 0 };
device->CreateBuffer(&vertexBufferDesc, &vertexData, &vertexBuffer);

Теперь я не уверен, почему, но, похоже, это совсем не рендерит мою сетку.Комментирование float4s в обеих структурах работает нормально (я пока не использую идентификаторы или веса, просто пытаюсь их передать).

Есть ли что-то очевидное, чего мне не хватает в этой настройке?

Спасибо!

1 Ответ

0 голосов
/ 28 октября 2018

Неважно, я понял это.Я не знаю, может ли это когда-нибудь кому-нибудь помочь, потому что это странно специфическая проблема, но здесь все равно идет.1003 *

unsigned int stride = sizeof(VertexType);//<-- this struct only contains position, uvs and normals
unsigned int offset = 0;

deviceContext->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);
deviceContext->IASetIndexBuffer(indexBuffer, DXGI_FORMAT_R32_UINT, 0);
deviceContext->IASetPrimitiveTopology(top);

Таким образом, вместо этого была решена проблема:

unsigned int stride = sizeof(VertexType_Skin);//<-- the updated struct with bone indices and weights
unsigned int offset = 0;

deviceContext->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);
deviceContext->IASetIndexBuffer(indexBuffer, DXGI_FORMAT_R32_UINT, 0);
deviceContext->IASetPrimitiveTopology(top);

Та-да, просто как пирог!Ура:)

...