Войти
ПрограммированиеФорумГрафика

Звездное небо (2 стр)

Страницы: 1 2
#15
(Правка: 15:51) 15:43, 29 июня 2021

MikeNew
> Тем что от обычного скайбокса я в принципе отказался в пользу полусферы, из-за
> проблем с репроекцией тоже.
И то и другое считается через луч.
Для скайбокса

  // id.xy - пиксель текстуры
  // TextureSize - 1./(размер текстуры)
  // общий луч
  float3 s = normalize(float3(id.xy*TextureSize*2.0-1.0,1.0));
  float3 side[6] = { s.xyz, float3(-s.x,s.y,-s.z), float3(s.zy,-s.x), float3(-s.z,s.yx), float3(s.xz,-s.y), float3(s.x,-s.z,s.y) };

 //дальше рендер как в shadertoy для каждой плоскости бокса свой луч side[Side]
Для полусферы
  // id.xy - пиксель текстуры
  // TextureSize - 1./(размер текстуры)
  // общий луч
  float angle = min(length(id.xy*TextureSize*2.0-1.0),1.0)*0.5*PI;
  float3 s = float3(normalize(id.xy*TextureSize*2.0-1.0)*sin(angle), cos(angle));
  float3 side[2] = {s.xzy, float3(s.x,-s.z,s.y)}
 //тот же рендер как в shadertoy для каждой полусферы свой луч side[Side]

#16
15:44, 29 июня 2021

Ещё за спрайты: "лучики" у звёзд будут всегда ориентированы в пространстве камеры, при поворотах это выглядит гораздо естественнее.

#17
(Правка: 18:15) 18:11, 29 июня 2021

MikeNew
> Тоже так планирую попробовать и сравнить что быстрее - спрайтами или из текстуры
Из текстуры - всего 6 граней (если рисовать скайбокс), но на весь экран, заполнять все пиксели
Имеет смысл, если там целая галактика, туманности итд

foxes
> звезды делал спрайтами, очень просто и можно за один дравколл все звезды накидать
Не Point sprite же? Звезды разных размеров, значит квадами
Если совмещать квад, представляющий звезду, с плоскостью экрана в вершинном шейдере - надо както передать туда центр квада

#18
18:26, 29 июня 2021

Aslan
> Если совмещать квад, представляющий звезду, с плоскостью экрана в вершинном
> шейдере - надо както передать туда центр квада
Это делается очень просто, я так частицы делал, а звёзды ещё проще — их не надо двигать.

#19
18:32, 29 июня 2021

Mikle
Как? Вершинный шейдер получает координаты самой вершины квада, надо повернуть их относительно центра квада одной текущей матрицей. А центр квада у звезд разный
Вот если бы в шейдере можно было читать из VBO по индексу...

#20
18:36, 29 июня 2021

Aslan
> Вершинный шейдер получает координаты самой вершины квада
У меня все четыре вершины содержат координаты центра частицы, а каждая вершина — вектор сдвига от центра. Сначала этот вектор умножается на нужный поворот, потом прибавляется к координате центра, а потом умножается на матрицу WVP.

#21
18:39, 29 июня 2021

Mikle
Это сделали через атрибуты вершин?
Вообще в OpenGL не нравится это момент, что можно считывать произвольные пиксели текстуры, а произвольные вершины VBO - нет

#22
19:09, 29 июня 2021

Aslan
> Это сделали через атрибуты вершин?
Да. В Direct3D9 у меня есть Vertex Declaration, где я описываю в любом порядке любые атрибуты.
Там выше я немного неправильно описал порядок действий.

Страницы: 1 2
ПрограммированиеФорумГрафика