推荐用于光/激光显示模拟器的3D编程方面?

时间:2009-10-06 19:07:26

标签: graphics 3d xna lighting

嘿伙计们,我想开发一个光/激光表演编辑器和模拟器,为此我当然要学习一些图形编程。我正在考虑使用C#和XNA。

我只是想知道在我正在研究的项目中,我应该研究或关注图形编程的哪些方面。我是图形编程的新手,所以我对它不太了解,但是我想我可能会想到的东西(可能?)是体积光照。

例如,渲染不同宽度/颜色的“激光”的实用方法是什么?我在某个地方读到了一个圆柱体并对其应用了一个着色器,我想确认这就是这种方式。

鉴于这似乎是一个大项目,我正在考虑开始创建光源并赋予它们属性,以便我可以轻松地操纵它们。我(错误地)读到在任何给定时间只能渲染一定数量的灯,我相信八。这仅适用于环境光吗?鉴于这种可能的限制,以及我将使用的大部分灯将是方向性的事实,例如头灯或激光器,渲染这些灯会有什么不同的方式?那是体积照明吗?

在我深入了解之前,我想先了解一些事情。由于我是新手,我可能没有充分利用文字,所以如果有些事情没有意义,请告诉我。谢谢,对不起我的无知。

3 个答案:

答案 0 :(得分:1)

答案取决于您在显示模拟中所需的复杂程度。计算机图形学最终是模拟光的传输;模拟可以像计算大气中的粒子偏转到观察者的视点的激光分数一样复杂,或者像绘制线一样简单。尝试气缸效果,看看它是否适用于您的项目。如果您需要更复杂的东西,请查看着色器编程(例如,使用Nvidia Cg)和您提到的体积着色;也可以使用后处理发光效果。对于OpenGL,我相信有8个限制?场景中的光源,但你可以想象通过自己的着色逻辑来解决这个限制。

答案 1 :(得分:1)

好吧,如果它只是用于灯光秀模拟,我想你需要大量的自定义灯光效果 - 所以无论你决定使用XNA还是直接使用DirectX,最好的选择是从学习着色器语言开始使用它们编程各种照明效果。一旦你可以重现你想要的激光照明类型,那么你可以试验你想用来代表激光的多边形。 (我在我的一些作品中使用圆柱法用于个人目的,但我不确定直筒适合你的目的)。

答案 2 :(得分:0)

虽然速度更快,但我认为最好不要使用香草硬件照明,因为它有其局限性。像素着色器可以帮助您完成任务。您也可以选择OpenGL,因为它具有可移植性和渲染方法的清晰度。在切换到OpenGL之前,我在Direct3D上工作了好几年。 OpenGL函数和状态更容易学习,渲染方法(如多遍渲染)非常清晰。如果你想在C#上编码(我不推荐这些任务),你可以使用CsGL库来访问OpenGL函数。