我在C#中使用托管DirectX9。我做了一台cnc机器的可视化。DirectX 9阴影不是线性的吗?
在计算机1上它完美地工作。左侧的圆形管呈明亮的灰色,阴影与深灰色呈线形。
在计算机2上,我得到了一些不同的东西(代码相同!): 它只是白色在左边,深灰色在右边,但它不是线性的。它仍然是白色的约45%的管和黑暗的55%。一个阴影只在这两个点之间可见....
任何想法???
看起来像我使用光线太亮,但代码是完全一样的...
/编辑 确定这里是截图: 有问题的电脑是酷睿i3 +英特尔集成图形+ Win7的64位 用正确的可视化能力的计算机是一个较老的英特尔与onboardgraphic和XP 32位
下面是对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;
屏幕截图,或许是两台机器上的渲染和硬件规格的一个小列表将有所帮助。 – Ani
您是否尝试过在有问题的机器上初始化参考光栅器(DeviceType.Reference)?如果解决了这个问题 - 我会直接责怪那台机器上的驱动程序/ GPU组合。 – Ani
如果你使用自己的着色器:也许你忘了用着色器代码复制一些文件? – miloszmaki