簡體   English   中英

在表面上循環紋理

[英]Looping a texture on a surface

我想知道如何在對象的表面上循環紋理。

對於一個實際示例,我嘗試處理渲染世界幾何體 ,以便當我將世界對象的大小調整為其紋理大小的兩倍時,紋理將出現兩次-而不是兩倍。

有什么適當的方法來處理嗎? 我唯一想到的就是物理上創建一個大小合適的全新紋理,並手動復制X次,但這聽起來確實會很快消耗大量內存。

這是一張圖片,顯示我在XAxis上調整平面大小時正在尋找的東西:

例

與許多其他變量一起,我將對象的UVMap作為“紋理坐標”傳遞給我的着色器,然后在執行draw數組調用之前執行以下操作以渲染對象的紋理:

QImage image;
image = worldObject->getQImage(i); //Within a for loop, grabs the right texture if the object has differing textures per face of object

glBindTexture(GL_TEXTURE_2D, spot);
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, image.width(), image.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, image.bits());

這很容易做到。 當前在[0.0,1.0]范圍內使用紋理坐標的地方,只需使用更大的范圍即可。 例如,要重復兩次紋理,如您的示例所示,您可以在[0.0,2.0]范圍內指定紋理坐標。

這與將GL_REPEAT用於紋理環繞模式結合使用:

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

這些值實際上是默認值,因此如果您之前沒有將它們設置為其他值,則無需進行設置。

這指定應該對[0.0,1.0]范圍之外的紋理坐標重復該紋理。 例如,介於1.0和2.0之間的紋理坐標將等效於介於0.0和1.0之間的坐標,從而重復整個紋理。

暫無
暫無

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

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