首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >纹理不缩放OpenGL es2.0

纹理不缩放OpenGL es2.0
EN

Stack Overflow用户
提问于 2015-10-20 15:08:22
回答 1查看 252关注 0票数 0

我正在尝试将纹理附加到我的游戏对象上,我发现,这个纹理总是被裁剪到我的对象的大小,所以如果我设置半径到1f,我可以看到完整的纹理,否则我可以看到中心裁剪。在这里你可以看到,我是如何创建一个圆圈的。我是OpenGL的新手,所以我真的不知道我还能给你看什么。谢谢你帮忙。

以下是媒体:

这里是全屏半径:

代码语言:javascript
运行
复制
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;
  }
EN

Stack Overflow用户

回答已采纳

发布于 2015-10-20 15:12:24

这可能是因为重新计算基于圆半径的纹理坐标。如果你想调整三角形扇形的大小,让纹理比例只是重新定位顶点(或者更好地用矩阵变换顶点位置)。

假设你和你的三角扇子组成的队伍应该显示整个纹理,坐标是0.0/0.0,0.0/1.0,1.0/0.0和1.0/1.0。如您所见,它们与顶点坐标无关,实际上根本不改变(除非您想以某种方式动画纹理)。

编辑

重新阅读您的代码,您的对象似乎包含更多的三角形,以形成一个实际的圆形。在这种情况下,您只需像计算一样计算纹理坐标(没有完全检查正确性),但使用半径为1,因此可以直接使用正弦和余弦,并使用偏移量:

代码语言:javascript
运行
复制
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.

顺便说一句,像上面这样增加偏移量可能会导致很难跟踪错误,如果您添加了更多的代码或移动行。最好在循环结束时单独增加。

至于旋转圆:通常你只需旋转顶点的位置,即重新计算那些。纹理坐标没有变化。或者,你保持顶点的位置和旋转纹理坐标,但这将使它更复杂,如果缩放,重新定位等也是如此。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33240268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档