Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphics NET中的非仿射图像变换_Graphics_Gdi+_Image Manipulation - Fatal编程技术网

Graphics NET中的非仿射图像变换

Graphics NET中的非仿射图像变换,graphics,gdi+,image-manipulation,Graphics,Gdi+,Image Manipulation,在.NET库中是否有任何类、方法或任何算法可以执行非转换?(即,转换不仅仅涉及旋转、缩放、平移和剪切) e、 g: (来源:) 还有其他术语吗?您发布的所有示例图像都可以通过四边形变形来完成。虽然我不能确定四边形扭曲会覆盖所有非仿射变换 这里有一个链接指向一个不太好的C#it实现。。。它可以工作,但速度很慢。在Wikipedia上浏览一下这些计算的许多不同优化 -Neil我不知道.Net中集成了什么东西,可以让您进行非仿射变换 我想你是在尝试3D纹理贴图吧?如果是这种情况,您需要一个同

在.NET库中是否有任何类、方法或任何算法可以执行非转换?(即,转换不仅仅涉及旋转、缩放、平移和剪切)

e、 g:


(来源:)



还有其他术语吗?

您发布的所有示例图像都可以通过四边形变形来完成。虽然我不能确定四边形扭曲会覆盖所有非仿射变换

这里有一个链接指向一个不太好的C#it实现。。。它可以工作,但速度很慢。在Wikipedia上浏览一下这些计算的许多不同优化


-Neil

我不知道.Net中集成了什么东西,可以让您进行非仿射变换

我想你是在尝试3D纹理贴图吧?如果是这种情况,您需要一个同质仿射变换,这在.Net中是不可用的。我也不知道在.Net中有任何集成的方法来进行像素位移变换

但是,当前投票的解决方案可能对您正在尝试的工作有好处,只是要知道它不会立即进行透视校正

例如:

左边的图片是使用Neil N提供的单四边形扭曲库生成的。右边的图片是使用DirectX中的单四边形(实际上是两个三角形)生成的


这可能不会对您尝试执行的操作产生任何影响,但如果您想执行3D操作,请记住这一点。如果没有透视正确的映射,它将看起来非常奇怪。

您可以在wpf中使用Viewport3d控件和非仿射变换矩阵来执行此操作。再次将其渲染为位图可能很有趣。。。。我通过包含一个与纹理平面上的图像相同的不可见控件来“修复”它。。。(此外,我还必须通过分割平面和裁剪图像来解决最大纹理大小问题…)


在我的例子中,我想要的是相反的结果(变形使扭曲上的任意点成为我的矩形窗口的角),这是矩阵的倒数,正好相反。

“虽然我不能肯定一个四边形扭曲会覆盖所有的非仿射变换。”它不会,但四边形扭曲不能做很多事情。但这是一个很好的开始。不,我们有一个iPod,我看到了页面收尾功能。我很反感一个小小的嵌入式设备和flash不能进行奇特的转换,但运行世界上最先进操作系统的Core2 Duo却不能。仅仅因为它没有内置功能来进行奇特的转换并不意味着它不能。我在纯C#中看到了一些非常惊人的图形doen,Neil为您提供了链接,您可以随心所欲。它可以很好地实现3D效果,虽然透视不正确,但多边形是否保持较小并不重要。实际上,如果使用得当,我提供的链接将允许进行透视正确的变换。Neil N:该算法是一个四元映射器,它所做的是仿射映射。仅使用二维坐标,无法进行透视正确的贴图。如果您在发表此评论后仍有疑问,我邀请您研究什么是“透视正确纹理贴图”。哦,Charles Petzold还发布了如何在silverlight 3中使用Matrix3dProjection实现这一点: