2016-08-06 191 views
0

我目前在座標開始環繞的地方遇到了我的紋理VBO問題。我在紋理周圍一直添加了30像素的黃色邊框,使效果更加突出。 enter image description here紋理環繞,奇怪的邊緣

當看得更近時,看起來好像整個紋理被壓扁並塗抹在黃線之間。

enter image description here

紋理座標代碼(緩衝液[0] =頂點X,緩衝液[2] =頂點Y):我的支票的低於0或高於1通過座標

if ((buffer[0] * s) < 0) Logger.logDebug(buffer[8]+","+buffer[9]); 
if ((buffer[2] * s) < 0) Logger.logDebug(buffer[8]+","+buffer[9]); 
buffer[8] = (buffer[0] * s) % 1f; //tx 
buffer[9] = (buffer[2] * s) % 1f; //ty 
if (buffer[8] > 1f || buffer[9] > 1f) Logger.logDebug(buffer[8]+","+buffer[9]); 
if (buffer[8] < 0f || buffer[9] < 0f) Logger.logDebug(buffer[8]+","+buffer[9]); 

無,所以他們在正確的範圍內。

破片着色器:

#version 150 core 

uniform sampler2D texture1; 
in vec4 vColor; 

in vec4 pass_Color; 
in vec2 pass_texCoord; 
out vec4 out_Color; 

void main() 
{ 
    out_Color = pass_Color; 
    out_Color = texture(texture1, pass_texCoord.st); 
} 

韋爾着色器:

uniform mat4 projection = mat4(
         1.0, 1.0, 1.0, 1.0, 
         1.0, 1.0, 1.0, 1.0, 
         1.0, 1.0, 1.0, 1.0, 
         1.0, 1.0, 1.0, 1.0); 
uniform mat4 view = mat4(
         1.0, 1.0, 1.0, 1.0, 
         1.0, 1.0, 1.0, 1.0, 
         1.0, 1.0, 1.0, 1.0, 
         1.0, 1.0, 1.0, 1.0); 
uniform vec4 overrideColor = vec4(-1,-1,-1,-1); 

in vec4 in_Color; 
in vec4 in_Position; 
in vec2 texCoord; 

out vec4 pass_Color; 
out vec2 pass_texCoord; 

void main() 
{ 
    gl_Position = projection * view * gl_Vertex; 
    if (overrideColor == vec4(-1,-1,-1,-1)) 
    { 
     pass_Color = in_Color; 
    } 
    else 
    { 
     pass_Color = overrideColor; 
    } 
    pass_texCoord = texCoord; 
} 
+0

'''看起來很可疑。在那個點你的座標是否可以小於零?嘗試在這裏和那裏添加一些'fabs'。 – usr2564301

+0

所有這一個四元組,或來自[0,1]的tex座標的倍數? – qxz

+0

這是用Java編寫的,對吧? – qxz

回答

2

您使用四邊形的細網格,並試圖通過它們包裝一個大紋理,對不對?我認爲問題在於一些四邊形橫跨邊界。您應該確保在包裝界出現在右股四頭肌的邊緣,或者我會建議,只要設置你的紋理包:

// when you set up your texture 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

然後不使用模量紋理座標; COORDS外[0,1]會自動換行/重複:

buffer[8] = buffer[0] * s; //tx 
buffer[9] = buffer[2] * s; //ty 

見包裝的外觀質感像thisthis

+0

謝謝。我只是看着我的AssetManager,它被設置爲CLAMP_TO_EDGE而不是REPEAT。改變之後,並去掉我的模量包裹,紋理正確平鋪。 – CConard96