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

Отсечение невидимой геометрии (13 стр)

Страницы: 110 11 12 13 14 15 Следующая »
#180
9:58, 1 окт 2017

slava_mib
Ладно, буду перепроверять, но всё нормализуется. Пробовал пример для не нормализованных плоскостей, результат лучше, но чёт не то...
P.S. Нет, всё перепроверил, именно проверка на сферу работает косячно!

А теперь вопрос ко всем: где можно покурить пример реализации Ray Casting? Хочется ещё его добавить и убить эту тему, чтоб сделать универсальное решение для большинства задач и без надобности не заморачиваться на всяких порталах и прочих вещах.

#181
10:06, 1 окт 2017

Daniil Petrov, покажи реализацию (код).

> где можно покурить пример реализации Ray Casting?
Рейкастинг - оно не совсем по теме куллинга, если что ) По крайней мере рилтайм-куллинга.

#182
10:12, 1 окт 2017

slava_mib
> Рейкастинг - оно не совсем по теме куллинга, если что ) По крайней мере рилтайм-куллинга.
Бля :)))

Расчёт фрастама:

+ Показать

Каждая плоскость нормализуется, всё по урокам NeHe :)
Проверка сферы:

+ Показать
#183
10:16, 1 окт 2017

> FrustumPyramid[RIGHT] = glm::normalize(FrustumPyramid[RIGHT]);
Daniil Petrov, может проблема тут? Ты 4хмерный вектор нормализуешь? Нормализовать-то надо только нормаль - т.е. x/y/z, но не w...

#184
10:25, 1 окт 2017

slava_mib
А здесь разве не так?
http://pmg.org.ru/nehe/nehex2.htm
Кубик с точкой-то нормально отсекаются!

#185
10:31, 1 окт 2017

> А здесь разве не так?
Daniil Petrov, нет, там не так, обрати внимание на строки

   t = sqrt( frustum[0][0] * frustum[0][0] + frustum[0][1] * frustum[0][1] + frustum[0][2] * frustum[0][2] );

Тут при расчёте t берутся только x/y/z , а делятся на это значение - x/y/z/w
Т.е. это совершенно не то же самое, что normalize(vec4)

На всякий случай тебе код из моего двига:

void Culler::normalizePlanes()
{
  for (int i=0; i<m_planesCount; i++)
  {
    const float l = sqrtf(getPlaneVar(i, 0)*getPlaneVar(i, 0) + getPlaneVar(i, 1)*getPlaneVar(i, 1) + getPlaneVar(i, 2)*getPlaneVar(i, 2));
    plane_var(i, 0) = plane_var(i, 0)/l;
    plane_var(i, 1) = plane_var(i, 1)/l;
    plane_var(i, 2) = plane_var(i, 2)/l;
    plane_var(i, 3) = plane_var(i, 3)/l;
  }
}
#186
10:48, 1 окт 2017

slava_mib
Я уже взял отсюда: http://masandilov.ru/opengl/opengl-frustum, но за подсказку благодарю :))) я в тригонометрии не силён, а тут она ещё и на программировании основана, так что мне вдвойне сложнее грызть этот гранит науки!
Но вот с радиусом маленько что-то не то, но буду разбираться!

#187
11:54, 1 окт 2017
    if( dot( sphere->center, plane->normal ) - plane->dist <= -sphere->radius )
      return true; // sphere culled

Как можно накосячить в одной строчке?

#188
11:55, 1 окт 2017

А, всё дошло. У тебя плоскости стандартные, а не позитивные.

Center.z + FrustumPyramid[i].w

плюс на минус поменяй.

#189
18:34, 1 окт 2017

g-cont
> плюс на минус поменяй.
Таки неправильно - всё исчезает!
Да всё уже, разобрался, там только несрастушки с радиусом были :) теперь оформить обработку параллелепипеда и всё!

#190
4:31, 2 окт 2017

Интересное дело - после того, как нормализацию плоскостей исправил на верную и сфера стала отсекаться верно, куб стал отсекаться по точке Center, словно выполняется функция PointInFrustum :)))
Вот код куба, взятый из уроков NeHe:

+ Показать
#191
4:37, 2 окт 2017

ну, решение очевидно - пора начинать разбираться в том, что ты делаешь, вместо того, что бы просто копипастить :)))

#192
4:56, 2 окт 2017

slava_mib
В коде бы я ещё разобрался, но тут ещё и математика :) придётся, конечно!

#193
8:47, 2 окт 2017

Box in frustum.) у Кармака погляди, там более ясно все

#194
12:28, 2 окт 2017

> там более ясно все
barnes, да уж куда там ещё более ясно, чем расстояние от точки до плоскости )))

Страницы: 110 11 12 13 14 15 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.