错误的结果,在SharpDX中绘制一个立方体

时间:2014-05-19 14:43:09

标签: c# shader directx-11 sharpdx perspectivecamera

我想在SharpDX中绘制一个立方体。这是我目前的结果:

Cube

正如您所看到的,在某些时候,立方体的某些部分会被切割。

Cube2

我不知道哪个设置有问题,它可能是什么?我认为这个观点有问题。我试图创建一个透视图,但我从来没有得到另一个结果而不是一个空窗口。

这是我的代码:

struct Vertex
{
    public Vector4 position;
    public Color4 color;
    //...
}

SharpDX.Direct3D11.Buffer vertexBuffer;
SharpDX.Direct3D11.Buffer projBuffer;

Matrix projMatrix;

Vertex[] vertices;

初​​始化:

//...
BufferDescription description = new BufferDescription(sizeof(float) * 8 * vertices.Length, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None, 0);
vertexBuffer = SharpDX.Direct3D11.Buffer.Create(Device, vertices, description);

//To pass projection matrix to shader
projBuffer = new SharpDX.Direct3D11.Buffer(Device, Matrix.SizeInBytes, ResourceUsage.Default, BindFlags.ConstantBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0);
DeviceContext.VertexShader.SetConstantBuffer(1, projBuffer);

更新

projMatrix = Matrix.OrthoOffCenterLH(-10, 10, -screenRatio*10, screenRatio*10, 1f, 100f);

//How can i create a perspective view?
//projMatrix = Matrix.PerspectiveFovLH(1f, (float)width/height, 1f, 100f);

projMatrix *= Matrix.Rotation...

DeviceContext.UpdateSubresource(ref projMatrix, projBuffer);

着色器:

struct VOut
{
  float4 position : SV_POSITION;
  float4 color    : COLOR;
};

cbuffer meshBuffer : register(b1)
{
  float4x4 projMatrix;
}

VOut VShader(float4 position : POSITION, float4 color : COLOR)
{
  VOut output;

  output.position = mul(position, projMatrix);
  output.color = color;

  return output;
}

float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET
{
  return color;
}

有什么问题?

1 个答案:

答案 0 :(得分:0)

Alex指出:剪裁平面有问题。我将RasterizerStateDescription IsDepthClipEnabled更改为false。然后我有了我的完整立方体,但没有正确的视角。

我对透视图的问题有多种原因。一个原因是,我没有转换投影矩阵(Roger Rowland指出)。

我问here (gamedev.stackexchange.com)并且:

第二个是,在我设定视角后,我使用了一些转换。这造成了一些奇怪的变形。

第三个原因是,我为立方体设置了错误的坐标。结果是错误的剔除。