android中的opengl 2d图像网格

时间:2011-03-06 03:56:09

标签: android opengl-es

我需要使用opengl绘制网格图像。我已经读过使用网格创建的图像可以对图像进行各种效果,例如着名的波浪效果,或来自此链接的连锁反应:

http://www.soulstorm-creations.com/index.php?option=com_content&view=article&id=111:opengl-making-a-2d-grid-image&catid=18:programming-articles&Itemid=39

我还从NEHE教程中学到了第6课android端口: http://insanitydesign.com/wp/projects/nehe-android-ports/

我可以将它从立方体转换为矩形,但我需要帮助才能理解 1)为什么我们使用0和1的顶点坐标?为什么他们没有根据图像的宽度和高度使用坐标? 2)如上面的教程所述,我们如何在小网格中划分纹理区域?如果有人可以指导1),我想我可以在第2点工作。

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:2)

顶点坐标从0到1,因此您可以使用具有许多不同纹理的顶点数据,而无需担心图像的尺寸。 也就是说,对于像素完美的操作,您经常需要通过纹理坐标一小部分图像的像素宽度(比如0.5f *(浮动)图像 - >宽度())和高度来确保OpenGl(或d3D)样品来自正确的地方。

至于划分网格,直接简单的线性插值。如果你有一个从像素坐标0到100的网格,你想在网格中有10个步骤,你从0开始,以10像素的步长递增:

  vertex_xi =  (start_x + ((end_x - start_x) / 10) * i));
  vertex_yi =  (start_y + ((end_y - start_y) / 10) * i));

同样地,对于纹理坐标,你只做同样的事情,你通常会这样命名:

  vertex_ui =  (start_u + ((end_u - start_u) / 10) * i));
  vertex_vi =  (start_v + ((end_v - start_v) / 10) * i));

其中'start_u'和'start_v'是'1.0f +/-偏移和结束'end_u'和'end_v'是'1.0f +/- offset'。把它放在你的顶点数组中,你应该很高兴。

HTH。