DirectX 9阴影不是线性的?

时间:2012-05-16 09:36:09

标签: directx pixel-shading

我正在使用托管的DirectX9和C#。我对cnc机器进行了可视化。

在计算机1上它完美运行。圆管在左侧是亮灰色,阴影线性为深灰色。

在计算机2上我得到了不同的东西(相同的代码!): 它只是左边的白色,右边的深灰色,但它不是线性的。它仍为白色至约45%的管,黑色为55%。阴影只在这些点可见之间....

任何想法???

看起来我使用太亮的光,但代码完全一样......

/编辑 好的是截图: Left is wrong shading, right is correct 有问题的电脑是i3 + Intel板载图形+ Win7 64Bit 具有正确可视化的计算机是具有板载和XP 32Bit的较旧的英特尔

以下是DirectX的设置:

PresentParameters aPresentParams = new PresentParameters();
aPresentParams.Windowed = true;
aPresentParams.DeviceWindow = theControl;
aPresentParams.DeviceWindowHandle = theControl.Handle;
aPresentParams.SwapEffect = SwapEffect.Copy;
aPresentParams.EnableAutoDepthStencil = true;
aPresentParams.AutoDepthStencilFormat = DepthFormat.D16;
CreateFlags aCreateFlags = CreateFlags.HardwareVertexProcessing;
itsDevice = new Device(0, DeviceType.Hardware, theControl, aCreateFlags, aPresentParams);
itsDevice.RenderState.AntiAliasedLineEnable = true;
itsDevice.RenderState.CullMode = Cull.None;
//some materials...
itsMaterialBasic.Diffuse = Color.LightGray;
itsMaterialBasic.Ambient = Color.FromArgb(0, 80, 80, 80);
itsMaterialBasic.Specular = Color.Red;
itsMaterialBasic.SpecularSharpness = 1000.0f;
//...
itsDevice.RenderState.Lighting = true;
itsDevice.Lights[0].Type = LightType.Point;
itsDevice.Lights[0].Diffuse = Color.LightGray;
itsDevice.Lights[0].Range = 10000f;
itsDevice.Lights[0].Falloff = 10f;
itsDevice.Lights[0].Direction = new Vector3(-5, -28, 10);
itsDevice.Lights[0].Position = new Vector3(1000, 2000, 3350);
itsDevice.Lights[0].Attenuation0 = 0f;
itsDevice.Lights[0].Update();
itsDevice.Lights[0].Enabled = true;
itsDevice.RenderState.ShadeMode = ShadeMode.Phong;
itsDevice.RenderState.SpecularEnable = true;
itsDevice.RenderState.SpecularMaterialSource = ColorSource.Color1;
itsDevice.RenderState.Ambient = Color.FromArgb(110, 110, 110);
itsDevice.RenderState.AmbientMaterialSource = ColorSource.Color1;

1 个答案:

答案 0 :(得分:0)

我有新闻!!! computer1..n: Intel i7集成图形或新显卡: 软件和硬件逆处理:错误

computer0: 带有旧显卡的32位WinXP: Hardwarevertexprocessing:正确 Softwarevertexprocessing:错误

我尝试使用着色器。但我也得到错误的可视化。 我通过三角形内的2个向量的交叉积来为三角形的3个顶点生成法线(并将它们标准化)。但是,当我使用pixelhader返回值(rgb)的normal.XYZ值时,它应该看起来像普通的地图。但有些部分只是一种颜色......

真正疯狂的事情:它与来自互联网的简单教程示例相同!!!!我的代码怎么了??????