簡體   English   中英

OpenGL中復雜的紋理映射?

[英]Complex texture mapping in OpenGL?

在OpenGL中使用具有以下參數的紋理

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );

並像這樣映射它:

glBegin( GL_QUADS );
glTexCoord2f( 3.0, 2.0 ); glVertex2f( -2.0, 2.0 ); // P1
glTexCoord2f( 0.0, 2.0 ); glVertex2f( -2.0, -1.0 ); // P2
glTexCoord2f( 0.0, 0.0 ); glVertex2f( 2.0, -2.0 ); // P3
glTexCoord2f( 3.0, 0.0 ); glVertex2f( 2.0, 1.0 ); // P4
glEnd( );

我不確定最終結果會如何。 我知道glTexCoord中大於1的值將如何使紋理在x軸上重復,而0和1紋素將在y軸上重復。 我對在這種情況下如何映射紋理感到困惑。 會倒退嗎? 我似乎在互聯網上找不到任何類似的例子...

請記住,環繞模式適用於紋理坐標 (s和t),而不適用於x軸和y軸。 您的屬性指定s坐標換行和t坐標鉗位。

將其應用於您的坐標(基於紙面草圖),您的s坐標沿着從P3到P4的邊緣,從P2到P1的邊緣從0.0到3.0。 這些邊緣在y軸方向上。 由於您為s坐標指定了REPEAT ,並且s坐標對應於紋理中的水平方向,因此紋理的原始左右方向將與渲染中的y軸對齊。朝這個方向重復3次。

同樣,您的t坐標沿着從P3到P2的邊緣,從P4到P1的邊緣從0.0到2.0。 在渲染坐標系中,這些邊緣從右到左,稍微向上。 由於您為t坐標指定了CLAMP ,並且t坐標對應於紋理內的垂直方向,因此渲染四邊形的右側將在頂部到底部(或從底部到頂部)顯示紋理,具體取決於紋理的方式方向),則四邊形的左側將重復紋理的頂部/底部像素行。

用文字解釋時,這聽起來有些令人費解,但實際上並不那么復雜。 用白板上的一些草圖進行解釋會容易得多。

首先,您必須說明在此示例中頂點本身是如何連接的。 由於S和T坐標只不過是其中的紋理,你從你獲取更多的紋理像素。 它們與任何一般的空間軸都沒有關系(盡管它們可用於創建自己的特殊軸),它們實際上只是沿多邊形表面插值的坐標。

現在,由於您要在此處處理四邊形,因此對這些紋理坐標的插值的討論要復雜得多。 讓我們考慮一個漂亮的三角形(P1,P2,P3)...沿着邊P1,P2, T坐標是恆定的, S坐標的范圍是3.00.0 (紋理在S方向上重復3次,沿此邊緣)。

對所有邊緣重復此操作,以大致了解紋理沿邊緣的行為,然后查找重心坐標以了解如何在三角形的內部部分上插入坐標。

這是一個粗略的圖,說明了實現重心插值的數學公式:

重
(來源: docstoccdn.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM