[英]Texture coordinates in OpenGL
對不起,這是一個非常級別的問題...
我想將一個特定的紋理(不是整個紋理)應用到四邊形。 紋理是256x64圖像,我希望能夠通過說明其左上角和右下角的像素坐標來指定相關的部分([0,0]是整個圖像的左上角和[256,64]是右下角)。
有關如何做到這一點的任何想法?
謝謝。
小數答案是正確的,但如果要使用整數紋理坐標(例如在VBO中),可以使用GL_TEXTURE
矩陣來更改紋理坐標系:
glMatrixMode(GL_TEXTURE)
glLoadIdentity()
glScalef(1f/256f, 1f/64f, 1f)
之后,您的紋理坐標單位將是像素。 另一種縮放策略是縮放,因此每個圖塊在最終單位中為1x1。
想象你想使用從10,10開始的20x20紋素,你可以使用以下坐標:
[10.f/256.f,10.f/64.f]
[30.f/256.f,10.f/64.f]
[30.f/256.f,30.f/64.f]
[10.f/256.f,30.f/64.f]
您使用基於浮動的紋理坐標,其范圍從(0.0f,0.0f)到(1.0f,1.0f)。 在您的情況下,您將獲取像素值並將其除以256-1或64-1,具體取決於您要處理的維度。 (這假設你真的想說你的圖像是[255,63]而不是[256,64],這意味着你的坐標是基於0而不是基於1。)
讓我們看一下以下8個像素寬度的1D紋理的簡化示例(像素中心位於數字處):
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
相應的紋理坐標是:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
0/8 1/8 2/8 3/8 4/8 5/8 6/8 7/8 8/8
現在,如果你想要紋素3到7的子紋理,那么使用的紋理坐標是2/8到7/8。
您還應注意其他內容:整數紋理坐標不會解決紋素中心,而是它們之間的確切中間位置; 在某些情況下,這可能會導致外觀模糊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.