ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» К вопросу о гранях, рёбрах, и вершинах вселенной :-) | страница 1 |
|
|
|
Канал Игры Мечты: «К вопросу о гранях, рёбрах, и вершинах вселенной :-)» |
|
Надо ли пытаться что-нибудь слепить, когда знаешь , что всё равно ничего не выйдет? |
Да, надо для общего развития |
|
81% |
[ 27 ] |
Нет, не надо, а то ничсего не выйдет - и с горя повесишься |
|
18% |
[ 6 ] |
|
Всего проголосовало : 33 |
|
|
|
LK
176 EGP
  Репутация: 37 Сообщения: 540 Откуда: РАПС (ЭТУ) Зарегистрирован: 04.08.2003
 |
|
Вот надысь думал, отчего в ХТ и всём прочем новом, есть какая-то несуразица между ближними объектами и всякой дымчатой ерундой вдали, почему космос из секторов и пр... А потом стал читать умную книжку пРо Опен-ГЛ (DX не стал пока) - так там сказано, что тот объём, куда рисовать можно, вроде, ограничен плоскостями!
Это что, зщначит, я не могу бесконечную вселенную нарисовать, чтоб, типа если долго летишь, то всегда куда-то прилетешь, а не упрёшься в текстуру, что на стенку натянута, и не вылетишь в винду с глюком? Или ето как-то объехать можно? Типа, ооочень далёкие вещи сделать наподобие пятнышек на плоскости, которую ставим перпендикулярно камере, а по мере приближения к ним, изготовлять для них, так сказать, объёмное представление, или у кого другие идеи есть или кто сам делал.? Подскажите, ПЛЗ старому ламозавру.
|
|
|
Biburath
|
|
Ну ,ваще, мы просто далекий объект рисуем близко, но очччень ма-а-а-аленьким : glScalef(a,a,a), где a<<1, a=k*r+b, r-расстояние до объекта, k и b - какие-то постоянные числа, выражаются через угол поля зрения, пока не придумал как... Даже так: Объект рисуется ВСЕГДА на одном расстоянии от камеры, но уменьшенным или увеличенным, в зависимости от "реального" расстояния до наблюдателя.
На самом деле я сейчас по ночам занимаюсь именно этим. Типа, джоин аз, хе-хе...
|
|
|
Biburath
|
|
Сие применимо только для "придурков в космосе" т.е. реки, степи, горы и поля так не нарисуешь.
|
|
|
Biburath
|
|
Имхо DX - дерьмицо...
|
|
|
Dark Archon
231 EGP
   Репутация: 56 Сообщения: 389 Откуда: Moscow Federation Зарегистрирован: 27.05.2004
 |
|
А зачем лишние сложности? Это же куча дополнительных вычислений: масштабирование размеров, скоростей движения объектов и т.п., что, естественно, сказывается на быстродействии. Да и просто не удобно разрабатывать в такой анормальной координатной системе.
_________________ o
_/0\_
< > КУ! |
|
|
Dark Archon
231 EGP
   Репутация: 56 Сообщения: 389 Откуда: Moscow Federation Зарегистрирован: 27.05.2004
 |
