Eu implementei o simulador de fluido 2d. O Solver é executado inteiramente na GPU. Tudo funciona bem ... no meu PC de trabalho. Mas no PC doméstico, tenho algumas falhas terríveis e não consigo entender como corrigi-las. Empiricamente, descobri que o problema está localizado em algum lugar do programa avançado . Essa é uma causa muito estranha no trabalho, integrei vídeo e em casa - NVIDIA GeForce 9800 GT. Aqui está a fonte GLSL do programa de advect (algumas linhas foram descartadas para maior clareza):
#version 130
out vec3 value;
uniform sampler2D q;
uniform sampler2D velocity;
uniform float dt;
uniform float inverseSize;
void main()
{
vec2 p = gl_FragCoord.xy * inverseSize;
vec2 np = p - dt * texture(velocity, p).xy;
value = texture(q, np).xyz;
}
E algumas capturas de tela.
PC de trabalho:
PC doméstico:
Parece a visualização de um campo vetorial e parece ok, conceitualmente. Existem buffers trocados em algum lugar ou isso é apenas uma única etapa de simulação? Pergunta interessante de um campo interessante, espero que alguém responda a isso. Para depurá-lo, eu verificaria se meus uniformes são passados corretamente: use constantes / flutuadores em vez de uniformes e veja a diferença.
—
Teodron # 21/12
Esta é apenas uma única etapa de simulação. Eu tenho uma função C ++ Advect (). É preciso textura alvo, quantidade textura (q) e textura de velocidade. Segui o seu conselho e tentei usar consts em vez de uniformes, mas o resultado é o mesmo.
—
Iodiot 21/04
Problema difícil u chegou lá, P = NP (piada)
—
Xiaochuan Yu
@iodiot Você pode ter invocado algo ruim. Drivers integrados podem ser mais permissivos que a NVidia.
—
Bartek Banachewicz
Você poderia responder à pergunta com um antes e um depois? Eu acho que seria muito útil para quem enfrentar esse desafio no futuro.
—
AturSams