Пожалуйста, скажите мне, что я делаю неправильно: , что мой классSlimDX Установка камеры
public class Camera
{
public Matrix view;
public Matrix world;
public Matrix projection;
public Vector3 position;
public Vector3 target;
public float fov;
public Camera(Vector3 pos, Vector3 tar)
{
this.position = pos;
this.target = tar;
view = Matrix.LookAtLH(position, target, Vector3.UnitY);
projection = Matrix.PerspectiveFovLH(fov, 1.6f, 0.001f, 100.0f);
world = Matrix.Identity;
}
}
камеры, что мой Constant буфер структура:
struct ConstantBuffer
{
internal Matrix mWorld;
internal Matrix mView;
internal Matrix mProjection;
};
и здесь я рисую треугольник и установка камеры:
x+= 0.01f;
camera.position = new Vector3(x, 0.0f, 0.0f);
camera.view = Matrix.LookAtLH(camera.position, camera.target, Vector3.UnitY);
camera.projection = Matrix.PerspectiveFovLH(camera.fov, 1.6f, 0.0f, 100.0f);
var buffer = new Buffer(device, new BufferDescription
{
Usage = ResourceUsage.Default,
SizeInBytes = sizeof(ConstantBuffer),
BindFlags = BindFlags.ConstantBuffer
});
////////////////////////////// camera setup
ConstantBuffer cb;
cb.mProjection = Matrix.Transpose(camera.projection);
cb.mView = Matrix.Transpose(camera.view);
cb.mWorld = Matrix.Transpose(camera.world);
var data = new DataStream(sizeof(ConstantBuffer), true, true);
data.Write(cb);
data.Position = 0;
context.UpdateSubresource(new DataBox(0, 0, data), buffer, 0);
//////////////////////////////////////////////////////////////////////
// set the shaders
context.VertexShader.Set(vertexShader);
context.PixelShader.Set(pixelShader);
// draw the triangle
context.Draw(4, 0);
swapChain.Present(0, PresentFlags.None);
Пожалуйста, если вы видите, что случилось, скажите! :) Я провел два дня пишу это уже ..
Попытка вторая:
@paiden Я инициализируется FOV сейчас (спасибо очень много :)), но до сих пор никакого эффекта (теперь это не FOV = 1,5707963267 е;) и @Nico Schertler, спасибо вам тоже, я положил его в использовании по
context.VertexShader.SetConstantBuffer(buffer, 0);
context.PixelShader.SetConstantBuffer(buffer, 0);
, но никакого эффекта до сих пор ... наверное мой файл .fx не так? для чего мне это нужно:
cbuffer ConstantBuffer : register(b0) { matrix World; matrix View; matrix Projection; }
Attepmpt третий: @MHGameWork Большое спасибо тоже, но никакого эффекта до сих пор;) Если у кого есть 5 минут, я могу просто упасть исходный код к его/ее по электронной почте, а затем мы будем публиковать ответ ... Я думаю, что это сильно поможет некоторым новичкам, как я :)
unsafe
{
x+= 0.01f;
camera.position = new Vector3(x, 0.0f, 0.0f);
camera.view = Matrix.LookAtLH(camera.position, camera.target, Vector3.UnitY);
camera.projection = Matrix.PerspectiveFovLH(camera.fov, 1.6f, 0.01f, 100.0f);
var buffer = new Buffer(device, new BufferDescription
{
Usage = ResourceUsage.Default,
SizeInBytes = sizeof(ConstantBuffer),
BindFlags = BindFlags.ConstantBuffer
});
сейчас проблема - ВИЖУ МОЕ TRIANGLE НО КАМЕРА НЕ ПЕРЕДВИГАЕТ
В чем проблема? Я не могу найти место, где вы фактически устанавливаете постоянный буфер ('context.VertexShader.SetConstantBuffer (...)'). –
Единственная проблема, я вижу, это та камера.fov никогда не инициализируется (это будет 0.0 -> вы ничего не увидите). Но я не знаю, является ли это просто копией и вставкой ошибки в примере кода. – paiden