Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2012, 19:39   #1
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию Рельеф, поверхности и перемещение.

Недавно начал заниматься построением кривых поверхностей (рельефов). Скажу честно, что реализаций у меня нет. Сегодня собираюсь исправится, но пока напишу эту тему, чтобы посоветоваться и получить несколько ответов на свои вопросы. На данный момент я изучил алгоритм построения кривых Безье и соответственно поверхностей с помощью последних. Я понимаю, что это ничтожная часть знаний, но она дает огромный толчок к изучению "рельефостроения". Я хочу узнать как сейчас "модно" строить ландшафты? Интересует именно алгоритмы а не редакторы. Знаю, что существуют NURBS поверхности, но в чем их преимущество над кривыми Безье? Ответ я поищу самостоятельно, но все же хочется обсудить здесь. Меня интересует еще одна вещь, которая, на мой взгляд, наиболее интересна - это реализация столкновений с поверхностью. Т.е. как определить, что в точке X,Y, максимальная высота рельефа по оси Z равна a? Моя цель - это физический симулятор(от механики до теории относительности) и очень уместно использовать рельефы. Буду рад любым ответам, но больше всего меня волнуют столкновения с поверхностью и перемещение по ней.
Заранее спасибо.
P.S. 28 урок Nehe читал. Но этого мало.
У меня в запасе есть еще несколько вопросов. Часть из них я опубликую позже, иначе не успею сегодня попрактиковаться.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 25.12.2012, 19:55   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Как правило, для визуализации и для расчета столкновений используются разные поверхности.
s-andriano вне форума Ответить с цитированием
Старый 25.12.2012, 20:25   #3
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Цитата:
Как правило, для визуализации и для расчета столкновений используются разные поверхности.
С моим уровнем образования этого очень мало для понимания. Проверьте так ли я понял. В памяти в виде многомерного массива хранятся вершины полигонов [X][Y], которые образуют рельеф, и уже с их помощью рассчитываются столкновения. Ищем ближайшую точку X,Y, значением элемента массива будет координата Z. Возникает трудность. Индексы массивов целочисленные, придется лишний раз делить/масштабировать.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 26.12.2012, 15:48   #4
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Карты высот
Про определение столкновений, пересечений, расстояний и пр. посмотрите тут
Kostia вне форума Ответить с цитированием
Старый 26.12.2012, 19:48   #5
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Спасибо большое. Смотрел на карту высот и до этого и возник вопрос. Что для чего используется? Почему используют Безье? Что лучше и в каком случае?
Цитата:
Про определение столкновений, пересечений, расстояний и пр. посмотрите тут
Немного ограничивает английский язык, ну ладно.
Хочу окончательно разобраться с Безье. Не соображу как работает алгоритм "де Кастельжо". Чем он отличается от простой подстановки в P = (1−t)^3*P1 + 3*(1−t)^2*t*P2 +3(1−t)*t^2*P3 + t^3*P4? Если я не ошибаюсь, то есть еще инкрементальный рекуррентный метод, который использует всего шесть сложений, но не понимаю как он работает. Рассмотрим следующий рисунок с урока Nehe.

Хотелось бы оптимизировать алгоритм построения, который крутится у меня в голове. Строим для начала в уме кривую через точки P3.0 P3.1 P3.2 P3.3, потом нам нужно построить в параллельной плоскости другую кривую, но как это правильно сделать. Не брать же отрезки P3.0 P2.0; P3.1 P2.1 и еще две прямые за безье первой степени и находить на них точку находящуюся на t% от начала, а потом строить кривую через полученные точки, соединяя ее с предыдущей. Не правда ли бред? 10000 знаков Pi быстрее посчитаются. Исходники Nehe работают каким-то чудом. Что это за чудо я не могу понять. Тупо копировать их для меня не спортивно. Если кто-то сталкивался, то подскажите ,пожалуйста, алгоритм на словах, хотя бы в сокращении. Уже и работы питерских студентов находил, не могу понять о чем они говорят. Попробую пойти на второй заход. После Безье начну рассматривать карты высот.
Еще раз спасибо за помощь.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 26.12.2012 в 21:44.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 26.12.2012, 21:56   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от _PROGRAMM_ Посмотреть сообщение
С моим уровнем образования этого очень мало для понимания. Проверьте так ли я понял. В памяти в виде многомерного массива хранятся вершины полигонов [X][Y], которые образуют рельеф, и уже с их помощью рассчитываются столкновения. Ищем ближайшую точку X,Y, значением элемента массива будет координата Z. Возникает трудность. Индексы массивов целочисленные, придется лишний раз делить/масштабировать.
Да, боюсь, что с пониманием, действительно есть некоторые проблемы. По крайней мере, я писал совершенно о другом.

Но давайте зайдем с той стороны, которая Вам, вроде бы, кажется более понятной.

Рельеф, насколько мне представляется, хранится в виде достаточно сложной многоуровневой структуры, что связано с одной стороны желанием совместить достаточно сложный рельеф, что требует в некоторых местах достаточно подробной сетки, с другой - необходимостью поместить этот рельеф в ограниченный объем памяти.

Поэтому регулярные сетки для описания масштаба находят очень ограниченное применение.
Но если такие сетки используются и вычисления по каким-либо причинам вызывают затруднения, видеокарта обеспечивает примерно то, что Вы называете "дробными индексами" на аппаратном уровне.

Но вряд ли это Вам понадобится.
Количество подвижных объектов в игре, как правило, составляет от нескольких десятков до нескольких сотен. Лишний десяток арифметических операций - нагрузка на процессор совершенно незначительная, поэтому вряд ли имеет смысл пытаться что-то оптимизировать именно в этом месте.
s-andriano вне форума Ответить с цитированием
Старый 08.01.2013, 11:40   #7
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Спасибо. Буду думать. Все-таки дополнительно хочется понять принцип построения поверхностей Безье. Я немного не пойму алгоритм. Имея 16 точек мы можем построить 4 кривых в 4х параллельных плоскостях. Это я понял, рассматривая урок 28 Nehe. Потом берем по точке на каждой кривой с одинаковым процентом от начала и строим кривую уже через них. Но ведь это нехорошо! Поверхность получится ниже оригинальных точек. Может я что-то не так понял. Хотя в общем-то это и не мешает, но все равно как-то нехорошо.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рельеф произвольной функции двух переменных cote Помощь студентам 24 16.05.2012 19:52
3D поверхности Lost_Angel C++ Builder 1 29.03.2012 01:19
Поверхности в MathCAD compman Помощь студентам 0 15.03.2010 03:28