Проблема с передачей массива значений для источников света в SFMLC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с передачей массива значений для источников света в SFML

Сообщение Anonymous »


Я пытаюсь создать систему Lightning на C++, используя SFML и GLSL.

У меня есть серия фонарей. У каждого источника света есть положение и значение радиуса.

Код шейдера следующий

однородная текстура sampler2D; униформа int LightAmt; равномерный поплавок RadiVal[15]; униформа vec2 Position[15]; равномерное затухание поплавка; равномерные шаги с плавающей запятойToFragment; float CircleSDF (точка vec2, плавающий радиус, центр vec2) { // Вычисляем расстояние от точки до центра круга плавающее расстояние = длина (точка - центр); // Расстояние со знаком — это абсолютная разница между расстоянием и радиусом расстояние возврата – радиус; } float DotProduct(vec2 A, vec2 B) { float diffX = зажим(A.x - B.x, 0, Затухание); float diffY = зажим(A.y - B.y, 0, Затухание); return sqrt(diffX * diffX + diffY * diffY); } vec4 AdditiveBlend(vec4 A, vec4 B, float blendFactor) { float ABlend = 1.0f - blendFactor; поплавок BBlend = blendFactor; vec4 totalBlend = (A * ABlend) + ( B * BBlend); TotalBlend.a = А.а; вернуть тотальную смесь; } пустая функция() { vec2 fragCoord = gl_TexCoord[0].xy; vec2 uv = fragCoord.xy; плавающий барКол = 0,0; float isEven = mod(round((uv.y) * 80.0), 2.0); bool Alt = isEven == 0.0; цвет vec4 =texture2D(текстура, gl_TexCoord[0].xy); Боул isLit = ложь; для (int я = 0; я = 0,0) { // Эта часть представляет неосвещенную область } еще { //// Эта часть представляет освещенную область isLit = правда; перерыв; } } если (isLit) { цвет = AdditiveBlend(color,vec4(0.0,0.0,0.0,1.0) , 0.5); } еще { цвет = AdditiveBlend(цвет, vec4(0.0,0.0,0.0,1.0), 0.9); } gl_FragColor = цвет; Общая идея заключается в том, что если пиксель находится внутри любого радиуса источника света, он горит. в противном случае он не горит.

В настоящее время визуализируется только последний источник света, добавленный в мой вектор источников света.

for(int i = 0; i < context->Lights.size(); i++) { sf::Glsl::Vec2 Camera(MainGame::gGCon->Camera.x, MainGame::gGCon->Camera.y); sf::Glsl::Vec2 Window(context->GetWindow()->getSize().x, context->GetWindow()->getSize().y); Время += 0,001; sf::Glsl::Vec2 Pos(context->Lights.X, context->Lights.Y); Поз.х —= Камера.х/2; Поз.у += Камера.у/2; Поз.х /= Окно.х; Поз.у /= Окно.у; если (Время
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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