簡體   English   中英

紋理未縮放OpenGL ES 2.0

[英]Texture not scaled OpenGL ES 2.0

我試圖將紋理附加到游戲對象上,我發現紋理總是按照我對象的大小進行裁剪,因此,如果將radius設置為1f ,則可以看到完整的紋理,否則只能看到中心裁剪。 在這里您可以看到我如何創建圈子。 我對OpenGL很陌生,所以我真的不知道還能向您展示什么。 感謝幫助。

這是中等的: 中半徑 這是全屏半徑: 全半徑

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;
  }

這可能是由於根據圓半徑重新計算了紋理坐標。 如果要調整三角形扇的大小並讓紋理縮放僅重新調整頂點的位置(或更好地使用矩陣轉換頂點位置)。

假設使用三角形風扇形成的小隊應顯示整個紋理,則坐標將為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.

順便說一句,如果您添加更多代碼或四處移動行,則如上所述增加偏移量可能會導致難以跟蹤錯誤。 最好在循環結束時分別遞增。

至於旋轉圓:通常只需旋轉頂點位置即可,即重新計算這些位置。 紋理坐標不變。 另外,您可以保留頂點位置並旋轉紋理坐標,但是如果同時使用縮放,重新放置等方法,則將使其更加復雜。

暫無
暫無

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

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