[英]OpenGL texture mapping with different coordinates systems
我已經問過一個關於紋理映射的問題,這兩個是相關的( 這個問題 )。
我正在使用Quartz Composer,它似乎與紋理有關...
我有一個在特定坐標系中進行三角剖分的復雜多邊形(x上為-1-> 1 | y上為-0.75-> 0.75)。 我在此坐標系中獲得了一個三角形頂點數組(左圖中的三角形1至6)。
然后,通過在從此坐標系到OpenGL的頂點的頂點上應用比例函數,分別渲染每個多邊形(這對於我的程序是必需的)(0。-> 1.)。 在這里,即使對於0-> 1范圍,它還是很愚蠢的:
return (((1. - 0.) * (**myVertexXorY** - minTriangleBound)) / (maxTriangleBound - minTriangleBound)) + 0.;
但我希望在這些三角形上貼上一張圖像(如上圖所示)。 因此,我首先獲得整個多邊形邊界(在右邊的圖片上為1),然后是三角形的邊界(在右邊的圖片上為2)。 我將1縮放為以像素為單位的圖片坐標(右圖為3),然后得到以像素為單位的三角形邊界(2)。
它為我提供了使用Quartz在OpenGL中鎖定紋理的界限:
NSRect myBounds = NSMakeRect(originXinPixels, originYinPixels, widthForTheTriangle, heightForTheTriangle);
我鎖住我的質地
[myImage lockTextureRepresentationWithColorSpace:space forBounds:myBounds];
然后,使用OpenGL:
for (int32 i = 0; i < vertexCount; ++i)
{
verts[i] = myTriangle.vertices[i];
texcoord[0] = [self myScaleFunctionFor:XinQuartzCoordinateSystem From:0 To:1]
texcoord[1] = [self myScaleFunctionFor:YinQuartzCoordinateSystem From:0 To:1]
glTexCoord2fv(texcoord);
}
而且我得到了您所看到的:有時圖像的某些部分適合,有時不適合(嗯,實際上,對於這個特定的多邊形,它根本不適合...)。
我不確定我是否確實了解您的問題,但是:
是什么阻礙您直接提供與源圖片的拓撲結構匹配的紋理坐標? 這比試圖找到每個三角形以正確方式移動圖片的線性映射要容易得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.