2013-02-14 110 views
4

我想把圖像放到/包裝到3D物體上。爲了保持簡單和快速,而不是使用(和學習)3D庫,我想使用映射圖像。映射圖像,以這樣的方式使用:如何生成紋理貼圖圖像?

mapping usage

所以,你爲每個對象生成的映射圖像一次,並使用相同的映射要換行的所有圖像。

我的問題是如何生成這樣的映射圖像(給定三維模型)?由於我不知道術語,我的搜索失敗了。對不起,如果我使用了錯誤的行話。

您可以在下面看到工作流程的說明。
enter image description here
我有3D模型的對象和輸入圖像,我想生成映射圖像,我可以使用它來生成紋理圖像。

我什至不知道從哪裏開始,任何指針讚賞。

更多信息

我最初的想法是莫名其妙地裹標識映射(見下文),使用外部程序。我已經在Photoshop中生成了水平和垂直漸變圖像,以查看映射是否可以使用photoshop生成的圖像。結果看起來不太好。我沒有希望,但它值得一試。

輸入
enter image description here

映射(x和y),他們只是調整圖像大小,他們沒有做任何幻想。
enter image description here enter image description here

結果
enter image description here
你可以看到有很多的文物。通過扭曲漸變生成的自定義映射圖像甚至看起來更糟糕。

這裏是映射一些更多的信息:http://www.imagemagick.org/Usage/mapping/#distortion_maps

我使用OpenCV的重映射()的映射功能。

+2

downvoter:謹慎解釋downvote的原因? – nimcap 2013-02-14 16:11:16

+0

我仍然不明白你想要完成什麼。 :( – karlphillip 2013-02-14 16:24:16

+0

@karlphillip:我添加了一個描述性的圖,我希望我的目標現在更清晰 – nimcap 2013-02-14 20:46:19

回答

1

如果我明白你在這裏,你想在2D中做到這一切?

調用warpPerspective()爲每個立方體表面會更加成功,比使用重映射()

僞輪廓:

// for each surface: 
// get the desired src and dst polygon 
// the src one is your texture-image, so that's: 
    vector<Point> p_src(4), p_dst(4); 
    p_src[0] = Point(0,0); 
    p_src[1] = Point(0,src.rows-1); 
    p_src[2] = Point(src.cols-1,0); 
    p_src[3] = Point(src.cols-1,src.rows-1); 
// the dst poly is the one you want textured, a 3d->2d projection of the cube surface. 
// sorry, you've got to do that on your own ;(
// let's say, you've come up with this for the cube - top: 
    p_dst[0] = Point(15,15); 
    p_dst[1] = Point(44,19); 
    p_dst[2] = Point(56,30); 
    p_dst[3] = Point(33,44); 

// now you need the projection matrix to transform from one to another: 
Mat proj = getPerspectiveTransform(p_src, p_dst); 

// finally, you can warp your texture to the dst-polygon: 
warpPerspective(src, dst, proj, dst.size()); 

如果你能得到的「學習了OpenCV的保持這是圍繞p 170.

警告的最後一句話,因爲你抱怨文物, - 是的,它會看起來很俗氣,「真正的」3D引擎在這裏做很多工作,子像素-UV映射,過濾, mipmappin g等,如果你想讓它看起來不錯,請考慮使用'真實'的東西。

順便說一句,有內置的OpenCV

+0

事情是我會使用任意3D模型而不是立方體,立方體只是爲了展示這個想法。 – nimcap 2013-02-18 11:55:40

+1

哦,這些東西是由maya/blender等藝術家完成的,你可以自動化(甚至濫用2d api)考慮使用模型,已經有適當的uv coords和3d api,如opengl 。將會少得多的工作,我保證! – berak 2013-02-18 13:12:36

1

要達到什麼樣的你正在嘗試做的很好的OpenGL支持,需要渲染的3D模型的UV到紋理。學習渲染3D會比通過這種方式做事更容易。特別是因爲你的問題有很多弱點。難以照明和問題直到深度緩衝區將是豐富的。

假設所有對象shul以往只能從一個角度看,你需要他們每個人渲染到3個紋理:

UV-地圖
普通地圖
深度圖(糾正深度緩衝區)

爲了將這些看起來像你的對象,你仍然需要做陰影處理,而且我甚至不知道如何做深度緩衝區事情,我只知道它可以完成。

因此,爲了避免學習3D,您將不得不學習3D渲染的所有困難部分。似乎沒有更容易的路線...