Vấn đề kỳ lạ với chương trình quảng cáo trong mô phỏng chất lỏng


7

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:

Quan điểm của các màu xoáy như trộn hai hoặc nhiều chất lỏng

Máy tính cá nhân:

cái nhìn bị bóp méo của các màu tương tự, rõ ràng là có lỗi


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

2
Vấn đề khó khăn bạn gặp phải, P = NP (đùa)
XiaoChuan Yu

2
@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

2
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

Câu trả lời:


1

Theo phản hồi của OP, thay thế

vec2 np = p - dt * texture(velocity, p).xy;

cho

vec2 np = p - dt * vec2(0.01);

Đã giải quyết vấn đề. Các lĩnh vực và mật độ di chuyển thông suốt trong (0.01, 0.01)chỉ đạo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.