Атмосферное рассеянное реализацияC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Атмосферное рассеянное реализация

Сообщение Anonymous »

Я пытаюсь реализовать атмосферное рассеяние в OpenGL. Я использую эту «бумагу» в качестве урока. /> Во -первых, я не знаю, является ли s расстоянием от глаз до купола или расстояния от глаз до источника света (здесь солнце).
То же самое для углового тета я не могу понять, является ли это угол от земли до солнца или до положения купола, глаз выглядит. src = "https://i.sstatic.net/ocdco.png"/>
...it сообщает мне, что появится синий цвет неба. Я знаю, что это причина рассеяния Рэлея, но я не могу понять. Все расчеты в приведенных выше формулах дают мне скаляр: так, как белый свет солнца, который в основном представляет собой VEC3 (1,1,1), станет синим, когда я умножаю его на скаляре, он будет только в серой шкале, потому что у меня будет результат, например, VEC3 (0,8,0,0,0,0,8). Я имею в виду, если появляется какой-то другой цвет неба, я должен размножить солнечный свет на VEC3, чтобы изменить значение RGB по-разному.

Код: Выделить всё

#version 330
in vec3 vpoint;
in vec2 vtexcoord;

out vec2 uv;
out vec3 atmos;

uniform mat4 M;
uniform mat4 V;
uniform mat4 P;

mat4 MVP = P*V*M;

//uniform vec3 lpos;
vec3 lpos = vec3(100,0,0);

uniform vec3 cpos;

vec3 br = vec3(5.5e-6, 13.0e-6, 22.4e-6);
vec3 bm = vec3(21e-6);

float g = -0.75f;

vec3 Esun = vec3(2000,2000,2000);

vec3 Br(float theta) {
return 3/(16*3.14) * br * (1+cos(theta)*cos(theta));
}

vec3 Bm(float theta) {
return 1/(4*3.14) * bm * ((1 - g)*(1 - g))/(pow(1+g*g-2*g*cos(theta),3/2));
}

vec3 atmospheric(float theta, float s) {
return (Br(theta)*Bm(theta))/(br+bm) * Esun * (1- exp( -(br+bm)*s ));
}

void main() {
gl_Position = MVP * vec4(vpoint, 1.0);
uv = vtexcoord;

vec3 domePos = vec3(M*vec4(vpoint,1.0));

vec3 ldir = lpos - domePos;

float s = length(domePos-cpos);
float theta = acos(dot(normalize(ldir-domePos),normalize(domePos-
cpos)*vec3(1,1,0)));

atmos = atmospheric(theta,s)*1000000*5;
}
Я не понимаю, что я ожидал, вот что я получаю:

Я только у меня есть, и у меня есть, и у меня, и у меня, у меня, у меня есть, и у меня, и у меня, у меня есть, и у меня, и у меня, у меня, у меня есть синий, и нет Видно, я должен увидеть какой -то красноватый цвет, когда солнце становится низко.

Подробнее здесь: https://stackoverflow.com/questions/370 ... ementation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»