2015-10-20 93 views
0

我想紋理附加到我的遊戲對象,我發現,質地總是裁剪到我的對象的大小,所以如果我設置半徑爲1f,我可以看到充滿質感,否則我只能看到裁剪中心。在這裏你可以看到,我如何創建圈子。我對OpenGL相當陌生,所以我真的不知道我還能向你展示什麼。感謝幫助。紋理不進行縮放的OpenGL ES 2.0

這裏是介質: Medium radius 這裏是全屏半徑: Full radius

private ViewObjectBuilder appendCircle(Geometry.Circle circle, int numPoints, float aspectRatio) { 

    final int startVertex = mOffset/FLOATS_PER_VERTEX; 
    final int numVertices = sizeOfCircleInVertices(numPoints); 

    mVertexData[mOffset] = circle.center.x/aspectRatio; 
    mTextureData[mOffset++] = (circle.center.x + 1f) * 0.5f; 
    mVertexData[mOffset] = circle.center.y; 
    mTextureData[mOffset++] = (circle.center.y + 1f) * 0.5f; 

    for (int i = 0; i <= numPoints; i++) { 
     float angleInRadians = ((float) i/(float) numPoints) * ((float) Math.PI * 2f); 

     final float c = (float) Math.cos(angleInRadians); 
     final float s = (float) Math.sin(angleInRadians); 

     mVertexData[mOffset] = 
      circle.center.x + circle.radius * c/aspectRatio; 

     mTextureData[mOffset++] = 
      (circle.center.x + circle.radius * c + 1f) * 0.5f; 

     mVertexData[mOffset] = circle.center.y + circle.radius * s; 

     mTextureData[mOffset++] = 
      (circle.center.y + circle.radius * s + 1f) * 0.5f; 
    } 

    mDrawList.add(() -> glDrawArrays(GL_TRIANGLE_FAN, startVertex, numVertices)); 
    return this; 
    } 

回答

1

這可能是由於重新計算紋理座標基礎上,圓的半徑。如果要調整三角形扇形的大小,並讓紋理縮放重新定位頂點(或更好地用矩陣變換頂點位置)。

假設你與你的三角形扇應顯示整個紋理形成小隊的座標將是0.0/0.0,0.0/1.0,1.0/0.0和1.0/1.0。正如你所看到的,它們獨立於頂點座標,事實上根本不會改變(除非你想以某種方式使紋理動畫化)。

編輯

重讀你的代碼,看來你的對象包含更多的三角形,以形成實際的圓形。在這種情況下,你只是計算的紋理座標爲你做(沒有的正確性完全檢查),但使用1半徑,因此你可以使用正弦和餘弦直接與偏移:

mTextureData[mOffset++] = c * 0.5f + 0.5f; 
//assume c = 1.0 then your coordinate becomes 1.0, 
//if c = -1.0 then your coordinate becomes 0.0 etc. 

順便說一句,如果增加更多代碼或移動線條,則增加上述偏移量可能會導致難以跟蹤錯誤。在循環結束時分別單獨增加。

至於旋轉的圓圈:通常你只需旋轉頂點位置,即重新計算的。紋理座標不變。或者,您可以保持頂點位置並旋轉紋理座標,但如果使用縮放,重新定位等,則會使其更加複雜。

+0

它不清楚,你能解釋一下嗎? –

+0

後來我想旋轉對象和紋理也。如果我在一個週期內進行計算,它們如何獨立? –

+0

傳遞給它的半徑與對象和視圖相同,我將其更改爲製作截圖。公式爲: (center.x + radius * c + 1f)* 0.5f;所以如果半徑是0.25,它不能是1,中心是(0,0) –