2009-10-06 30 views
2

嘿家伙,我想开发一个光/激光表演编辑器和模拟器,对于这个我当然要学习一些图形编程。我正在考虑使用C#和XNA。光/激光表演模拟器的推荐3D编程方面?

我只是想知道我应该研究或专注于图形编程的哪些方面给予我正在进行的项目。我是图形编程的新手,所以我不太了解它,但是举个例子,我想象一下我可能会研究的东西(可能是?)是体积照明。

例如,将呈现不同宽度/颜色的“激光”的实用方法是什么?我读了一个地方,只是画一个圆柱体,并应用着色器,我想确认这是方式。

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

我想在深入研究之前弄清楚一些事情。由于我对此很陌生,因此我可能没有充分利用单词,所以如果某些东西没有意义,请告诉我。谢谢你,对我的无知感到抱歉。

回答

1

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

+1

您可以通过最新的SIGGRAPH论文获取灵感,看看是否有与照明效果相关的项目;其中一些可能也会帮助你:http://www.cs.rit.edu/~jmg/courses/procshade/20073/papers.html – RMorrisey 2009-10-06 19:19:26

1

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

0

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