В настоящее время, я вычисляю Матрицу прогноза мирового вида в моем приложении вместо графического процессора. Я хочу переместить этот расчет на GPU, но в настоящее время я не могу этого сделать.Матричное умножение не работает в моем вершинном шейдере
Корпус 1 (см. Ниже) работает очень хорошо, но в случае 2 нет, и я понятия не имею, что я сделал неправильно.
В моем классе камеры, я вычислить матрицы Просмотр и Проекционных так:
ViewMatrix = SharpDX.Matrix.LookAtLH(_cameraPosition, _lookAtPosition, SharpDX.Vector3.UnitY);
ProjectionMatrix = SharpDX.Matrix.PerspectiveFovLH((float)Math.PI/4.0f, renderForm.ClientSize.Width/(float)renderForm.ClientSize.Height, 0.1f, 500.0f);
Затем рассчитать Всемирную матрицы для каждого из моих моделей в процессе визуализации:
SharpDX.Matrix worldMatrix = SharpDX.Matrix.Translation(_position);
Случай 1: Расчет матрицы в моем приложении
При визуализации модели, рассчитать миросозерцания матрицы проекции так:
SharpDX.Matrix matrix = SharpDX.Matrix.Multiply(worldMatrix, camera.ViewMatrix);
matrix = SharpDX.Matrix.Multiply(matrix, camera.ProjectionMatrix);
matrix.Transpose();
И в моем вершинном шейдере, рассчитать конечное положение моих вершин по телефону:
output.pos = mul(input.pos, WVP);
И все работает отлично!
Случай 2: Расчет матрицы в HLSL
Вместо вычисление ничего в моем приложении, я просто пишу три матрицы мира, Посмотреть и Проекционных в постоянный буфер моих вершинных шейдеров и рассчитать все в HLSL:
matrix mat = mul(World, View);
mat = mul(mat, Projection);
mat = transpose(mat);
output.pos = mul(input.pos, mat);
Это действительно работает. Я ничего не вижу в своей сцене. Поэтому я предполагаю, что некоторые вычисления были неправильными. Я проверил свой код несколько раз.
Либо я слепой или глупый. Что я сделал не так?
Это могут быть результаты различий в том, обрабатываются ли матрицы как рядовые или столбчатые. Вы пытались удалить транспозицию из шейдера в примере 2? –
Привет, Адам Майлз! Спасибо за ваш ответ. Я уже пробовал это. Когда я удаляю транспонирование в случае 1, я не вижу своих моделей. При удалении транспонирования в случае 2 я все еще не вижу их. – Endgegner85
Вы пытались использовать любые отладчики GPU, например, встроенные в Visual Studio? Возможно, стоит проверить содержимое константного буфера, как и следовало ожидать. –