C# XNA,WPF灯光显示可视化仪

C# XNA,WPF灯光显示可视化仪,c#,wpf,xna,C#,Wpf,Xna,大家好 我正在开发一个控制灯光秀的软件(通过DMX协议),我使用C#和wpf来开发我的主软件(.net 4.0) 为了帮助人们预览他们的节目,我想制作一个实时三维可视化工具 首先,我认为我可以使用wpf 3D制作可视化工具,但我需要使用灯光 我的主要应用程序应该将属性(光束角度、方向(X,Y)、位置(X,Y)、笔刷(颜色、形状、效果))发送到3D可视化工具 但我希望能够在执行过程中通过鼠标移动灯光(场景中的位置),并获得相应的价值 所以 XNA是最简单的方法吗 你能帮我吗 生成灯光(方向,灯光

大家好

我正在开发一个控制灯光秀的软件(通过DMX协议),我使用C#和wpf来开发我的主软件(.net 4.0)

为了帮助人们预览他们的节目,我想制作一个实时三维可视化工具

首先,我认为我可以使用wpf 3D制作可视化工具,但我需要使用灯光

我的主要应用程序应该将属性(光束角度、方向(X,Y)、位置(X,Y)、笔刷(颜色、形状、效果))发送到3D可视化工具

但我希望能够在执行过程中通过鼠标移动灯光(场景中的位置),并获得相应的价值

所以

XNA是最简单的方法吗

你能帮我吗

  • 生成灯光(方向,灯光前面类似位图的过滤器)

  • 使用鼠标动态移动对象并获取相应位置

  • 动态添加或删除夹具

非常欢迎您的建议、样品、示例。。。我不希望在第一时间就有一个完美的结果,但我需要理解这样做的主要概念


谢谢

XNA不包含任何管理“场景”的功能-您必须自己实现。例如:您可以创建一个
灯光
类,其中包含有关灯光的信息(位置、方向等),然后创建一个
列表
,您可以自己更新和渲染这些信息

我现在假设您有一个“灯光”的3D模型(如:包含灯泡的金属盒)和一个舞台的3D模型。您可以了解如何渲染它们-XNA中有大量关于简单模型渲染的在线教程

所以你的第三个要求(“动态添加或删除装置”)应该是相当简单的,一旦你可以渲染东西。只需根据用户输入从灯光列表中添加和删除灯光即可。看

您的第二个要求(“使用鼠标动态移动对象并返回位置”)也应该很简单。如果希望用户通过单击和拖动来移动灯光,只需跟踪帧之间的鼠标位置,并将其应用于已单击灯光的位置(或旋转)的调整

要想知道用户首先点击的是哪个灯光,一个很好的起点是

我在这里假设用户将单击灯光(金属盒)本身来移动/旋转它。如果您希望让用户单击并拖动灯光的端点(它投射的光点)——这将更加困难。我想到的一个想法是:将光线与舞台相交,找到投影光斑的中心。在这一点上画一个虚拟的“手柄”对象(像一个球体),用户可以点击并拖动它。用户完成拖动后,确定灯光的新方向,使其成为新的中心

最后,您的第一个需求(“在灯光前生成灯光(方向,类似位图的过滤器)”)是一个棘手的需求。我的理解是,你想要一种在舞台模型上绘制光束端点的方法吗?如果是这样的话,你要找的就叫做。基本灯光可能会有一个圆形纹理,gobos可能会有其他纹理

快速而肮脏的方法是绘制舞台模型,每个灯光绘制一次,添加混合(这样每个灯光添加其他灯光和黑色都没有效果),将颜色设置为您想要的灯光颜色,并使用黑白纹理(黑色背景上的白色圆圈)使用
TexturedDressMode.Clamp
绘制,该着色器使用投影纹理贴图绘制纹理,该贴图将灯光设置为投影点