|
Кстати, на счет DirectX: есть некая фирма, называется Тильтан (http://www.tiltangeomatics.com/), которая занимается разработкой графических движков для авиационных, танковых и т.п. симуляторов на платформе PC. Так вот свои движки они делают на DirectX и поверь мне неспроста
_________________ o
_/0\_
< > КУ! |
|
|
Biburath
|
|
Dark Archon : |
А зачем лишние сложности? Это же куча дополнительных вычислений: масштабирование размеров, скоростей движения объектов и т.п., что, естественно, сказывается на быстродействии. Да и просто не удобно разрабатывать в такой анормальной координатной системе.
|
Предложи как по-другому поместить солнечную систему в кубик 100x100 метров , и я буду тебе очень благодарен как программист.
По поводу DX - я же сказал, "ИМХО".
Я не говорю, что его нельзя использовать в серьёзных делах. Я говорю, что у него сложный, "мутный" API, и что он есть только под MracoHard.
Я ничего не имею против огромной могучей толпы программистов для Windows. Но сам к этой группе не отношусь, посему предпочитаю использовать открытые и строго документированные решения.
Позвольте напомнить вам о фирме "Id Software", все разработки которой используют OpenGL.
Если я кого-то обидел, то прошу меня извинить.
|
|
|
Biburath
|
|
координатная система остаётся Декартовой, все "масштабирования" линейны, множитель всего один, зависит тоже линейно и только от расстояния от обЪекта до наблюдателя, которое по-любому придётся считать при каждой итерации игрового цикла.Даже выбирать, что множить, а что нет, не надо. Надо всё. Операция умножения выполняется за 1 такт. 1 треугольник рисовать НАМНОГО дольше.
|
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
Biburath : |
Предложи как по-другому поместить солнечную систему в кубик 100x100 метров , и я буду тебе очень благодарен как программист.
По поводу DX - я же сказал, "ИМХО".
Я не говорю, что его нельзя использовать в серьёзных делах. Я говорю, что у него сложный, "мутный" API, и что он есть только под MracoHard.
|
Интересно...
Как же Мартин тогда умудрился орбитер написать? Он у него под DX написан. И СС там полностью. И объекты побольше 100м размерами есть.
Если DX такой мутный, то в чём? Почему не в мутном OGL приходится так извращяться?
_________________ У меня бисера не доxеpа. |
|
|
Dark Archon
231 EGP
   Репутация: 56 Сообщения: 389 Откуда: Moscow Federation Зарегистрирован: 27.05.2004
 |
|
Biburath : |
координатная система остаётся Декартовой, все "масштабирования" линейны, множитель всего один, зависит тоже линейно и только от расстояния от обЪекта до наблюдателя, которое по-любому придётся считать при каждой итерации игрового цикла.Даже выбирать, что множить, а что нет, не надо. Надо всё. Операция умножения выполняется за 1 такт. 1 треугольник рисовать НАМНОГО дольше.
|
Ну да, но это все равно влияет на производительность, т.к. приходится масштабировать все обекты, т.е. если есть 100 обьектов - добавляются 100 перемножений матрицы (glScalef), я уж не говорю о масштабировании скоростей и чего там еще. И не забывай, что перемножаются МАТРИЦЫ, т.е. одним тактом тут не обойтись. А если учесть, что лишний вызов функции это лишнее дерганье стека, а чтобы зделать каждое перемножение нужно еще притащить операнды из памяти... Вообшем, не стоит говорить про один такт.
Кроме выше изложенного, ты теряешь возможность корректно использовать например еффект тумана, могут быть проблемы с моделью освещения, необходимо использовать автоматическую нормализацию, что в свою очередь тоже добавляет вычислений, т.к. каждая нормаль приводится к еденичной области, а если этого не сделать - будет не корректно высчитыватся освешенность объекта и т.д. и т.п. Хотя точно могу сказать, что подобные искажения координатной системы используются для некоторых нужд.
Biburath : |
Предложи как по-другому поместить солнечную систему в кубик 100x100 метров , и я буду тебе очень благодарен как программист.
|
А откуда такое ограничение: 100х100 ??? Я не помню, чтобы меня когда либо ограничевало пространство координатной системы. Используешь float для координат, определяешь пространство как кубик 1.0f х 1.0f х 1.0f, а метру будет соответствовать, скажем, 0.000001 - вот и получилось пространство с ребром в 100000 метров. И поверь мне - все поместится. Придется правда пересчитывать эти координаты для метрического отображения на индикаторах кабины/интерфейсе, но это мелочи.
_________________ o
_/0\_
< > КУ! |
|
|
NetImperia
200 EGP
  Репутация: 15 Сообщения: 539 Откуда: Санкт-Петербург Зарегистрирован: 23.08.2002
 |
|
Да что вы вечно войны устраиваете DX vs OGL.
И на том и на том можно что угодно написать.
Лично я и то, и то пробовал. Просто когда начинаешь проект нужно определиться. Что более важно. Либо что-бы работало под кучей систем.(PC,PlayStation итд) но при этом потратить намного больше времени на программирование. Так как OGL не имеет столько функций как DirectX. И их придется самому писать либо искать библиотеки для этого.
Либо использовать DirectX. В котором значительно меньше писать нужно. Да и многие вещи он сам делает. Но работает только на платформах с Windows таких как PC и XBox + пара карманных компов.
Что у OGL что в DX скорость примерно одинаковая.
Ну естественно кому-то больше нравится OpenGL кому-то DirectX.
Это уже личные предпочтения.
Можно конечно написать что-бы работало и на том и на том. Но это лишняя трата времени.
По проводу показа объектов. Что-то вас совсем глючит. Что в OGL что в DX практически одинаковая матрица.
И по поводу 100x100 метров - Метры это не реальные координаты в которых вычисляются кординаты и размеры объектов в игре.
Все координаты гораничиваются размером переменной INT.
Тоесть координаты XYZ в пространстве. Каждая координата имеет числовой FLOAT формат это значение от 0 до 1500000000 если не ошибаюсь. Есть еще FLOAT64 - это 64 битный FLOAT но на простых не 64 битных процессорах оно медленно работает но значительно больше. Соответственно в этих кординатах происходят все манипуляции.
Одной еденице можно и метр присвоить и километр. Вопрос как этими координатами пользоваться.
Как кто-то выше вообще удивлялся что почемуб не создать всю вселенную в сразу. А вы подумайте 1) Сколько это будет памяти есть. (если вы не заметили во всех играх объекты дальше чем N просто не показываются и удаляются) 2) Сколько времени вся эта вселенная будет у пользователя генериться. Ведь генерится каждый кадр в игре.
Просто видимо далеко не все понимают как строится изображение.
Для тех кто не в курсе...
Большинство думают что изображение строится только 1 раз до тех пор пока в нем что-то не нужно будет поменять.
А это не верно. Все объекты пересоздаются каждый кадр и компьютер каждый раз просчитывает их и пытается вывести.
Тоесть если вы видите куб то это не значит что компьютер его 1 раз вывел. Он его заново прорисовывает каждый кадр. Уж так все устроено. Поэтому все игры и сжирвют 100% ресурсов процессора.
Вот
_________________ Космос.Таинственный космос. Почему же он нас так тянет к себе. |
|
|
Dark Archon
231 EGP
   Репутация: 56 Сообщения: 389 Откуда: Moscow Federation Зарегистрирован: 27.05.2004
 |
