Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пример Jan Horn-a + Космос


john black ©   (2004-08-09 16:39:00) 

http://www.endorus.ru/cosmo.zip(463 Kb)
http://www.endorus.ru/shot.jpg(32 Kb)
Космос - как в homeworld -
сфера и спрайтовые звезды. Если кому интересно - посмотрите
Жду коментариев и критики


Ландграф Павел   (2004-08-11 22:15:00) [1]

у меня одна притензия (вроде так слово пишется)... дикая скорость управления... нажал на кнопочку... а земли уже не видно... или это гиперпрыжки?=)


NailMan   (2004-08-11 17:32:00) [2]

Точками хорошо получается если задать им плавающий размер(в D3D это возможно, в OGL кажется тоже). Скажем 1.2 пикселя. Получается легкий эффект мерцания пр движении.

Распределение лучше всего делать не по сферическим координатам(Alpha, Phi, Radius) а по кубическому гауссовому.
Генерируется координата XYZ через функцию RandG из Math в кубе, т.е
X:=RandG(0,100)
Y:=RandG(0,100)
Z:=RandG(0,100)
И полученный вектор(координата) нормализуется. Получается проектированная из куба на поверхность сферы точка. И в буфер вершин это дело вместе с цветом.

---
WBR, NailMan aka 2:5020/3337.13


Sapersky   (2004-08-11 12:38:00) [3]

Зависит от того, как делаются звёзды (сейчас под рукой тех исходников нет). И как в принципе их лучше делать... В том же Homeworld 1 (и у меня в демке) это отдельные спрайтики (биллборды - квадраты, всё время повёрнутые к зрителю). Если звёзд относительно немного (в Homeworld 1 в среднем около 50, но он вышел, если не ошибаюсь, в 99 г; сейчас можно больше :)), получается довольно быстро. Ну или просто точки - это быстрее, хотя выглядит хуже (и по-разному в разных разрешениях).
Если лепить всё одной текстурой, то она должна быть очень большой, чтобы звёзды получились чётко (зацикливать текстуру - нереалистично). Хотя, если использовать куб, т.е. 6 текстур, наверное, можно ограничиться и 512 * 512.

Нормали... как найти перпендикулярный вектор к двум векторам - этому в школе учат, называется векторное произведение (или Cross Product).

function VectorCrossProduct(const v1, v2: TVector) : TVector;
begin
 result.x := (v1.y*v2.z) - (v1.z*v2.y);
 result.y := (v1.z*v2.x) - (v1.x*v2.z);
 result.z := (v1.x*v2.y) - (v1.y*v2.x);
end;

v1 и v2 берутся как разности между точками грани, для которой считается нормаль:

nm:=VectorNormalize( VectorCrossProduct ( VectorSub (v[1], v[0]), VectorSub(v[2], v[1]) ));

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

Относительно построения поверхностей - м-да, не очень понимаю, как оно строится полосками (рисуется полосками, т.е. triangle strip'ами, может быть?). В принципе, если правильно посчитать нормали, можно и полосками рисовать. Хотя это не самый эффективный метод - обычно используют индексы, но как их задействовать в OGL, я не в курсе.


john black   (2004-08-10 22:58:00) [4]

to Sapersky:
Пара вопросов (может быть тупых)
1.Как сделать так, чтобы не отсекались звезды?
2.Какие есть формулы для расчета нормалей (по 4-м вершинам)
3.как построить поверхность по карте высот НЕ полосками (пример есть такой. там y полосок длины x и это очень хорошо заметно)
Заранее спасибо

P.S. я стормозил, исходники закачал старые, а текстуры закачал все, потому как влом было смотреть какие нужны, а какие нет. Сорри за зря скачаные килобайты


Sapersky   (2004-08-10 01:40:00) [5]

Ну, посмотрел...
То, что называется - неплохо для начала.
Из всех объектов более-менее прилично смотрится Земля - и то непонятно, зачем ей текстура такого высокого разрешения. Непонятно, зачем эта же текстура натянута на "пол" космоса. Непонятно, зачем в комплекте имеется ещё куча всяких текстур, которые не используются.
Текстура небулы (или как оно называется) не очень хорошо стыкуется сама с собой (впрочем, заметно только при большой яркости). И вот ей-то как раз не хватает разрешения (точнее, чёткости).
Хорошо работает алгоритм удаления невидимых граней - в смысле, удаляет хорошо, так что из всех звёзд видно только 2-3 полигона, и те не постоянно (моргают).
Скорость - 30 FPS.

Можешь попинать мой "Homeworld" :) -

http://delphigfx.mastak.ru/samples6.htm

см. BTG Viewer.


Наверх

Титульная страница Поиск, карта сайта Написать письмо