Главная | Форум | Мой профиль | Выход | RSS
Меню сайта
Мини-чат
200
Наш опрос
Расширение спектра деятельности. Тоесть принимать и по возможности помогать не только Ultimate 3D
Всего ответов: 294
Кабинет

Логин:
Пароль:
Поиск
Календарь
«  Ноябрь 2017  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
27282930
Архив записей
Наши друзья
  • Официальный cайт U3D
  • Лучший сайт по GM
  • Сайт по геймдеву
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Мы рады приветствовать Вас на русскоязычном официальном сайте игрового движка Game Maker+Ultimate3D. Этот сайт создан для всех тех, кто хотел бы своими силами создать хотя бы одну компьютерную 3D игру, но не знает, как это сделать и с чего начать.Вы всегда хотели заняться разработкой компьютерных игр, но не знали как?Тогда вы попали по адресу. Game Maker с Ultimate3D это микс, который позволит делать захватывающие компьютерные игры с неограниченными возможностями. Так же есть форум на котором можно задовать свои вопросы по Ultimate 3D!

    Оптимизация работы

    Если Вы воздействуете на большой проект, чрезвычайно важно, что Вы заботитесь о хорошей работе. Это - широко распространенная вера, что графика, которая может быть сделана, зависит только от трехмерного двигателя, это используется. Конечно лучший двигатель может привести к лучшим результатам. Но чем более потенциальный двигатель имеет, тем более трудный он должен использовать все особенности, которые обязаны делать игру управляемой плавно. Сложность игры, которая может быть сделана с двигателем, зависит только от того, сколько возможностей предлагается, чтобы оптимизировать работу игры. Обычно самый легкий способ понять кое-что не является самым эффективным. Требуются некоторый опыт и знание, чтобы найти оптимальное решение. Вы также нуждаетесь в понимании как Окончательные трехмерные работы внутренне. Эта обучающая программа поможет Вам изучить эти вещи.


    Общие намеки
    Для продвинутых программистов следующие общие намеки должны быть весьма самоочевидными. Но так как чрезвычайно важно знать о них, они будут перечислены здесь снова. Одна из самых важных вещей, которые Вы должны знать, - то, что граф вершины и граф треугольника - чрезвычайно важные факторы для работы Вашей игры. Вычисление всех данных, которые требуются для вершины, занимает некоторое вычислительное время, таким образом Вы должны использовать как немного вершин насколько возможно, делая новую модель для Вашей игры. Если Вы работаете в профессиональной программе моделирования, такой как Блендер или трехмерная Студия Max, Вы можете использовать плагины, чтобы оптимизировать Ваши петли (в Блендере, это - Опустошать модификатор). У менее сложных программ моделирования по крайней мере будет особенность, которая позволяет Вам видеть, из какого количества вершин модель составлена в настоящее время. Это полезно для сокращения счета вершины вручную. Конечно, самый легкий способ получить модели с низким счетом вершины не состоит в том, чтобы потратить впустую вершины от начала моделирования. Будьте чрезвычайно осторожны с особенностями, которые подразделяют лица моделей, чтобы сделать их взглядом более гладкий. Кроме того, не используйте высокий счет подразделения, создавая примитивные объекты (переменные partsx, partsy и partsz).
    Следующий намек менее самоочевиден. Работа Вашей игры также зависит от того, сколько частей геометрии должно быть предоставлено отдельно. Если у Вас будет две части геометрии в Вашей модели, то Окончательный трехмерный только отдаст им вместе, если они будут использовать тот же самый материал и будут частью той же самой петли. Таким образом абсолютный худший случай был бы моделью, в которой у Вас есть сорок различных петель, каждый составленный из не больше, чем 20 треугольников, но все еще использования трех различных материалов. В этом случае Окончательный трехмерный не было бы в состоянии потянуть больше чем 10 треугольников одновременно. Так будьте экономичны с числом различных материалов и петель использования, которые составлены из большого количества геометрии, моделируя. Часто использование одного текстурированного материала более эффективно чем использование трех или четырех различных материалов, и обычно это даже выглядит лучше этот путь.
    Вы не должны использовать слишком большие структуры, так как они берут большую память. Больше памяти, которую Ваши структуры съедают ранее видео память о графическом устройстве, будет полно. Тогда память системы должна будет использоваться, и в этом случае структуру нужно передать от памяти системы до видео памяти в каждом шаге, который является очень интенсивным временем. Так, если у Вас есть много структур, загруженных одновременно, Вы должны выпустить столько, сколько возможный, звоня ReleaseTexture (Material.htm (...)). Кроме этого, Вы действительно должны использовать измерения, которые составлены из полномочий два для всех Ваших структур. Если Вы загрузите структуру размером 512*512, то это будет загружено точно этим размером, но если Вы загрузите структуру размером 513*513, то это будет расширено к следующим более высоким полномочиям два, которые являются 1024*1024. Весьма очевидно, что это - гигантская трата памяти и вычислительное время.
    Будьте экономичны с числом источников света в Вашей сцене. Если у Вас будет чрезвычайно высокое число источников света, то потребуется много вычислительного времени для каждой отдельной вершины. В этом случае может быть более эффективно узнать, как использовать Вычеркнутое или другое программное обеспечение моделирования, чтобы понять легкую картографию. Чтобы получить эффективную игру, Вы должны найти компромисс между гибкими и статическими решениями очень часто. Гибкость всегда требует большого количества вычислительного времени, но обычно является меньшим количеством работы и заставляет игру казаться более живой. Статические решения берут больше памяти, так как Вы имеете некоторые предварительно вычисленные данные, но займете намного меньше вычислительного времени и можете выглядеть намного лучше, так как не имеет значения, сколько времени потребовалось, чтобы предварительно вычислить статические данные. Сравнение между за вершину или за освещение пиксела и легкую картографию является большим примером этого. Повторение того, как дорогой теневой кастинг с точки зрения вычислительного времени, мы надеемся, не необходимо здесь.


    Обнаружение самого эффективного способа потянуть часть геометрии
    Окончательные трехмерные предложения несколько различных возможностей обращаться с частью геометрии, загруженной от образцового файла. Вы можете создать LoDs для этого, или Вы можете обращаться с этим как с примитивным объектом. Любая из этих возможностей могла быть лучшей, в зависимости от ситуации. Иногда может быть более эффективно потянуть модель с LoDs; иногда противоположность может иметь место. Есть также случаи, в которых намного более эффективно обращаться с геометрией как с примитивным объектом; в других случаях это не имеет никакого смысла вообще. Этот подраздел содержит немного информации о правильном использовании различных способов обращаться с моделями и дает информацию, на которой лучше в различных сценариях.
    Давайте начнем с правильного использования различных уровней деталей. Это - действительно практическая особенность, которая Окончательный трехмерный может сделать автоматически, и часто это может очень увеличить работу Вашей игры. Вообще, это должно использоваться для любой модели, которая должна выглядеть очень детальной, когда это близко к камере. Но поскольку я уже сказал, что Вы никогда не должны использовать это для моделей, которые используют мультипликацию структуры (или модели, загруженные от *.md2 файлов или созданное использование мультипликаций AddFrame (ManageModel.htm (...))). Также не имеет никакого смысла использовать LoDs, если Вы не можете стать достаточно далекими далеко от модели так или иначе. Например, если у Вас есть некоторая первая игра человека, в которой Вы всегда находитесь только в маленьких комнатах, использование LoDs было бы неэффективно. В этом случае есть намного лучший способ оптимизировать игру. Это будет введено ниже.

    Есть некоторые случаи, в которых это может привести к гигантскому усовершенствованию работы, когда Вы используете функцию CreatePrimitiveFromModel <ManageModel.htm> () и другие случаи, в которых это было бы чрезвычайно неэффективно. Вообще, примитивы прекрасны для всех видов простых, статических объектов, из которых составлен уровень. Например, если у Вас есть простые стенные модели, которые не нуждаются ни в каких эффектах выглядеть хорошими и составлены из меньше чем 100 вершин, это была бы прекрасная возможность использовать примитив. Примитивы также прекрасны для того, чтобы отдать растительность. Таким образом Вы действительно должны использовать это, если это возможно. Конечно немного трудно сделать сложную модель только с одной структурой, но результат стоит работу. Я рекомендую использовать *.an8 файлы для моделей, которые Вы хотите использовать с этой функцией, потому что для Окончательных трехмерный соединит все к одной петле автоматически.


    Выведение из строя альфа-смешивания
    В отличие от более ранних версий Окончательных трехмерных Окончательных трехмерных 2.0 бет 3 и более новый не имеет никаких проблем с частично прозрачными структурами. В более ранних версиях те ведут, чтобы показывать отказы очень часто. К сожалению цена за это весьма высока. Целый объект должен быть предоставлен дважды в случае, если он использует частично прозрачную структуру. Первый проход отдает только части с полным opacity, второй проход отдает только части с полной прозрачностью. Так как это может уменьшить работу настоятельно, Окончательный трехмерный позволяет Вам повреждать этот метод для специфических объектов. Тогда частично прозрачный материал станет полностью прозрачным, но он ускорит вещи много.

    Эта функция включает альфа-смешивание или прочь для данного образцового объекта или примитивного объекта. Неплатежом альфа-смешивание включено.

    SwitchAlphaBlending(
    EnableDisable
    )

    EnableDisable
    Если Вы пройдете верный для этого параметра, то частично прозрачные части будут предоставлены во втором проходе (дорогостоящая работа), иначе частично прозрачные части станут полностью невидимыми (эффективный).


    Измерение важных факторов работы
    Чтобы быть в состоянии сказать, оптимизировали ли Вы свой проект хорошо, Вы должны быть в состоянии измерить факторы, которые влияют на работу. Это - прежде всего два фактора. Первый - известный счет треугольника. Второй - число требований ничьей, которые были необходимы, чтобы отдать сцену. Всякий раз, когда Окончательные трехмерные проходы часть геометрии на графическое устройство, чтобы достигнуть этого, это предоставлено одним требованием ничьей, необходимы для этого. Например каждая группа примитивных объектов с идентичными свойствами требует одного требования ничьей за шаг за камеру, и каждый образцовый объект требует одного требования ничьей за шаг за материал за камеру. Эти две работы соответствующие размеры может быть восстановлена легко в Окончательном трехмерный.

    Эта функция возвращает число треугольников, которые были оттянуты в предыдущем шаге. Это включает треугольники, которые не становились предоставленными из-за отбора backface.

    GetDrawnTriangleCount()

    Эта функция возвращает число из требований ничьей, которые были необходимы, чтобы потянуть сцену в предыдущем шаге.

    GetDrawCallCount()

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


    Продвинутые функции отбора

    Понятие позади отбора весьма просто. Это означает, что Вы избегаете отдавать что-нибудь, что в настоящее время не видимо. По умолчанию Окончательное трехмерное использование два метода отбора; отбор невидимой поверхности и отбор frustum. Обратный отбор лица означает, что только передняя сторона каждого треугольника предоставляется. Этим путем только половина такого большого количества геометрии должна быть предоставлена. Отбирающий Frustum означает, что только объекты, которые находятся в видимой области, так называемое представление frustum, камеры предоставлены. Следующая графика иллюстрирует, каково представление усеченный конус:


     
    Вы можете также непосредственно получить доступ Ultimate 3D's
    усеченный конус отбор. Это полезно, если некоторый кодекс должен быть выполнен, только если специфический объект видим. Например, если у Вас есть монитор безопасности, который использует камеру со структурой, отдают цель, эта камера должна отдать только, если монитор безопасности может быть замечен. Узнать, является ли объект в представлении frustum Вами, может использовать следующую функцию.

    Эти возвращения функции, верные, если данная рамка редактирования находится в представлении frustum камеры или ложна, если это не.

    CheckBoundingBoxVisibility(
    BoundingBoxMinimumVectorID, BoundingBoxMaximumVectorID,
    BoundingBoxTransformationID,
    CameraIndex
    )

    BoundingBoxMinimumVectorID,
    BoundingBoxMaximumVectorID

    Удостоверение личности двух векторов, определяющих рамку редактирования. Рамка редактирования будет cuboid, где левое основание назад образовывает угол, имеет координационный BoundingBoxMinimumVectorID, и у правильного главного переднего угла есть координационный BoundingBoxMaximumVectorID. Если BoundingBoxMinimumVectorID будет отрицателен, то вектор (-1,-1,-1) будет использоваться, если BoundingBoxMaximumVectorID будет отрицателен, то вектор (1,1,1) будет использоваться.

    BoundingBoxTransformationID
    Удостоверение личности матрицы преобразования, которая будет использоваться, чтобы преобразовать рамку редактирования, определенную предыдущими двумя параметрами. Если этот параметр будет отрицателен, то никакое преобразование не будет использоваться.

    CameraIndex
    Индекс камеры, у которой есть представление frustum, который должен использоваться. Это - ценность переменного числа, не удостоверение личности объекта камеры.

    Так или иначе пришло время возвращаться к продвинутым функциям отбора. Если немного геометрии предоставлено, который не видим, который означает, что она была покрыта другим объектом. Чтобы избежать, чтобы геометрия была покрыта в этом случае, третья техника отбора требуется. И это только, для чего продвинутые функции отбора хороши. Они работают следующим образом. Во-первых, Вы назначаете каждый объект в целой сцене - является ли это примитивом, моделью, ландшафтом, системой частицы, или источником света - к комнате. Комната - только индекс и сумма объектов, назначаемых на это. По умолчанию каждый объект назначен на комнату с индексом 0. Затем Вы должны настроить, какая комната может быть замечена который камера. По умолчанию только комната с индексом 0 установлена в видимый для каждой камеры. Это может быть сделано или вручную или Окончательное трехмерный, может сделать это автоматически.

    Во внутренних уровнях это может быть особенно полезно. Всякий раз, когда игрок открывает дверь, новая комната установлена в видимый. Если игрок проходит дверь и закрывает ее, старая комната задержана к невидимому. Этим путем Вы можете сократить количество комнат, которые должны быть предоставлены к один или два. Все другие комнаты неинтересны. Источники света осветят только объекты, которые связаны с той же самой комнатой, которая приводит к увеличению работы также. Единственное исключение из этого правила - источники света, которые связаны с комнатой 0. Те осветят абсолютно все объекты.
    Функции, которые требуются для этой особенности, действительно просты. Есть только две функции, один, чтобы поручить объектам на комнаты, и один устанавливать комнату в видимый или в невидимый для специфической камеры.

    Эта функция назначает объект, которым это называют к комнате.

    SetObjectRoom(
    RoomIndex
    )

    RoomIndex
    Индекс комнаты Вы хотите назначить объект на. Это может быть произвольным целочисленным значением в диапазоне от 0 до 1999.


    Эта функция устанавливает данную комнату в невидимый или в видимый для камеры, которой это называют. Отметьте, что эта функция должна быть вызвана после MoveCamera().

    Performance optimization
    SetRoomVisibility(
    RoomIndex,
    NewVisibilityState
    )

    RoomIndex
    Индекс комнаты Вы хотите настроить государство видимости для. Это может быть произвольным целочисленным значением в диапазоне от 0 до 1999.

    NewVisibilityState

    Государство видимости Вы хотите настроить для данной комнаты. Это может быть или верно, чтобы заставить комнату в видимый или ложный устанавливать комнату в невидимый.

    Выше я сказал, что урегулирование комнат к видимому или невидимому может быть сделано или вручную или автоматически. Поскольку Вы можете видеть, что ручной путь очень прост, но он приведет к большой работе для Вас. И у Вас уже есть достаточная работа, назначая все объекты на комнаты. Таким образом автоматический путь должен быть предпочтен вообще. Это основано кое на чем названном дверями.

    Дверь может быть дверью, окном, воротами, улицей, каньоном или чем - нибудь еще, через что Вы можете пройти или наблюдать через. Это - кое-что, что может привести объект камеры или другой объект от комнаты в комнату, B. Portals представляется самой простой формой, кругом. Если камера пройдет через дверь, то она войдет в новую комнату, что означает, что эта комната будет видима. И все комнаты, которые лежат позади дверей, которые видимы, будут видимы также. Так как это определение весьма абстрактно, оно собирается быть разъясненным через несколько иллюстраций, показывая различные ситуации.
     


    Это - очень простой случай. Есть четыре различных комнаты, с четырьмя дверями между ними. У каждой двери есть (синяя) дверь, настроенная для этого. Первоначально камера находится в комнате 1, но тогда это перемещается через дверь от комнаты 1 в комнату 2, таким образом после того, как то, что это находится в комнате 2 и Окончательно трехмерный, в состоянии обнаружить это, так как у этого есть информация о двери. О том же самом случается для образцового объекта. Вначале это находится в комнате 1, таким образом это будет только видимо, если комната 1 будет видима. Тогда это переезжает в комнату 4, и Окончательный трехмерный обнаруживает что, из-за двери. Так после, что это только будет видимо, если комната 4 будет видима. Для образцовых объектов и другие объекты геометрии это - все, что это необходимо, но для камеры это немного слишком просто, потому что камера может возможно видеть больше комнат чем тот, в котором это в настоящее время находится. Когда камера находится в комнате 1, это может также видеть комнату 2 через дверь. Чтобы быть более точным, это может видеть комнату 2 всякий раз, когда это может видеть дверь от комнаты 1 к комнате 2. Таким образом комната 2 будет видима всякий раз, когда дверь в комнату 2 видима. Следующая графика иллюстрирует это.
     
    Слева, камера не смотрит ни на какую дверь, таким образом никакая комната за исключением того, в котором камера в настоящее время находится, не видима. В праве камера действительно смотрит на дверь от комнаты 1 к комнате 2, таким образом комната 2 также видима. Последний особый случай следует. Камера может не только видеть комнаты, которые находятся позади видимых дверей, которые ведут от текущей комнаты до другой комнаты, но также и комнат, которые находятся позади видимой двери, которая ведет от любой видимой комнаты до другой комнаты. Снова вот графика, чтобы иллюстрировать это.
     
    Поскольку Вы можете видеть, что комната 1, комната 2 и комната 3 видима. Комната 1 видима, потому что камера находится в этой комнате, комната 2 видима, потому что дверь от комнаты 1 к комнате 2 находится в видимой области камеры, и комната 3 видима, потому что дверь, которая граничит с видимой комнатой и приводит к комнате 3, находится в видимой области камеры. Something's, идущий не так, как надо здесь, тем не менее, потому что весьма легко видеть, что комната 3 не фактически видима. Это - немного ошибки, которая может легко произойти с портальным двигателем Окончательных трехмерный. Но есть способ избежать этой проблемы во многих случаях. Обычно двери закрываются позади характера, как только он прошел. Если это закрылось, Вы не можете видеть то, что находится позади этого больше, и этот эффект используется Окончательным трехмерный. В случае, если дверь установлена в закрытый, комнаты, которые лежат позади этой двери, не будут видимы, даже если сама дверь будет в видимой области камеры.

    От всех этих примеров Вы можете видеть полезность портального двигателя очень хорошо. В обычном уровне в большей игре в уровне может легко быть двадцать комнат. Предоставление всех их в каждой структуре было бы полным массовым убийством для центрального процессора и графического устройства. Используя портальный двигатель Вы можете сократить количество комнат, которые должны быть предоставлены одновременно только к одному одноместному номеру, который является весьма удивительной выгодой работы. Это становится еще лучше, потому что использование портального двигателя не занимает существенного вычислительного времени вообще. Единственное неудобство - то, что это - довольно большая работа, чтобы определить все двери и назначить все объекты (или по крайней мере большинство из них) к комнатам. Различные механизмы, которые, возможно, назначили объекты на комнаты автоматически, считали во время развития Окончательных трехмерными 2.0, но большинство из них, оказалось, было не достаточно просто или не достаточно надежно. И серьезно, сколько работы Вы тратите на свою игру? Замеченный относительно гигантской работы извлекают пользу, бит дополнительной работы является весьма незначащим.

    Хорошо, это было большим количеством теории, но если Вы поняли все это, функции будут почти самоочевидны Вам. Первая функция, о которой Вы должны знать, позволяет портальный двигатель для специфического объекта камеры.

    Эта функция позволяет портальный двигатель для объекта камеры, которым это называют.
    SwitchPortalEngine (
    EnableDisable)
    EnableDisable
    Должен ли портальный двигатель быть позволен (истинный) или повреждает (ложный).


    Как только портальному двигателю позволяют, любой звонок SetRoomVisibility (Performance.htm (...)) будет проигнорирован. Так или иначе есть хорошая замена для этого. Эта функция может использоваться, чтобы провести в жизнь видимость комнаты для камеры, которой это называют, даже если портальный двигатель позволен.
    SetRoomVisibilityEnforcement (
    RoomIndex,
    NewVisibilityEnforcementState)
    RoomIndex
    Индекс комнаты Вы хотите настроить государство осуществления видимости для. Это может быть произвольным целочисленным значением в диапазоне от 0 до 1999.
    NewVisibilityEnforcementState
    Осуществление видимости заявляет, что Вы хотите настроить для данной комнаты. Если это будет верно, то комната будет видима при всех обстоятельствах, иначе видимость зависит от дверей (или от SetRoomVisibility (Performance.htm (...)), если портальный двигатель - инвалид). Для комнаты 0 осуществлений видимости позволены по умолчанию, для всех других комнат, это - инвалид по умолчанию.
    Следующие четыре функции могут использоваться, чтобы создать, изменить, закрыть и разрушить двери. Как сказано выше, двери представлены кругами. Круг определен ориентацией (стоящий перед руководством), центр и радиус. Дополнительно, дверь держит два индекса комнаты.

    Эта функция создает дверь, используя данные данные и возвращает его идентификатор.
    CreatePortal (
    CenterX, CenterY, CenterZ,
    FacingDirectionLongitude, FacingDirectionLatitude,
    Радиус,
    RoomIndex1, RoomIndex2)
    CenterX/Y/Z
    Центр круга, который определяет дверь.
    FacingDirectionLongitude, FacingDirectionLatitude
    Руководство столкновения круга, который определяет дверь. Если Вы построите луч из этих двух углов, то круг будет ортогональным к этому лучу.
    Радиус
    Радиус круга, который определяет дверь.
    RoomIndex1, RoomIndex2
    Индексы комнат, которые являются в различных сторонах круга. Они не должны быть 0, потому что комната с индексом 0 всегда видима, когда портальный двигатель позволен и не должен быть замечен как фактическая комната. Заказ этих параметров не имеет значения. Если камера будет в комнате с RoomIndex1 и переместится через дверь, то это будет в комнате с RoomIndex2 после этого, и наоборот.


    Эта функция может использоваться, чтобы изменить дверь после создания этого.
    SetPortal (
    PortalID,
    FacingDirectionLongitude, FacingDirectionLatitude, Радиус, RoomIndex1, RoomIndex2)
    PortalID
    Идентификатор двери Вы хотите изменить. Это - возвращаемое значение звонка CreatePortal (Performance.htm (...)), который создал дверь.
    FacingDirectionLongitude, FacingDirectionLatitude, Радиус, RoomIndex1, RoomIndex2
    См. выше.


    Эта функция может использоваться, чтобы открыть дверь (это открыто по умолчанию), или закрыть это.
    OpenPortal (
    PortalID,
    OpenClose)
    PortalID
    Идентификатор двери Вы хотите изменить. Это - возвращаемое значение звонка CreatePortal (Performance.htm (...)), который создал дверь.
    OpenClose
    Пройдите истинный, чтобы открыть это портальное или ложный, чтобы закрыть это. Если дверь будет закрыта, то камера все еще будет в состоянии пройти через нее, чтобы добраться до другой комнаты, потому что двери не делают никакого обнаружения столкновения, но комнаты, которые могли быть замечены через дверь, не будут видимы больше.


    Эта функция разрушает дверь с данным идентификатором.
    DestroyPortal (
    PortalID)
    PortalID
    Идентификатор двери Вы хотите разрушить. Это - возвращаемое значение звонка CreatePortal (Performance.htm (...)), который создал дверь.
    Информация, которая не может быть найдена с помощью дверей, - в какой комнате камера находится первоначально. По этой причине Вы должны быть в состоянии настроить это вручную. Это может быть сделано через функцию SetObjectRoom (Performance.htm (...)) точно так же как для всех других объектов.
    Портальный двигатель не просто дает Вам увеличение работы, может также быть очень полезно закодировать gameplay-связанные вещи. Например Вы можете начать специфическую видео последовательность, если камера проходит через специфическую дверь впервые. Это может также быть полезно для того, чтобы АЙ запрограммировало. Если камера находится в той же самой комнате как враг, враг должен стать активным. Чтобы понять вещи как это, Вы должны быть в состоянии узнать, в какой комнате объект в настоящее время находится. Эта информация может быть восстановлена через следующую функцию.

    Эта функция восстанавливает индекс комнаты, в которой объект, называющий это, в настоящее время находится.
    GetObjectRoom ()
    Кроме этого Вы можете избежать большого количества ненужных вычислений, выполняя их только для объектов, которые находятся в видимой комнате. Например системы частицы не должны быть обновлены, если они не могут быть замечены камерой, и объекты не должны проверять на столкновения с объектами в других комнатах. Чтобы узнать, может ли комната быть замечена специфической камерой, Вы можете использовать следующую функцию.

    Эта функция возвращается, может ли комната с данным индексом быть замечена камерой, которой это называют.
    GetRoomVisibility (
    RoomIndex)
    RoomIndex
    Индекс комнаты, которой Вы хотите восстановить государство видимости.
    Много преимуществ использования продвинутых функций отбора было уже упомянуто. Они увеличивают работу настоятельно, они могут использоваться, чтобы избежать ненужного выполнения кодекса, они делают обнаружение столкновения более эффективным, они могут быть полезными для АЙ, и они дают Вам возможность управлять, какие эффекты источника света, которые возражают. Здесь прибывает другое преимущество. Использование продвинутых функций отбора также дает Вам возможность иметь различное окружающее освещение для различных объектов. SetAmbient (Environment.htm (...)) определяет специфический окружающий цвет освещения для всех комнат. Вы можете изменить этот цвет для одноместных номеров, используя следующую функцию.

    Эта функция изменяет окружающий цвет освещения для данной комнаты.
    SetRoomAmbient (
    RoomIndex,
    AmbientColorR, AmbientColorG, AmbientColorB)
    RoomIndex
    Индекс комнаты, для которой Вы хотите определить новый окружающий цвет освещения.
    AmbientColorR, AmbientColorG, AmbientColorB
    Окружающий цвет освещения, который должен быть настроен для этой комнаты. За дополнительной информацией об окружающем освещении ссылаются на описание SetAmbient (Environment.htm (...)).
    Отметьте, что каждый звонок SetAmbient (Environment.htm (...)) перепишет изменения, произведенные этой функцией.








    © Shkola Ultimate 3D . Все права защищены.Макарский Роман (ASD_W_GAMES) And Беляков Вячеслав (ZXC76)
    Author:
    © Christoph Peters. Some rights reserved.


    Школа Ultimate3D 2009-2010 год