|
2NetImperia:
Вот молодец, написал все что мне лень было
Правда, DX vs OGL никто не собирался устраивать. Я лишь заступился за DX, который не поправу назвали "дерьмицом", хотя сам его (DX) не знаю и пишу на OpenGL под Solaris(Sun)/IRIX(Silicon Graphics) и на mesa3d под DOS.
Хочу также добавить, что матрицы действительно одинаковые, 4х4, и обусловлено это математикой при помощи которой строится 3D пространство, а не конкретной библиотекой которая это делает. Когда-то на курсе компьютерной графики мне всю эту математику приходилось писать вручную, после чего OpenGL, где все это уже реализованно, конечно показался сказкой
Что касается координат в формате int и int64: целые числе плохое решение для 3D графики, т.к. выполняется моножество действий, в результате которых получается дробный результат, который соответственно округляется и приводит к неточностям и искажениям, которые, в зависимости от построения алгоритма, могут накапливатся с каждым кадром. Вместо этого используется float и double - т.е. заведомо дробные переменные, у которых такой проблемы нет.
И последние: изображение, в большинстве случаев, действительно строится по новой каждый кадр, но в некоторых случаях это не так. Например в аркадных играх, для увеличения производительности, я делил сцену на статические и динамические обьекты, статические прорисовывал один раз, закидывал все в буффер аккумулятора и потом каждый кадр выкидывал их готовенькими на экран, тогда как только динамические объекты проходили полную прорисовку по новой. Результат - значительный speed up.
_________________ o
_/0\_
< > КУ! |
|
|
NetImperia
200 EGP
  Репутация: 15 Сообщения: 539 Откуда: Санкт-Петербург Зарегистрирован: 23.08.2002
 |
