C# 我的Direct3D场景更新不起作用。我错过了什么?
我有一个winform,并在上面安装了direct3d以显示蓝色屏幕。C# 我的Direct3D场景更新不起作用。我错过了什么?,c#,winforms,directx,C#,Winforms,Directx,我有一个winform,并在上面安装了direct3d以显示蓝色屏幕。 渲染正在每帧运行。 下面(以及上面的一些顶点声明)将三角形输出到屏幕。。到目前为止都很酷 public void UpdateScene() { Vector3 translation = new Vector3 { X = whatever.X, Y = whatever.Y, Z = whatever.Z }; Matrix matrix = new Matrix();
渲染
正在每帧运行。
下面(以及上面的一些顶点声明)将三角形输出到屏幕。。到目前为止都很酷
public void UpdateScene()
{
Vector3 translation = new Vector3 { X = whatever.X, Y = whatever.Y, Z = whatever.Z };
Matrix matrix = new Matrix();
matrix.Translate(translation);
device.Transform.World = matrix;
}
public void Render()
{
if (device == null)
return;
//Clear the backbuffer to a blue color
device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
//Begin the scene
UpdateScene();
device.BeginScene();
// Rendering of scene objects can happen here
device.SetStreamSource(0, vertexBuffer, 0);
device.VertexFormat = CustomVertex.TransformedColored.Format;
device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);
//End the scene
device.EndScene();
device.Present();
}
cameraPosition.X Y和Z在每次传递时都会正确更新。。。你知道为什么我的物体看起来不前后移动(或者相机绕着它移动)吗
我也试过:
Vector3 translation = new Vector3 { X = whatever.X, Y = whatever.Y, Z = whatever.Z };
device.Transform.World.Translate(translation);
这是:
Vector3 translation = new Vector3 { X = whatever.X, Y = whatever.Y, Z = whatever.Z };
device.Transform.World = Matrix.Translation(translation);
我认为代码是相关的:您最好不要用相机将三角形变换到同一位置。Direct3D变换和投影算法基于真实世界的示例,就像使用相机拍摄图像一样。想象一下,如果你把东西放在相机的同一个位置,你能捕捉到它吗?您需要在它们之间保持一定距离。您的第二个代码段将摄影机位置组件放入了一个新的矢量3中,但您的第一个代码段具有X=cameraPosition.Z,Y=cameraPosition.Y,Z=cameraPosition.Z--这是故意的吗?谢谢,不,不是hehecan,你能用代码说明你是如何更新摄像机的吗?忽略变量名,我有一个模型,现在叫做摄像机位置,这一切都会改变。问题是,我无法让三角形移入和移出Z,因为转换似乎没有任何作用。变量名真的很糟糕。