2013-03-21 31 views
1

我正在寻找一些代码示例(优选C#)或简单的.NET函数库,廉价或免费的,我可以使用变换3D东西放进它的2D透视投影,给出指定的摄像机位置等透视投影,不使用WPF或DirectX或XNA或OpenGL或游戏引擎的

我找啊找,但一切我觉得好像利用一个主要的图形框架或非常装置 - 面向或两者兼而有之。我想要的东西是纯软件和独立于设备,并将与.Net 2一起工作。

但我确实需要使用相机视图进行真实透视投影,而不仅仅是一些使图像倾斜的2D图像转换,因此看起来有点透视。

编辑:

感谢那些已经回答。就像我说的那样,我已经花了很多时间搜索,所以我没有感到惊讶,至于答案(到目前为止)是因为我正在寻找一些不存在的东西。

在回答问题时,为什么我要卷入和一些主要包过敏,原因仅仅是“保持简单”规则。对我来说,我想要做的是图形处理的一个点点,我不能让我的头周围不必去熟悉与实现10000的功能,以使一个巨大的多功能包装的想法,我可以做我的一个小功能。

编辑2 - 大多为Miky:

以下是伪编程理念的散漫位再试一次证明我的愿望,避免卷入任何大型和复杂的包时,我要的是一个非常特殊的功能。不要浪费你的时间阅读这个,除非你真的没有更好的办法......

Miky指出,正确地说,.Net框架有一个巨大的功能,但我选择学习如何使用它甚至尽管我永远不会使用这些功能中1%的1%。是的,但我正在使用其中的数百个,这使得这一切都值得。 (单独的内存管理是死的功能。)

我也使用Developer速成包的WinForms,它也含有的,我永远不会使用的功能成千上万。但我确实使用功能区菜单和停靠面板,网格和树视图以及其他几十个功能,可能有一百个或更多功能,这使得它们都值得。

我也为WinForms产品使用MindFusion图表,它包含了数百个我永远不会使用的函数,但我确实使用了支持创建组织图和布局图以及移动节点并链接它们的函数在一起并重新格式化图表并放大和缩小和撤消...也许我使用了几十个函数,这使得它值得。

因此,我在这里是一个包含170,000行代码的程序,它高度依赖于.Net Framework和Developer Express,并且依赖于MindFusion,现在我想做一点3D透视渲染。事实上,它甚至不是真正的3D - 我想要做的是显示一个2D图像(平面图),如从斜角看到的。我想堆楼层平面图另一个之上代表一个透明的多层建筑,也许夸张间布局规划的间距,并允许用户指定他/她想要看的伪建筑从一个角或face-在或另一角落,以及相机的高度。

就是这样。我认为我需要的是一种或两种C#方法,这些方法可让我呈现这些2D平面布置图在空间中漂浮,就好像它们是3D一样,因为它们相对于摄像机倾斜,并且可以在之间移动摄像机。而已。

无论对错,我都深信,如果我开始涉足不得不学习一个主要的3D宇宙创建包或者面向设备/性能的图形系统,那么我最终会使用比这个特性更多的时间价值。我绝对不想用兆兆字节的模块膨胀我的程序的运行时间占用空间,这些模块永远不会被使用。

但我很欣赏这个问题所收到的所有建议和关注。

+0

因此,你基本上寻找的是一个不是DirectX,XNA或OpenGL或任何游戏引擎的3D绘图库。为什么不是上面列出的那些?顺便说一句,我怀疑是否存在.NET。如果你能找到一个,它可能会被写入非托管代码(想想C/C++)。 – 2013-03-21 20:32:49

+0

您需要的关键字是“C#软件渲染器”。由于您只是在寻找软件,“C#射线追踪器”可能也适合您的需求。 – comingstorm 2013-03-21 22:31:50

+0

另外,不幸的是,任何一种渲染都会带来相当大的复杂性。真正的透视投影本身非常简单。然而,加载/生成/表示3D对象及其视觉外观也是必要的,并且比投影部分复杂得多... – comingstorm 2013-03-21 22:39:24

回答

3

基本上,将3D形状投影到2D屏幕上意味着使用几何图形来表示,如果我的屏幕是3D世界的窗口,屏幕上的每个点都会出现该对象中的哪个点?

enter image description here

你可以制定出具有类似三角形的答案,如果你知道远方的你希望用户的眼睛似乎是远离屏幕:

enter image description here

数学会只是:

sx = tx * DISTANCE/ty

+0

谢谢。可爱的图片。我知道你展示的简单理论情况的数学。我写了一个基于此代码项目文章的小程序:http://www.codeproject.com/Articles/2158/A-short-discussion-on-mapping-3D-objects-to-a-2D-d – RenniePet 2013-03-21 20:22:33

+0

但也许我太笨了或什么的,但我认为我需要的是一个实际的程序,它可以工作,一个插入3D物体的程序,摄像头位置和摄像机角度,另一端出现2D图像。具体来说,基于上述文章,我的程序正在投射一个盒状物体,结果是一个正方形,这很好。但是当我将相机移动到一侧时,我会预期盒子的正面会变为非正方形 - 最近的边缘应比远离边缘的时间长。但盒子的表面仍然是方形的。所以我做错了什么。 – RenniePet 2013-03-21 20:22:58

+0

如果您将相机移动到一侧,并将其指向一个方向,则您确实希望盒子的正面保持正方形。只有当盒子旋转时,该脸部才是非正方形的。 – 2013-03-21 20:28:44

1

我不知道这样的人ibrary。通常的做法是使用同质坐标。这有效,但相当抽象。

要解决这个问题,我首先使用SlimDx或Xna附带的数学库编写程序。

一旦工作,将您需要的功能移植到您自己的C#代码中。无论您开始使用哪种图书馆,转换和透视矩阵功能都是一样的,他们的定义可以在互联网上找到。

+0

谢谢你的回答。我编辑了我的问题。我希望有一些简单的事情,但是......我可以尝试你的建议。但尽管SlimDX是开源的,但我猜测透视图渲染不在源代码中,因为这是由DirectX完成的,对吧? – RenniePet 2013-03-21 21:17:22

1

虽然我可以想象为什么你不想依赖微软的特定框架或事件OpenGL的一些原因,我真的很难理解你对游戏的3D库有什么。

问题是,大多数3D库都考虑到游戏开发人员,因为他们形成了大部分用户群。

因此,如果您倾向于宽大于最终限制,您的可能性会稍微增加。但是仍然存在一个问题。

没有人真正烦恼.NET的3D图书馆..这是因为.NET已经有DirectX,XNA,OpenGL ..并且再次,因为大多数3D图书馆用户在性能优先之后,重点是C或C++。

所以,这让你在联合国管理的领土,包括库,如选择:

关于您的编辑:

我认为,在这种情况下,最好的办法是与你的抑制作斗争,并加快其中一个恐吓人物的基础知识ckages。想想这样:

.NET框架拥有10,000多种方法,如果您想创建一个简单的应用程序,该应用程序显示带有更新标签上印刷文本的按钮的窗口,它仍然会更容易学习有一点必要(几个基本的原理和功能的子集)来完成,而不是试图寻找一个轻量级的库,旨在显示带有按钮和文本框的窗口。

上述类推适用于所有主要的3D库。他们之所以感到ind reason的原因可能部分是因为它是全新的领域,也是因为3D图形不是一个超级简单的概念。因此,任何实施3D库的人都希望尽可能多地展示功能,以使开发人员的工作变得更轻松(不难)。

好消息是,拿起OpenGL或DirectX的基础知识其实并不难。在.NET中学习/使用DirectX 可能会更容易。学习OpenGL可能会更适合您,因为它更便携。而且两者都拥有许多可用于启动人员的资源。

因此,咬紧牙关!不要重蹈覆辙,不要害怕承受巨大的依赖(当你知道它是正确的)!并继续编写您的第一个基本的3D应用程序。 你会感觉更好

+0

感谢您的帮助。请参阅编辑我的问题。我快速浏览了PolyCode功能页面,我感到完全被吓倒了。自己的IDE,一键出版,硬件加速图形,字体渲染,动画,网格,粒子,声音,网络,物理......我想要的只是一个小小的C#例程,可以进行透视渲染。但再次感谢您的帮助 – RenniePet 2013-03-21 21:13:09

+0

请参阅我的更新! – 2013-03-21 21:43:17

+0

你应该是推销员! (只为你,Niky,我再次编辑了我的问题,我非常感谢你的帮助。) – RenniePet 2013-03-22 14:32:48

相关问题