DirectX 9 Shading не линейный?

Я использую управляемый DirectX9 с C#. Я сделал визуализацию станка с ЧПУ.

На компьютере 1 работает отлично. круглая труба - ярко-серая с левой стороны, а штриховка - линейная или темно-серая.

На компьютере 2 я получаю что-то другое (тот же код!): Просто белый слева, темно-серый справа, но не линейный. Его все еще белый до 45% трубки и темный на 55%. Затенение только между этими точками видно....

Любая идея???

Похоже, я использую слишком яркий свет, но код точно такой же...

/ Edit Ok, вот скриншот:Слева неправильно, затенение справаКомпьютер с проблемой - встроенная графическая карта i3 + Intel + Win7 64Bit. Компьютер с правильной визуализацией - более старый Intel с бортовой графикой и 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 ответ

У меня есть новости!!! computer1..n: интегрированная графическая карта Intel i7 или новая графическая карта: программное и аппаратное обеспечение обработка вершин: неправильно

computer0: 32-разрядная версия WinXP со старой графической картой: Аппаратная обработка vertex: правильно Программная обработка vertex: неправильно

Я пытался использовать шейдеры. Но я также получаю неправильные визуализации. Я генерирую нормали для 3 вершин треугольника путем перекрестного произведения 2 векторов внутри треугольника (и нормализую их). Но когда я использую это значение normal.XYZ для возвращаемого значения pixhader (rgb), оно должно выглядеть как карта нормалей. Но некоторые детали только одного цвета...

И действительно сумасшедшая вещь: то же самое с простым учебным примером из Интернета!!!! Что не так с моим кодом??????

Другие вопросы по тегам