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

попадание точки внутрь трёхмерного симплекса (4 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#45
14:12, 19 ноя. 2012

TarasB
Я играл, "двухэтажности" не видел, может ошибаюсь. Вся круть была в том что наклонные пол и стены (по сравнению с Doom 2), на этом движке еще кучу игр выпустили - Blood итд

>> Тетраэдры не произвольные, а полученны рекурсивным делением на 5 частей "главного" тетраэдра, пентадерево.
> И почему не может случиться цикличного наложения?
В алгоритме glukh берется правильный тетраэдр, делится по серединам сторон на 5 одинаковых частей - для этих пяти цикличного наложения нет и не возникнет, когда начнешь делить их далее - если A везде перекрывает B, то какие-то внутр части B не могут перекрывать внутр части A


#46
14:16, 19 ноя. 2012

Aslan
> Я играл, "двухэтажности" не видел, может ошибаюсь. Вся круть была в том что
> наклонные пол и стены

А винтовая лестница в комнате с проектором на 1м уровне?
А вообще я вот тоже не знал про самопересечения, спросил, мне сказали номер уровня и каким чит-кодом на него по-быстрому попасть. Проверил, так и есть.
В общем, спроси на old-games.ru/forum , а то я вот не помню сам уже.

Aslan
> В алгоритме glukh берется правильный тетраэдр, делится по серединам сторон на 5
> одинаковых частей

Если правильный тетраэдр поделить на 5 частей, то средняя из них будет октаэдром. Что с ним дальше делать?

#47
14:25, 19 ноя. 2012

TarasB
> А винтовая лестница в комнате с проектором на 1м уровне?
Кинозал с креслами +  большое помещение за стеной, делала ли лестница > полоборота  - сам не помню
Кстати и обзор вверх-вниз был ограниченный, наводит на подозрения о плоскостном рейтрейсе

> Если правильный тетраэдр поделить на 5 частей, то средняя из них будет октаэдром. Что с ним дальше делать?
Ха, тут ты прав. Можно делить октаэдр дальше на тетраэдры, будет ли там цикл пересечение проекций - хз, я вообще то у себя предполагаю использовать кубы, октодерево

#48
22:57, 19 ноя. 2012

Можно делить немного перекошенный тетраэдр. Там можно сделать так, что он будет делиться на 8 в два раза меньших тетраэдров.
Перекошенный тетраэдр получается делением  куба, сплюснутого вдоль главной диагонали, на 6 одинаковых частей вокруг этой самой диагонали. Сплюскивать надо так, чтобы длина диагонали сравнялась с длиной стороны.

#49
10:28, 20 ноя. 2012

Aslan
> Кстати и обзор вверх-вниз был ограниченный, наводит на подозрения о плоскостном
> рейтрейсе

Думаю, это было чисто для экономии - вертикальные стены рисовать проще, чем горизонтальные.

#50
11:06, 20 ноя. 2012

TarasB
Там все наклонное было на скалистых уровнях, но ограничения есть
Вертикальные стены Дума - просто граница между секторами, где луч встречает перепад высот, там стенка, вдоль сектора - горизонтальная линия
> вертикальные стены рисовать проще, чем горизонтальные
В Думе для горизонтальных поверхностей текстурные координаты как-то нелинейно интерполировались, чтобы сократить число делений
В движке Дюка пошли дальше, сектора могут быть наклонные, сам принцип остался - один луч на столбец экрана. Я так думаю )

#51
11:08, 20 ноя. 2012

}:+()___ [Smile]
Надо избегать вытянутых тел, на нижнем уровне придти к размеру проекции на экран около 1 пиксел

#52
11:15, 20 ноя. 2012

Aslan
> Там все наклонное было на скалистых уровнях, но ограничения есть

А ты поиграй, вспомни, всё ли было наклонным, или только чуть-чуть местами.

Aslan
> В Думе для горизонтальных поверхностей текстурные координаты как-то нелинейно
> интерполировались,

