kcb*_*ner 8 shader opengl-es ipad ios
我有一个顶点着色器,我在其中进行纹理查找以确定gl_Position.我将其用作GPU粒子模拟系统的一部分,其中粒子位置存储在纹理中.
似乎:vec4 textureValue = texture2D(dataTexture, vec2(1.0, 1.0));在模拟器上的行为与iPad设备不同.在模拟器上,纹理查找成功(该位置的值为0.5,0.5),我的粒子出现在那里.但是,在iPad本身,纹理查找不断返回0.0,0.0.
我尝试了格式为GL_FLOAT和GL_UNSIGNED_BYTE的纹理.
还有其他人经历过这个吗?GLSL ES规范说,纹理查找可以在顶点和片段着色器中完成,所以我看不出问题是什么.
我正在使用iOS SDK 4.2的最新GM Beta
Ang*_*bes 10
我刚试过这个.使用iOS 4.3,您可以在设备和模拟器上的顶点着色器上进行纹理查找.虽然有点奇怪(这也许是为什么它不像szu所说的那样"官方").在实际设备上(我在iPad 2上测试过),你必须在片段着色器和顶点着色器上进行查找.也就是说,如果您实际上没有在片段着色器上使用它,您仍然必须以某种方式引用它.这是一个简单的例子,我在传递纹理并使用红色像素重新定位顶点的y值:
/////fragment shader
uniform sampler2D tex; //necessary even though not actually used
void main() {
vec4 notUsed = texture2D(tex, vec2(0.0,0.0)); //necessary even though not actually used
gl_FragColor = vec4(1.0,1.0,1.0,1.0);
}
/////vertex shader
attribute vec4 position;
attribute vec2 texCoord;
uniform sampler2D tex;
void main() {
float offset = texture2D(tex, texCoord).x;
offset = (offset - 0.5) * 2.0; //map 0->1 to -1 to +1
float posx = position.x;
float posy = position.y + offset/8.0;
gl_Position = vec4(posx, posy, 0.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
我在http://www.mat.ucsb.edu/a.forbes/blog/?p=453上对此进行了更为全面的描述.
| 归档时间: |
|
| 查看次数: |
7479 次 |
| 最近记录: |