Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 夏普DX。照明故障_C#_Directx_Lighting_Sharpdx - Fatal编程技术网

C# 夏普DX。照明故障

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

我正在使用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.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++会吓跑我。什么资源