Для горизонтальных надо заполнять по горизонтали, тогда интерполяция будет линейная. Для вертикальных надо заполнять по вертикали. Для наклонных можно заполнять по диагонали (чтобы интерполировать только линейно), но я не осилил такое реализовать. Думаю, в Дюке просто деление. Если наклонные стены занимают не больше четверти экрана, то жить с этим можно.

#53
11:42, 20 ноя. 2012

TarasB
> А ты поиграй, вспомни, всё ли было наклонным, или только чуть-чуть местами
Помню что в уровне с пищерами и пол и стены и потолок неплоские

> Для горизонтальных надо заполнять по горизонтали, тогда интерполяция будет линейная
Там заполнялось вдоль луча. Я исходники Дума разбирал, все на С, кроме двух маленьких шустрых функций на асме - рисование вертикального отрезка для пола/потолка
и для стены. Крайне эффективный алгоритм, каждый пиксел красился ровно один раз
> Думаю, в Дюке просто деление
Не на каждый пиксел, с интерполяцией в промежутках. Даже в OpenGL так

#54
11:52, 20 ноя. 2012

Aslan
> Помню что в уровне с пищерами и пол и стены и потолок неплоские

А ты проверь.

Aslan
> рисование вертикального отрезка для пола/потолка

Для пола/потолка отрезок горизонтальный.

#55
12:01, 20 ноя. 2012

TarasB
> А ты проверь
Елки-палки, отлично помню же эту игру, да еще Блад 3Д, как ты себе представляешь прямоугольные скалы, пещеры

> Для пола/потолка отрезок горизонтальный
Я тебе пишу как было в Думе, там главное - эффективный алгоритм отсечения, основанный на трассировке

#56
12:09, 20 ноя. 2012

Aslan
> Елки-палки, отлично помню же эту игру, да еще Блад 3Д, как ты себе
> представляешь прямоугольные скалы, пещеры

Я тоже много чего помню. К сожалению ни одного скрина из пещеры найти не могу, нумерацию уровней не помню, а гугл упорно не желает отвечать на мои вопросы. И про самопересечения он тоже в неадекват впал.
Короче я только видео нашёл, извиняюсь за мыло.
Стенки вертикальные, пол - когда как.
screen | попадание точки внутрь трёхмерного симплекса

Aslan
> Я тебе пишу как было в Думе, там главное - эффективный алгоритм отсечения,
> основанный на трассировке

Ну так сначала отсекаем, потом заполняем пол горизонтальными линиями. В какой-то соседней теме тут обсуждалось это, в Думе именно так и есть.

#57
12:30, 20 ноя. 2012

TarasB
Ищи статьи 10-летней давности
Для каждого столбца пускается луч по BSP-tree, последовательно проходит выпуклые сектора, вдоль секущей рисуется вертикальный отрезок проекции пола/потолка на экран, на границе секторов рисуется стенка, если следующий сектор выше, причем карты две (пол и потолок), рисуется методом горизонта (отрезки отсекаются против top-bottom, повторять пока bottom<top)

#58
15:53, 20 ноя. 2012

Aslan
> рисование вертикального отрезка для пола/потолка
Вроде как горизонтально полы/потолки рисуются.

http://en.wikipedia.org/wiki/Doom_engine#Floor_and_ceiling

И тут заметка:
http://doomwiki.org/wiki/Talk:Doom_rendering_engine

Функция R_DrawSpan:

do 
{
  // Current texture index in u,v.
  spot = ((yfrac>>(16-6))&(63*64)) + ((xfrac>>16)&63);

  // Lookup pixel from flat texture tile,
  //  re-index using light/colormap.
  *dest++ = ds_colormap[ds_source[spot]];

  // Next step in u,v.
  xfrac += ds_xstep; 
  yfrac += ds_ystep;
  
} while (count--); 

> *dest++ = ds_colormap[ds_source[spot]];
> *dest++

#59
16:06, 20 ноя. 2012

entryway
Я исходники скачивал, сейчас вряд ли найду
Подход с трассировкой позволяет рисовать только то что попадет на экран, а то что ты привел - это рисовать каждую грань отдельно, нет смысла

Страницы: 1 2 3 4 5 6 7 Следующая »
ПрограммированиеФорумГрафика

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