Tôi thực hiện mô phỏng chất lỏng 2d. Bộ giải chạy hoàn toàn trên GPU. Tất cả đều hoạt động tốt ... trên PC làm việc của tôi. Nhưng trên PC ở nhà, tôi có một số trục trặc khủng khiếp và tôi không thể hiểu cách khắc phục chúng. Theo kinh nghiệm, tôi phát hiện ra rằng vấn đề được khoanh vùng ở đâu đó trong chương trình khuyến khích . Đây là nguyên nhân rất kỳ lạ tại nơi làm việc tôi đã tích hợp video và ở nhà - NVIDIA GeForce 9800 GT. Đây là nguồn chương trình khuyến khích GLSL (một số dòng đã bị loại bỏ vì rõ ràng):
#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;
}
Và một số ảnh chụp màn hình.
Máy tính làm việc:
Máy tính cá nhân:
Nó trông giống như trực quan hóa của một trường vectơ và có vẻ ổn, về mặt khái niệm. Có bất kỳ bộ đệm được hoán đổi ở đâu đó, hoặc đây chỉ là một bước mô phỏng duy nhất? Câu hỏi thú vị từ một lĩnh vực thú vị, hy vọng ai đó sẽ trả lời điều này. Để gỡ lỗi, tôi sẽ kiểm tra xem đồng phục của tôi có được thông qua chính xác không: sử dụng hằng số / phao thay vì đồng phục và xem sự khác biệt.
—
teodron
Đây chỉ là một bước mô phỏng duy nhất. Tôi có một hàm C ++ Advect (). Nó có kết cấu mục tiêu, kết cấu số lượng (q) và kết cấu vận tốc. Tôi đã làm theo lời khuyên của bạn và cố gắng sử dụng consts thay vì đồng phục, nhưng kết quả là như nhau.
—
iot
Vấn đề khó khăn bạn gặp phải, P = NP (đùa)
—
XiaoChuan Yu
@iodiot Bạn có thể đã gọi một cái gì đó xấu. Trình điều khiển tích hợp có thể được cho phép nhiều hơn NVidia.
—
Bartek Banachewicz
Bạn có thể trả lời câu hỏi với trước và sau không? Tôi nghĩ nó sẽ rất hữu ích cho bất kỳ ai gặp thử thách này trong tương lai.
—
AturSams