2012-05-16 5 views
1

Я использую управляемый DirectX9 с C#. Я сделал визуализацию машины cnc.DirectX 9 Затенение не линейно?

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

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

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

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

/Edit Ok вот скриншот: Left is wrong shading, right is correct Компьютер с проблемой является i3 + Intel бортовой графики + Win7 64Bit компьютер с правильной визуализации является старше Intel с onboardgraphic и 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; 
+0

Снимок экрана, возможно, небольшой список характеристик рендеринга и аппаратных средств на обеих машинах. – Ani

+1

Вы пытались инициализировать ссылочный растеризатор (DeviceType.Reference) на проблемной машине? Если это устранит проблему - я бы прямо обвинил комбинацию драйверов/графических процессоров на этой машине. – Ani

+0

Если вы используете собственные шейдеры: возможно, вы забыли скопировать некоторые файлы с шейдерным кодом? – miloszmaki

ответ

0

У меня есть новости !!! computer1..n: Intel i7 интегрированный графический или новую графическую карту: Программное обеспечение и hardwarevertexprocessing: неправильное

computer0: 32 Bit WinXP со старой графической картой: Hardwarevertexprocessing: правильный Softwarevertexprocessing: неправильно

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

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

Смежные вопросы