【发布时间】:2022-01-23 08:34:35
【问题描述】:
在我的 SharpDX Direct11 应用程序中渲染有一点问题。
我已经在纹理上测试了渲染场景,然后在 backBuffer 上绘制了这个纹理......但不幸的是,renderTexture 不包含应该绘制的图元。纹理仅由颜色填充。
github上的整个项目:https://github.com/Kordi3112/SharpDXTest11
带有渲染方法的主要代码部分:
public override void Render()
{
//Camera
var proj = Matrix.OrthoLH(3 * Form.Bounds.Width / Form.Bounds.Height, 3, 0.01f, 100f);
var view = Matrix.LookAtLH(new Vector3(0, 0, -10), new Vector3(0, 0, 20), Vector3.UnitY);
var viewProj = Matrix.Multiply(view, proj);
var world = Matrix.Identity;
var worldViewProj = world * viewProj;
worldViewProj.Transpose();
//Update wvp matrix
Context.UpdateSubresource(ref worldViewProj, ContantBuffer);
DrawOnTexture();
//Set BackBuffer as render target
Context.OutputMerger.SetTargets(depthView, renderView);
// Clear views
Context.ClearDepthStencilView(depthView, DepthStencilClearFlags.Depth, 1.0f, 0);
Context.ClearRenderTargetView(renderView, Color.Pink);
//Set TextureColor Shader
Effect2.ApplyShader(Context);
//Set Buffers
Context.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(VertexBuffer2, Utilities.SizeOf<VertexPositionColorTexture>(), 0));
Context.InputAssembler.SetIndexBuffer(IndexBuffer, Format.R32_UInt, 0);
//Set Texture to Shader
Context.PixelShader.SetShaderResource(0, RenderTexture.ShaderResourceView);
//Draw
Context.DrawIndexed(6, 0, 0);
// Present!
SwapChain.Present(0, PresentFlags.None);
}
private void DrawOnTexture()
{
//Set Color Shader
Effect1.ApplyShader(Context);
//Set Buffers
Context.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(VertexBuffer, Utilities.SizeOf<VertexPositionColor>(), 0));
Context.InputAssembler.SetIndexBuffer(IndexBuffer, Format.R32_UInt, 0);
//Set Target
RenderTexture.SetRenderTarget(Context, depthView);
//Clear Targets - Green Bgound
RenderTexture.ClearRenderTarget(Context, depthView, 0, 1, 0, 1);
//Draw on RenderTarget
Context.DrawIndexed(6, 0, 0);
}
调用后:Context.DrawIndexed(6, 0, 0); in private void DrawOnTexture() 应该绘制原语。
我的代码有什么问题?
【问题讨论】:
-
不确定
Matrix.Multiply和 * 是如何实现的,但请确保您的矩阵以正确的顺序相乘。通常对于 MVP,您会以相反的顺序相乘 Projection * View * Model。或者在您的情况下,模型将是world。接下来确保您的相机朝向正确的方向,如果您尝试绘制两个三角形(矩形),它们可能会因为没有朝向相机而被剔除。
标签: c# rendering directx-11 sharpdx