DirectX 9着色不是线性的吗?

DirectX 9着色不是线性的吗?,directx,pixel-shading,Directx,Pixel Shading,我正在使用托管DirectX9和C。我制作了一个cnc机器的可视化 在计算机1上,它工作得很好。左侧的圆管为亮灰色,阴影与深灰色呈线性 在计算机2上,我得到了不同的相同代码!: 左边是白色,右边是深灰色,但不是线性的。它仍然是白色的,大约占管子的45%,在55%时是黑色的。着色仅在此点之间可见 有什么想法吗 看起来我用的灯太亮了,但代码完全一样 /编辑 好的,这里是一个屏幕截图: 出现问题的计算机是i3+英特尔板载图形+Win7 64位 具有正确可视化效果的计算机是一台较早的Intel,具有板载

我正在使用托管DirectX9和C。我制作了一个cnc机器的可视化

在计算机1上,它工作得很好。左侧的圆管为亮灰色,阴影与深灰色呈线性

在计算机2上,我得到了不同的相同代码!: 左边是白色,右边是深灰色,但不是线性的。它仍然是白色的,大约占管子的45%,在55%时是黑色的。着色仅在此点之间可见

有什么想法吗

看起来我用的灯太亮了,但代码完全一样

/编辑 好的,这里是一个屏幕截图: 出现问题的计算机是i3+英特尔板载图形+Win7 64位 具有正确可视化效果的计算机是一台较早的Intel,具有板载图形和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;
我有消息!!! 计算机1..n: 英特尔i7集成图形卡或新图形卡: 软件和硬件处理:错误

计算机0: 带旧图形卡的32位WinXP: 硬件处理:正确 Softwarevertexprocessing:错误

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


还有一件非常疯狂的事情:这和一个来自互联网的简单教程示例是一样的!!!!我的代码有什么问题吗????

截图,也许两台机器上的渲染和硬件规格的小列表会有所帮助。您是否尝试过在问题机器上初始化引用光栅化器DeviceType.reference?如果这解决了问题-我会直接责怪那台机器上的驱动程序/GPU组合。如果你使用自己的着色器:也许你忘了用着色器代码复制一些文件?不-我只使用固定的函数管道。lightning和设备本身的所有设置都在我第一篇文章的代码中。