|
Dark Archon : |
Что касается координат в формате int и int64: целые числе плохое решение для 3D графики, т.к. выполняется моножество действий, в результате которых получается дробный результат, который соответственно округляется и приводит к неточностям и искажениям, которые, в зависимости от построения алгоритма, могут накапливатся с каждым кадром. Вместо этого используется float и double - т.е. заведомо дробные переменные, у которых такой проблемы нет.
|
Я имел ввиду Float. Просто не то написал Очепятался мысленно маленько.
Dark Archon : |
И последние: изображение, в большинстве случаев, действительно строится по новой каждый кадр, но в некоторых случаях это не так. Например в аркадных играх, для увеличения производительности, я делил сцену на статические и динамические обьекты, статические прорисовывал один раз, закидывал все в буффер аккумулятора и потом каждый кадр выкидывал их готовенькими на экран, тогда как только динамические объекты проходили полную прорисовку по новой. Результат - значительный speed up.
|
Это редкий случай. А вообще практически везде все по новой строится.
_________________ Космос.Таинственный космос. Почему же он нас так тянет к себе. |
|
|
Dark Archon
231 EGP
   Репутация: 56 Сообщения: 389 Откуда: Moscow Federation Зарегистрирован: 27.05.2004
 |
|
Ok, это конечно интересные дебаты мы тут развели, но немного отвлеклись от темы вопроса, а спрашивалось о бесконечности космоса vs конечности 3D пространства. И так по теме:
Я склонен утверждать, что бесконечность космоса смоделировать на компьютере невозможно, по причине ограничености носителей информации. Можно ее (бесконечность) только имитировать большими, но все же ограничеными пространствами. Допустим мы как раз пытаемся сделать сию имитацию. Все объекты, имеющиеся в нашей "конечной-бесконечной" Вселенной, прорисовывать и вообще загружать нет смысла, так как все равно видно только те, что находятся на расстоянии видимости. Обозначим это расстояние L. Значит нам нужно загружать и рисовать лишь те объекты, что находятся не далее чем L от корабля. На немного большем расстоянии, скажем L+a, нужно вывесить текстуру звездного пейзажа. Делаем это при помощи сферы радиусом L+a с центром в точке наблюдения. Тоесть, мы имеем графическую координатную систему - куб, в центре которого находится наш космический корабль и вписаная сфера с текстурой звезд, туманностей и т.п. фигни, эта сфера определяет также видимую область космического пространства и все видимые объекты находятся внутри нее. Этот куб графического (прорисовываемого) пространства, движется вместе с кораблем относительно гораздо большего логического координатного пространства, в котором прописано расположение всех объектов нашей "конечной-бесконечной". По мере движения, как только некий объект входит в видемую область - его подгружают и начинают рисовать. Соответственно когда объект выходит из этой области - его более не рисуют и убирают из памяти. Такой метод может позволить не делить космос на сектора, а врата оставить как опцию быстрого передвижения. Логическое координатное пространство может быть очень большим, но все же не бесконечным, по той простой причине, что координаты объектов представлены переменными, будь то float или double, имеющими строго определенные области значений:
максимальное значение для float = 3.402823466e+38F
максимальное значение для double = 1.7976931348623158e+308
Для решения этого ограничения можно логическое координатное пространство сделать динамичным, т.е. оно будет двигатся вместе с кораблем и графическим пространством если надо - до бесконечности, а объекты в нем будут генерироватся или убиратся по мере продвижения и тоже до бесконечности. Это была бы почти идеальная имитация бесконечности, еслибы не одно "но": если после долгого полета вернутся назад - там все будет по-другому, так как сгенерируется по-новой. Сохранять информацию об изученых участках Вселенной нельзя, так как подразумевается что она бесконечна, а носители информации, как уже говорилось - нет.
Можно конечно почесать затылок и придумать еше какой-нибудь трюк, но на 100% решить это все равно не удастся, а главное - нужно ли? Можно смоделировать хоть и ограниченое, но большое, даже огромное пространство, которое игрок просто опухнет изучать. А нафига ему (игроку) еще и бесконечность? В конце концов, жизнь игрока тоже явление не бесконечное, так нужно ли придумывать ему бесконечное развлечение?
_________________ o
_/0\_
< > КУ! |
|
|
NetImperia
200 EGP
  Репутация: 15 Сообщения: 539 Откуда: Санкт-Петербург Зарегистрирован: 23.08.2002
 |
