【发布时间】:2012-03-21 21:04:12
【问题描述】:
看起来这应该很容易,但我在使用带有点精灵的纹理的一部分时遇到了很多困难。我已经广泛搜索并找到了各种答案,但没有一个涉及我遇到的具体问题。
到目前为止我学到了什么:
- Basics of point sprite drawing
- How to deal with point sprites rendering as solid squares
- How to alter orientation of a point sprite
- How to use multiple textures with a point sprite,这里越来越近了..
- 之前已经做过点精灵 + 精灵表,但只能在 OpenGL ES 2.0(不是 1.0)中实现
这是我正在努力实现的图表
我在哪里:
- 我有一组工作点精灵都使用同一个正方形图像。例如:16x16 的圆形图像效果很好。
- 我有一个 Objective-C 方法,它生成一个 600x600 的图像,其中包含一个带有多个图像的精灵表。我已经通过将整个精灵表图像应用到使用 GL_TRIANGLES 绘制的四边形来验证这是有效的。
- 我已成功使用上述方法将精灵表的一部分绘制到四边形上。我只是无法让它与点精灵一起使用。
- 目前,我正在生成纹理坐标,指向我要定位的精灵表上的精灵中心。例如:使用底部的图像;星级:0.166,0.5;云:0.5,0.5;心脏:0.833,0.5。
代码:
顶点着色器
uniform mat4 Projection;
uniform mat4 Modelview;
uniform float PointSize;
attribute vec4 Position;
attribute vec2 TextureCoordIn;
varying vec2 TextureCoord;
void main(void)
{
gl_Position = Projection * Modelview * Position;
TextureCoord = TextureCoordIn;
gl_PointSize = PointSize;
}
片段着色器
varying mediump vec2 TextureCoord;
uniform sampler2D Sampler;
void main(void)
{
// Using my TextureCoord just draws a grey square, so
// I'm likely generating texture coords that texture2D doesn't like.
gl_FragColor = texture2D(Sampler, TextureCoord);
// Using gl_PointCoord just draws my whole sprite map
// gl_FragColor = texture2D(Sampler, gl_PointCoord);
}
我的困惑:
- 我不明白如何在片段着色器中使用
gl_PointCoord变量。gl_PointCoord最初包含什么?为什么?它从哪里获取数据? - 我不明白要传入什么纹理坐标。例如,点精灵如何根据纹理坐标选择要使用我的精灵表的哪个部分?我习惯于绘制实际上具有 4 组纹理坐标(每个顶点一组)的四边形,这有什么不同(显然是这样)?
【问题讨论】:
-
还是卡住了,有人可以分享一个示例着色器吗?
标签: ios opengl-es glsl opengl-es-2.0