C# 夏普DX。照明故障
我正在使用SharpDX d3d9制作具有照明效果的球体 所以,我尝试了下面的代码C# 夏普DX。照明故障,c#,directx,lighting,sharpdx,C#,Directx,Lighting,Sharpdx,我正在使用SharpDX d3d9制作具有照明效果的球体 所以,我尝试了下面的代码 var direct3D = new Direct3D(); var device = new SharpDX.Direct3D9.Device(direct3D, 0, SharpDX.Direct3D9.DeviceType.Hardware, this.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters(this.Cl
var direct3D = new Direct3D();
var device = new SharpDX.Direct3D9.Device(direct3D, 0, SharpDX.Direct3D9.DeviceType.Hardware, this.Handle, CreateFlags.HardwareVertexProcessing,
new PresentParameters(this.ClientSize.Width, this.ClientSize.Height));
Light light = new Light();
light.Type = LightType.Point;
light.Diffuse.Red = 1.0f;
light.Diffuse.Green = 1.0f;
light.Diffuse.Blue = 1.0f;
light.Diffuse.Alpha = 0.7f;
light.Position = new Vector3(-10, -10, -10);
light.Range = 200.0f;
light.Attenuation0 = 0.1f;
device.SetRenderState(RenderState.Lighting, true);
device.SetRenderState(RenderState.Ambient, new Color4(0.5f, 0.5f, 0.5f, 0.5f).ToRgba());
device.SetLight(0, ref light);
device.EnableLight(0, true);
Material met = new Material();
met.Diffuse = new Color4(1, 1, 1, 1);
met.Ambient = new Color4(1, 1, 1, 1);
met.Specular = new Color4(1, 1, 0, 1);
met.Emissive = new Color4(0, 0, 0, 1);
met.Diffuse.Alpha = 0.7f;
met.Power = 5.0f;
device.Material = met;
但是,一切都没有改变
img:
(颜色是我输入的值。)
渲染代码是
RenderLoop.Run(this, () => {
var time = clock.ElapsedMilliseconds / 1000.0f;
device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
device.BeginScene();
effect.Technique = technique;
effect.Begin();
effect.BeginPass(0);
var worldViewProj = Matrix.RotationX(time) * Matrix.RotationY(time * 2) * Matrix.RotationZ(time * .7f) * viewProj;
effect.SetValue("worldViewProj", worldViewProj);
//effect.SetValue("worldViewProj", viewProj);
//device.DrawPrimitives(PrimitiveType.LineList, 0, counts / 2);
device.DrawPrimitives(PrimitiveType.TriangleList, 0, counts / 3);
effect.EndPass();
effect.End();
device.EndScene();
device.Present();
});
如何将灯光应用于我的应用程序
以及
var effect=effect.FromFile(设备“MiniCube.fx”,ShaderFlags.None)
这意味着什么?但是,我不希望有任何效果(它来自SharpDX sample source.MiniCube.csproj)除了它是C#的DX包装外,我自己对SharpDX并不熟悉。虽然这是一个很酷的概念,但如果您不熟悉DirectX的工作原理,我会警告您不要使用它。据我所知,SharpDX的人故意提供很少的文档,因为DirectX本身已经有大量的示例和文档 要接触效果,它们是处理着色器逻辑的对象。着色器是直接与GPU接口的“迷你程序”。现代游戏中的大部分内容都是通过着色器写入、显示、扭曲、变形、更改甚至移动的,包括照明!HLSL(或高级着色器语言)是DirectX接口的标准语言。具有讽刺意味的是,很难找到简单的着色器教程或示例,而更复杂的细节则可以很好地映射出来 虽然这些可能对您当前的需要不是特别有用,但以下是我最喜欢的两个HLSL资料
DXTug是非常令人惊讶的,通过C++学习DX,实际上除了微软最近宣布的D3DX库(不包括)之外,没有依赖关系。它也有一个名义上50美元的费用为优质内容(我相信,包括着色器),但相信我,当我说,他卖空自己在50美元
JaJDoo的教程本身就非常优秀,但是它们针对的是Ogre图形框架,因此您需要对代码进行一些修改,因为Ogre使用自定义着色器管道,它可以改变您定义和调用技术和过程的方式,这对理解IMO来说不是什么大问题话虽如此,我意识到我实际上还没有回答你的问题。然而,我会敦促您从SharpDX退后一步,学习基础知识。可能还有其他人不同意我的观点,但这对我来说似乎有点倒退。无论如何,祝你好运 除了SharpDX是C#的DX包装外,我自己对它并不熟悉。虽然这是一个很酷的概念,但如果您不熟悉DirectX的工作原理,我会警告您不要使用它。据我所知,SharpDX的人故意提供很少的文档,因为DirectX本身已经有大量的示例和文档 要接触效果,它们是处理着色器逻辑的对象。着色器是直接与GPU接口的“迷你程序”。现代游戏中的大部分内容都是通过着色器写入、显示、扭曲、变形、更改甚至移动的,包括照明!HLSL(或高级着色器语言)是DirectX接口的标准语言。具有讽刺意味的是,很难找到简单的着色器教程或示例,而更复杂的细节则可以很好地映射出来 虽然这些可能对您当前的需要不是特别有用,但以下是我最喜欢的两个HLSL资料
DXTug是非常令人惊讶的,通过C++学习DX,实际上除了微软最近宣布的D3DX库(不包括)之外,没有依赖关系。它也有一个名义上50美元的费用为优质内容(我相信,包括着色器),但相信我,当我说,他卖空自己在50美元
JaJDoo的教程本身就非常优秀,但是它们针对的是Ogre图形框架,因此您需要对代码进行一些修改,因为Ogre使用自定义着色器管道,它可以改变您定义和调用技术和过程的方式,这对理解IMO来说不是什么大问题话虽如此,我意识到我实际上还没有回答你的问题。然而,我会敦促您从SharpDX退后一步,学习基础知识。可能还有其他人不同意我的观点,但这对我来说似乎有点倒退。无论如何,祝你好运 如果要使用照明,顶点格式应包括
VertexFormat.Normal
。如果没有法线,DirectX无法计算照明。如果要使用照明,顶点格式应包括VertexFormat.normal
。如果没有法线,则DirectX无法计算照明。没有使用原始DX(或SharpDX),但效果只是DirectX对一组着色器(用HLSL编写)的奇特术语。着色器通常用于创建照明(它们基本上是在GPU上为每个顶点和像素运行一次的小程序)。没有使用原始DX(或SharpDX),但效果只是DirectX对一组着色器(用HLSL编写)的奇特术语。着色器通常用于创建照明(它们基本上是在GPU上为每个顶点和像素运行一次的小程序)。我不同意这种说法。如果没有托管包装器,我就不会开发Direct3D应用程序。不得不学习C++会吓跑我。你使用了什么资源?我想象那里有很多书,但我没有研究任何东西,因为网络资源似乎很稀缺,所以我坚持使用我所知道的、各种其他网站以及我在与XNA合作时获得的知识。尽管如此,通过网络资源学习所有东西确实不容易。虽然我不能写C++,但我确实学会了如何把它翻译成C。我必须不同意。如果没有托管包装器,我就不会开发Direct3D应用程序。不得不学习C++会吓跑我。什么资源