|
Dark Archon
Ты полностью прав что все ограничивается только в том что места не хватит на Винчестере и памяти. А если создавать и уничтожать все объекты будут пропадать при возвращении.
_________________ Космос.Таинственный космос. Почему же он нас так тянет к себе. |
|
|
Dark Archon
231 EGP
   Репутация: 56 Сообщения: 389 Откуда: Moscow Federation Зарегистрирован: 27.05.2004
 |
|
2NetImperia: Спасибо за поддержку
Все, что выше мною написанно - сильно утрированно и при реализации все гораздо сложнее, но вполне реально. Надеюсь, что LK почерпнет из этого полезную для его заморочки инфу
_________________ o
_/0\_
< > КУ! |
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
>Dark Archon
"Вселенной, прорисовывать и вообще загружать нет смысла, так как все равно видно только те, что находятся на расстоянии видимости. Обозначим это расстояние L. Значит нам нужно загружать и рисовать лишь те объекты, что находятся не далее чем L от корабля. На немного большем расстоянии, скажем L+a, нужно вывесить текстуру звездного пейзажа."
Т.е. что корабль в 10м, что планета в 12000000м размерами, выпрыгивают на экран, на дистанции L?
С кораблём ладно, а вот двенадцатимегаметровая сфера проявляющаяся из подпространства (т.е. из-за сферы с текстурой звёздного неба), это феерическое зрелище...
_________________ У меня бисера не доxеpа. |
|
|
NetImperia
200 EGP
  Репутация: 15 Сообщения: 539 Откуда: Санкт-Петербург Зарегистрирован: 23.08.2002
 |
|
Shirson : |
>
Т.е. что корабль в 10м, что планета в 12000000м размерами, выпрыгивают на экран, на дистанции L?
С кораблём ладно, а вот двенадцатимегаметровая сфера проявляющаяся из подпространства (т.е. из-за сферы с текстурой звёздного неба), это феерическое зрелище...
|
Не совсем. Чем ты дальше от объекта тем меньше ты его просто рисуешь. Некоторые объекты в играх такие как планеты обязательы к прорисовке если ты не настолько далеко от нее что ее не видно уже. А вот все остальные объекты дальше чем N не рисуются.
_________________ Космос.Таинственный космос. Почему же он нас так тянет к себе. |
|
|
VMS
108 EGP
 Репутация: 2 Сообщения: 615 Откуда: г.Медногорск Оренбургской обл. Зарегистрирован: 03.06.2002
 |
|
2 Dark Archon
Цитата: |
объекты в нем будут генерироватся или убиратся по мере продвижения и тоже до бесконечности. Это была бы почти идеальная имитация бесконечности, еслибы не одно "но": если после долгого полета вернутся назад - там все будет по-другому...
|
В FFE, звездные системы, за редким искдючением, генерируются, и после возвращения находятся там-же где ты их оставил.
|
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
NetImperia : |
Не совсем. Чем ты дальше от объекта тем меньше ты его просто рисуешь. Некоторые объекты в играх такие как планеты обязательы к прорисовке если ты не настолько далеко от нее что ее не видно уже. А вот все остальные объекты дальше чем N не рисуются.
|
В указанной концепции это неосуществимо.
Все объекты, находящиеся дальше L+a не видны, независимо от размеров.
_________________ У меня бисера не доxеpа. |
|
|
|
|
|
Канал Игры Мечты: «К вопросу о гранях, рёбрах, и вершинах вселенной :-)» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Пока летишь от станции до станции - почистишь картошку, закупился - полетел дальше - сварил суп. Почти полный перенос космической жизни в реал... (Blinder)
|
» К вопросу о гранях, рёбрах, и вершинах вселенной :-) | страница 1 |
|