在3D空间中旋转图像的一部分

这是设置:这是一个电子商务艺术网站,其中一些画作是canvas转移。 画作环绕canvas的两侧和顶部和底部。 我们拥有整幅画的高分辨率图像,但我们想要展示的是图像的准3D表示,您可以在其中看到画面的两侧如何环绕canvas。 这是我正在谈论的粗略草图:

替代文字

我的问题是,如何在3D空间中旋转图像? 我认为我想采取的方法是切掉图像的顶部和侧面的一部分,然后在3D中旋转,然后将其重新贴在顶部和侧面以使其具有3D外观。 我该怎么做呢? 它可以使用任何.Net技术(GDI +,WPF等)来完成。

在使用ViewPort3D类的WPF中,您可以创建一个8x5x1单位的长方体。 将图像创建为纹理,然后使用纹理坐标将纹理应用于正面(8×5)和侧面(5×1)以及顶面和底面(8×1)。 正面坐标应为:(1 / 9,1 / 6),(8 / 9,1 / 6),(1 / 9,5 / 6)和(8 / 9,5 / 6)正面,从最近的边到那些边的坐标,例如左边:(0,1 / 6),(1 / 9,1 / 6),(0,5 / 6)和(1/9, 5/6)左侧。

编辑:如果您希望能够在3Dcanvas模型上执行旋转,您可以按照以下建议进行操作: 如何在WPF中进行3D转换?

看起来你不需要做真正的3D,但只需要伪造它。

沿着图像的顶部,底部,左侧和右侧切掉四个条带。 抛出底部和右边(按照问题中的草图)。 缩放和剪切条带(我在.net / wpf上不够专业,知道如何,但它可以做到)。 顶部将垂直缩放0.5倍(猜测 – 选择适合所需的最终3D外观图像)并水平剪切。 结果作为canvas的顶部合成到输出图像上。 左侧条带将水平缩放并垂直剪切。

如果最终用户要以交互方式从不同角度查看3Dcanvas,这种方法可能比渲染一个诚实的3D模型更快,这需要进行纹理映射并将模型光栅化为最终图像,这相当于进行相同的数学运算。 有趣的部分是弄清楚如何调整缩放和剪切参数。

此页面可能具有教育意义: http : //www.idomaths.com/linear_transformation.php
这可能是有用的参考http://en.csharp-online.net/GDIplus_Graphics_Transformation%E2%80%94Image_Transformation

我对这种东西没有任何经验。 但是当我看到这个问题时,我想到的第一件事就是搞笑的Unicornify for SO。

在这篇由balpha 制作的文章中,他解释了2d独角兽球体如何在3d空间中旋转。

但代码是用python编写的。 如果您有兴趣,可以查看一下。 但我不确定这会对你有所帮助。

蛮力方法(可能是最简单的方法)是将三个面中每个面的u,v纹理坐标映射到表示canvas三面的三个广告牌上(广告牌只是两个制作矩形的三角形) 。 然后,使用矩阵变换旋转整个canvas(所有三个广告牌)。 田田!

或者,您可以使用变换而不是canvas移动3空间相机位置。 正如他们所说,六分之一,另一半。