2015-10-20 94 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) –