我知道這可以通過對給定的紋理使用GL_REPEAT並將紋理座標適當地映射到頂點上來輕鬆實現。我想知道如果可以做同樣的不是爲了整個紋理,而是從它裁剪出來的圖像?唯一的辦法似乎是以編程方式創建一個單獨的紋理來適應圖像,然後使用它...有沒有更好的解決方案?如何使用從紋理裁剪的可重複圖像填充多邊形?
回答
比方說,你大源紋理的尺寸爲TX,泰
比方說,你複種面積尺寸爲TX,TY與偏移牛,OY。 (在你的情況下,TX,TY是32×32)
假設目標四有UV空間[0..1,0..1](在你的情況下,四是1024x600的單位尺寸)
首先,您需要在片段着色器中計算實際片段的(u,v)。這些值將位於目標四邊形的UV空間中。
(SU,SV)=(U,V)
乘以四邊形的尺寸(轉化此爲像素單位)
(SU,SV)=(U,V)* (1024,600)
這將用於從所述裁剪區域來樣,所以截斷到作物區域尺寸的第一和偏移裁剪窗口源紋理位置
(SU,SV)= ((u,v)*(1024,600))%(32,32)+(ox,oy)
把它放回用於採樣源位置座標的四,同樣在[0..1,0..1]
(SU,SV)=(((U,V)* (1024,600))%(32,32)+(OX,OY))/(TX,泰)
所以,現在當你寫,你可以用它來發現在一個像素着色器GLSL裁剪後的窗口與您想要的窗口匹配,用於每個片段。截斷操作'%'將使片段(u,v)對於每個片段上升到1,並且一次又一次地重複。
color = texture(sampler, (su,sv))
好吧現在我完全理解你的方法。我還沒有嘗試過,但看起來很有希望。是否有可能爲任何多邊形擴展這種方法?不只是一個矩形四邊形? – Savail
我想通了!只是一個uv操縱的問題。非常感謝! – Savail
我最終在片段着色器中使用了這樣一行代碼(僞代碼),從我的紋理圖集uv中計算出合適的UV座標。xy =(vertex_position.xy%image_size.xy + image_offset.xy)/ tex_size.xy;然而,不管我做什麼,這都會在瓦片之間引入空間。我嘗試將圖像大小擴大1 px或縮小圖像以僅採用不受混合影響的區域,但問題仍然存在。我想它與浮點精度有關,所以你認爲它可以以某種方式修復?在GL_REPEAT中使用整個紋理填充多邊形時,不存在這樣的問題 – Savail
- 1. 如何使用svg填充具有紋理的多邊形?
- 2. 如何從WinForm pictureBox中的圖像裁剪多邊形區域?
- 3. 如何填充圖形以便線條不被邊緣裁剪?
- 4. 按多邊形區域裁剪圖像
- 5. 使用CCRenderTexture填充具有紋理/顏色的多邊形
- 6. 用填充裁剪
- 7. 使用html5畫布將圖像剪裁成多邊形的可重複使用功能
- 8. 多邊形的紋理/背景圖像
- 9. 如何在opengles 2.0中使用圖像填充多邊形android
- 10. 使用邊框的裁剪圖像
- 11. 使用PIL裁剪圖像的邊框
- 12. 多邊形圖像填充算法
- 13. 生成多邊形從圖像中(填充的形狀)
- 14. OpenCL上的凹多邊形的圖像裁剪
- 15. 如何爲滑動的圓形裁剪圖像製作邊框
- 16. 如何在MATLAB中的圖像中裁剪多邊形(顯示在下圖中)?
- 17. 填充多邊形
- 18. 如何從圖像中獲取多邊形形狀的OpenGl紋理?
- 19. 如何裁剪圓形圖像openvc android
- 20. 如何將圖像裁剪成圓形?
- 21. 圓形裁剪圖像
- 22. 在cocos2d中填充帶有方形紋理的多邊形形狀的精靈
- 23. 如何使用CSS將矩形圖像裁剪爲正方形?
- 24. OpenGL中的內置多邊形裁剪
- 25. R中的多邊形裁剪
- 26. 可重複使用的多邊形
- 27. 使用Fabric.js可以用圖案填充多邊形嗎?
- 28. 用地圖上的pixmap圖像填充多邊形php
- 29. OpenGL紋理深度(裁剪紋理)
- 30. 使用Javascript複製和裁剪圖像
除非我誤解了這個問題,這不就是操縱uv座標的問題嗎?縮放uv範圍以匹配裁剪的寬度和高度,然後添加裁剪矩形相對於紋理的uv原點的正確偏移量。在着色器中,您可以根據fragCoord選擇/放棄要渲染的像素,並且如果希望最終結果包含邊框,也可以在那裏進行更多邊框匹配。 – StarShine
嗯我猜這是行不通的。以一個大矩形爲例,包含4個頂點的1024x600像素。假設我想用圖像32x32px填充它。如果從紋理中裁剪出這樣的圖像,則目標矩形的4個頂點不足以正確映射紋理座標以均勻地填充整個矩形。如果紋理完整,可以考慮沒有額外的偏移量......這就是我至少想到的。 – Savail