我知道这可以通过对给定的纹理使用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