我正在寻找一些代码示例(最好是C#)或一个简单的.Net函数库,便宜或免费,我可以使用它来将3D事物转换为2D投影,给定指定的相机位置等等。
我已经搜索过并搜索过,但我发现的所有内容似乎都是使用主要的图形框架,或者是面向设备的,或两者兼而有之。我想要的东西是纯软件和设备无关的,并且可以与.Net 2一起使用。
但我确实想要使用相机视图进行真正的透视投影,而不仅仅是一些使图像偏斜的2D图像变换,因此它看起来有些透视。
编辑:
感谢那些已经回答的人。就像我说的那样,我已经花了很多时间搜索,所以我并不感到惊讶,答案(到目前为止)是我正在寻找一些不存在的东西
在回答有关为什么我对参与某些主要套餐感到过敏的问题时,原因很简单就是保持简单"规则。对我而言,我尝试做的只是一点点图形操作,而我无法理解必须熟悉一个实现10,000多个功能的庞大多用途软件包的想法。为了我可以做我的一个小功能。
编辑2 - 主要是为了Miky:
以下是一个漫无目的的伪程序员哲学,再次尝试证明我希望避免涉及任何大而复杂的包,而我想要的只是一个非常具体的功能。除非你真的没有更好的事情要做,否则不要浪费你的时间阅读这个......
Miky正确地指出.Net Framework有很多功能,但我选择学习如何使用它,即使我从不使用1%的1%的功能。是的,但我使用了几百个,这使得一切都值得。 (内存管理本身就是一种死亡的功能。)我也在使用面向WinForms的Developer Express软件包,它还包含我将永远不会使用的成千上万个函数。但我确实使用了功能区菜单和对接面板以及网格和树状视图以及许多其他功能,可能是一百个或更多,这使得一切都值得。
我也使用MindFusion图表获取WinForms产品,它包含我将永远不会使用的数百个函数,但我确实使用了支持组织结构图和平面图的创建以及移动节点和链接的功能他们在一起并重新格式化图表并放大和缩小并撤消...也许我已经使用了几十个函数,这使得这一切都值得。
所以这里我的程序包含170,000行代码,高度依赖于.Net Framework和Developer Express,并且在某种程度上依赖于MindFusion,现在我想做一点点3D透视渲染。事实上,它甚至不是真正的3D - 我想要做的是显示从倾斜角度看到的2D图像(平面图)。我想将一个在另一个上面的平面图堆叠起来,以代表一个透明的多层建筑,可能有夸大的平面间间隔,并允许用户指定他/她是否想从一个角落或面部看待伪建筑物 - 在另一个角落,以及相机的高度。
那就是它。我认为我需要的是一个或两个C#方法,让我渲染这些2D平面图在空间中漂浮,就像它们是3D一样,因为它们相对于相机倾斜,并且可以移动相机。没什么。
无论对错,我确信如果我开始参与必须学习一个主要的3D宇宙创建软件包或面向设备/性能的图形系统,那么我最终会花费更多时间而不是这个功能值得。而且我绝对不想使用永远不会使用的兆字节模块来扩大程序的运行时间。
但我非常感谢这个问题得到的所有建议和关注。
答案 0 :(得分:3)
基本上,将3D形状投影到2D屏幕上只是意味着使用几何体来说,如果我的屏幕是进入3D世界的窗口,屏幕上的每个点都会出现在该对象中?
如果您知道用户眼睛看起来远离屏幕的距离,您可以用类似的三角形计算出答案:
数学就是:
答案 1 :(得分:1)
我不知道这样的图书馆。通常的方法是使用同质坐标。这有效但很抽象。
要解决这个问题,我首先使用SlimDx或Xna附带的数学库编写程序。
一旦有效,将您需要的功能移植到您自己的C#代码中。无论你开始使用哪种库,变换和透视矩阵函数都是相同的,它们的定义可以在互联网上找到。
答案 2 :(得分:1)
虽然我可以想到为什么你不想依赖于微软的特定框架,或者事件OpenGL,但我真的很难理解你对游戏的3D库有什么看法。
问题在于大多数3D库都考虑到游戏开发者,因为他们构成了用户群的大部分。
所以,如果你倾向于宽恕最后的限制,你的可能性会略微提升。但是仍然存在一个问题。
对于.NET的3D库,没有人真的很烦恼。那是因为对于.NET已经有了DirectX,XNA,OpenGL ......而且,由于大多数3D库用户都是在性能优先之后,所以重点是C或C ++
因此,您可以在非管理区域中选择包括以下库在内的选项:
关于你的编辑:
我认为在这种情况下,你最好通过对抗你的抑制并加快其中一个令人生畏的包装的基础知识。以这种方式思考:
.NET框架有10,000多种方法,如果你想创建一个简单的应用程序,它显示一个带有按钮的窗口,该按钮可以更新标签上印刷的文本,那么学习一些必要的东西(一些基本的东西)仍然会更容易原型和功能的子集)来实现这一目标,而不是试图寻找一个轻量级的库,用于显示带有按钮和文本框的窗口。
上述类比适用于所有主要的3D库。他们感到难以理解的原因可能部分是因为它是全新的领域,也因为3D图形不是一个超级简单的概念。因此,任何实现3D库的人都希望尽可能多地展示功能,以使开发人员的生活更轻松(而不是更难)。
好消息是,拿起OpenGL或DirectX的基础知识并不是那么难。使用.NET可以更轻松地学习/使用DirectX 。学习OpenGL可以更长久地适合您,因为它更便携。并且两者都具有可用于启动人员的许多资源的优势。
所以,咬紧牙关!不要重新发明轮子,不要害怕承担大的依赖(当你知道它是正确的)时!继续编写您的第一个基于3D的基本应用程序。 你会感觉更好!