簡體   English   中英

在3D空間中旋轉圖像的一部分

[英]Rotating part of an image in 3D space

設置如下:這是一個電子商務藝術網站,其中一些畫作是畫布傳輸的。 這幅畫環繞着畫布的側面,頂部和底部。 我們擁有整個繪畫的高分辨率圖像,但是我們要顯示的是圖像的准3D表示,您可以在其中看到繪畫的側面如何纏繞在畫布上。 這是我在說的粗略草圖:

替代文字

我的問題是,如何旋轉3D空間中的圖像? 我想我要采取的方法是,切除圖像頂部和側面的一部分,然后以3D旋轉,然后再將其粘貼回頂部和側面,以使其具有3D外觀。 我該怎么做呢? 可以使用任何.Net技術(GDI +,WPF等)來完成。

在使用ViewPort3D類的WPF中,您可以創建一個8x5x1單位的長方體。 將圖像創建為紋理,然后使用紋理坐標將紋理應用於正面(8x5)和側面(5x1)以及頂面和底面(8x1)。 正面坐標應為:(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)的左側。

編輯:如果您隨后希望能夠在3D畫布模型上執行旋轉,則可以遵循以下建議: 如何在WPF中進行3D轉換?

看起來您不需要做真實的3D,而只需要偽造它。

沿圖像的頂部,底部,左側和右側切掉四個條。 上下左右折騰(按問題中的草圖進行)。 縮放和剪切條(我對.net / wpf不夠專業,但是不知道如何做)。 頂部將垂直縮放0.5倍(猜測-選擇以適合所需的最終3D外觀圖像),然后水平縮放。 結果被合成到輸出圖像上,作為畫布的頂部。 左側的條將水平縮放並垂直剪切。

如果最終用戶要從不同角度交互查看3D畫布,則此方法可能比渲染誠實的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紋理坐標映射到代表畫布三個側面的三個廣告牌上(一個廣告牌只是兩個三角形,組成一個矩形) 。 然后,使用矩陣變換旋轉整個畫布(所有三個廣告牌)。 田田!

或者,您可以通過變換而不是畫布來移動3空間攝影機的位置。 六分之一,另一半-正如他們所說。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM