我怀疑我没有正确地将粒子位置呈现给我的FBO,或者在渲染时正确地采样这些位置,尽管这可能不是我的代码的实际问题,当然。
我有一个完整的小提琴在这里:http://jsfiddle.net/p5mdv/53/
守则简介:
Initialization:
粒子模拟:
粒子绘制:
问题:
相关着色器:
粒子模拟破片着色器:
precision mediump float;
uniform sampler2D mParticleTex;
void main()
{
// Current pixel is the particle's position on the texture
vec2 particleSampleCoords = gl_FragCoord.xy;
vec4 particlePos = texture2D(mParticleTex, particleSampleCoords);
// Move the particle up
particlePos.y += 0.1;
if(particlePos.y > 2.0)
{
// Reset
particlePos.y = -2.0;
}
// Write particle out to texture
gl_FragColor = particlePos;
}粒子渲染顶点着色器:
attribute vec4 vPosition;
uniform mat4 u_modelViewProjMatrix;
uniform sampler2D mParticleTex;
void main()
{
vec2 particleSampleCoords = vPosition.xy;
vec4 particlePos = texture2D(mParticleTex, particleSampleCoords);
gl_Position = u_modelViewProjMatrix * particlePos;
gl_PointSize = 10.0;
}如果没有其他方法,请告诉我是否有更好的方法来调试它。我正在使用webgl-debug查找gl错误,并尽可能地将其记录到控制台。
发布于 2013-06-13 21:35:05
发现问题了。
gl_FragCoord从0,0到屏幕宽度,屏幕高度,我错误地认为它是从0,0到1,1。
我必须输入阴影变量的宽度和高度,然后标准化的样本坐标,然后从纹理取样。
发布于 2013-06-04 11:32:38
您的四边形正远离视图,所以我尝试添加gl.disable(gl.CULL_FACE),但仍然没有结果。
然后我注意到,当调整窗口面板的画布尺寸时,它实际上显示了一个黑色的方形粒子。因此,渲染循环似乎不太好。
如果您查看控制台日志,它无法加载粒子映像,并且它还指出FBO大小为512x1,这不是很好。
有些函数声明不存在,如getTexSize。(?!)
代码需要整理和分组,如果您已经在使用它,请始终检查控制台。
希望这能帮点忙。
https://stackoverflow.com/questions/16904340
复制相似问题