我想在SharpDX中绘制一个立方体。这是我目前的结果:
正如您所看到的,在某些时候,立方体的某些部分会被切割。
我不知道哪个设置有问题,它可能是什么?我认为这个观点有问题。我试图创建一个透视图,但我从来没有得到另一个结果而不是一个空窗口。
这是我的代码:
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;
}
有什么问题?
答案 0 :(得分:0)
Alex指出:剪裁平面有问题。我将RasterizerStateDescription IsDepthClipEnabled
更改为false
。然后我有了我的完整立方体,但没有正确的视角。
我对透视图的问题有多种原因。一个原因是,我没有转换投影矩阵(Roger Rowland指出)。
我问here (gamedev.stackexchange.com)并且:
第二个是,在我设定视角后,我使用了一些转换。这造成了一些奇怪的变形。
第三个原因是,我为立方体设置了错误的坐标。结果是错误的剔除。