2012-05-16 112 views
1

我在C#中使用托管DirectX9。我做了一台cnc机器的可视化。DirectX 9阴影不是线性的吗?

在计算机1上它完美地工作。左侧的圆形管呈明亮的灰色,阴影与深灰色呈线形。

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

任何想法???

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

/编辑 确定这里是截图: Left is wrong shading, right is correct 有问题的电脑是酷睿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; 
+0

屏幕截图,或许是两台机器上的渲染和硬件规格的一个小列表将有所帮助。 – Ani

+1

您是否尝试过在有问题的机器上初始化参考光栅器(DeviceType.Reference)?如果解决了这个问题 - 我会直接责怪那台机器上的驱动程序/ GPU组合。 – Ani

+0

如果你使用自己的着色器:也许你忘了用着色器代码复制一些文件? – miloszmaki

回答

0

我有消息! computer1..n: 英特尔酷睿i7集成图形或新图形卡: 软件和hardwarevertexprocessing:错误

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

我试图使用着色器。但我也看错了可视化。 我通过三角形内的2个向量的交叉乘积生成三角形的三个顶点的法线(并对它们进行归一化)。但是,当我使用这个normal.XYZ值为pixelshader返回值(rgb)时,它应该看起来像一个法线贴图。但有些部分只是一种颜色...

而真的很疯狂的事情:它与来自互联网的一个简单的教程示例相同!我的代码有什么问题??????