OpenGL ES纹理映射

3
我需要在我的Android应用程序中绘制圆。 实际上,这是一个吃豆人游戏,我需要绘制药片。 由于药片有很多,我决定用一个单独的多边形来绘制每个药片。
这里是我的想法的说明:
http://www.advancedigital.ru/ideal_circle_with_only_one_polygon.jpg
顶点坐标:
//  (x, y)
0 : -R, R * (Math.sqrt(2) + 1)
1 : -R, -R
2 : R * (Math.sqrt(2) + 1), -R

顶点坐标是相对于圆心计算的,以便稍后轻松放置圆。

问题出在纹理映射上,根据我的计算,UV应该像这样。

0 : 0, -(Math.sqrt(2) + 0.5)
1 : 0, 1
2 : 1, (Math.sqrt(2) + 0.5)

但是,负的V值会导致应用程序只显示黑屏。这就是我认为我可能遗漏了一些东西或者我走错了路的原因...
我的问题是:有可能以那种方式渲染纹理吗?如果不可能,那么绘制小点的最佳方法是什么?
P.S. 我正在使用Android上的OpenGL ES 2.0。
看起来,这个人正在尝试做同样的事情。

你尝试过将GL_TEXTURE_WRAP_S/T纹理参数设置为GL_CLAMPGL_CLAMP_TO_EDGE吗? - Michael
没有,我之前没有尝试过你的建议,但它起了作用!请写下答案,我会接受它。这个想法是使用GL_CLAMP_TO_EDGE,而不是GL_REPEAT。请注意,OpenGL ES 2.0中似乎无法使用GL_CLAMP,或者拼写有所不同。 - Anton Boritskiy
我在UV坐标中也有一个错误 - 2点的UV对是:1,(Math.sqrt(2) + 1.5 - Anton Boritskiy
1个回答

1

GL_TEXTURE_WRAP_SGL_TEXTURE_WRAP_T纹理参数默认设置为GL_REPEAT。将它们改为GL_CLAMP_TO_EDGE,以获得您想要的效果(请参见glTexParameter文档)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接