forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   Вопросы по XNA. (http://forum.boolean.name/showthread.php?t=16854)

Nikich 03.06.2012 23:21

Ответ: Вопросы по XNA.
 
Э-э-э. Что за чушь?! Поменял
Код:

sprites.Begin(SpriteSortMode.Immediate, BlendState.Opaque)
; на
Код:

sprites.Begin();
и фпс стало 400. Раньше было 100. В максе 153.
Ой, что-то я совсем запутался.
UPD:
SpriteSortMode.Immediate - ВРАГ. SpriteSortMode.Deferred - ДРУГ.
Теперь всё стало на свои места.



------------

radiobutton 04.06.2012 00:01

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nikich (Сообщение 229374)
Э-э-э. Что за чушь?! Поменял

Цитата:

Deferred: спрайты не отображаются до вызова SpriteBatch.End. Затем все вызовы направляются на графическое устройство в том порядке, в каком они были сделаны. В этом режиме многочисленные объекты SpriteBatch могут проводить вызовы Draw без конфликтов друг с другом. (Это режим по умолчанию.)
Immediate: метод Begin сразу же после вызова устанавливает настройки для графического устройства, а новые вызовы Draw сразу же выводят спрайты на экран. Но только один объект SpriteBatch может быть активен в данное время. Это самый быстрый режим
Правда тут опечатка скорее всего. ) самый медленный. у меня он тоже в 2-3 раза меньше фпс выдает.

pax 04.06.2012 00:13

Ответ: Вопросы по XNA.
 
Тут имеется ввиду то, что в режиме Immediate спрайты выводятся сразу, а не при вызове метода End. Смысл в том, что в этом режиме будет столько вызовов рисования, сколько вызовов Draw. А в других режимах вывод графики будет отсортирован и выведен за меньшее число DIP'ов. В приведенном случае может быть всего один DIP, т.е. текстура всего одна. Но есть один минус сортировок не в "ручную" - вывод графики может быть не в том порядке, в котором был вызов Draw. Например если на экране рисовались две картинки чередуясь, то при сортировке могут сначала вывестись все вызовы первой картинки, потом все вызовы второй, что будет не правильно, если надо было вывести картинки чередуясь. Поэтому выбирать тот или иной режим надо от ситуации. Чаще лучше разделить вывод графики на экран на слои, чтобы добиться высокой производительности. Так же снизить число DIP'ов можно используя атласы, когда рисуются части одной и той же текстуры, но текстура например всего одна.

radiobutton 04.06.2012 16:04

Ответ: Вопросы по XNA.
 
Цитата:

Данный процесс называется отсечение по пирамиде видимости, так как в данном случае мы проверяем, пересекается ли ограничивающая сфера объекта с пирамидой видимости, и если сфера не пересекается, то мы отсекает объект (то есть не отрисовываем его на экране). Стоит заметить, что этот метод не всегда является действенным - например, если мы отрисовываем множество мелких объектов, то на подобное отсечение мы можем и не тратить время, так как видеокарта итак не будет обрабатывать пиксели, которые находятся вне экрана.
Теперь собственно вопрос.
Вот скажем посылаем мы на видео карту объект какой нить. (Пускай будит Куб)
И этот куб не входит в зону видимости камеры. (ну за экраном он.)
Вершины этого объекта пройдут вершинный шейдер. И пиксельный?
На какой стадии определится что не нужно его будит рисовать?

Для мелких объектов не нужно делать проверку потому что эта проверка займет больше времени чем передача вершин этого объекта видеокарте и дальнейший проход по шейдерам?
Или же он пройдет вершинный шейдер, увидит что координаты получаются скажем 1025 500 (и остальные вершины куба тоже за экраном), поймет что Весь куб за экраном и не пошлет ничего в пиксельный шейдер?

Nikich 05.06.2012 17:18

Ответ: Вопросы по XNA.
 
У меня вопрос возник. Кто-нибудь качал исходной код, прилагающийся к книге 3D Graphics with XNA Game Studio 4.0? У меня большая часть не работает, с ошибкой : "Cannot find importer "FbxImporter". Не знаете, с чем это может быть связано?

Dream 05.06.2012 20:15

Ответ: Вопросы по XNA.
 
не хватает проекта "FbxImporter" или он не подключен к проекту

Nikich 05.06.2012 20:48

Ответ: Вопросы по XNA.
 
Такого проекта нету и не должно быть. В обучение ничего про него не говорится.

Dream 05.06.2012 20:55

Ответ: Вопросы по XNA.
 
точно, он должен идти уже с XNA. посмотри версии какие используются в референсах проектов, возможно у тебя другая версия установлена. поудаляй референсы на пеплайны и подобавляй по новой

Nikich 06.06.2012 13:57

Ответ: Вопросы по XNA.
 
Спасибо!
После прочтения этой книги, стало ясно, что она направлена на шейдеры и графон, а не на основы создания 3Д игр. В связи с этим, возникло много вопросов. И вот первый из них: как сделать коллизии?

Dream 06.06.2012 14:14

Ответ: Вопросы по XNA.
 
ну, примитивные колизии - есть классы BoundingBox и BoundingSphere у них есть методы для получения пересечений и всё такое. если чтото сложнее - то всё также как и в любом другом движке - писать своё или использовать уже готовые физ движки

Nikich 06.06.2012 14:43

Ответ: Вопросы по XNA.
 
Спасибо.
А вот например, если у меня есть модель комнаты с дверным проемом, то как сделать так, чтобы я мог попасть в эту комнату? Ведь если создать только один BoundingBox, то внутрь я пройти не смогу. Надо создавать по отдельному BoundingBox на каждую стену?
И еще кое-что. Как делают физику для ступенек? То есть чтобы объект мог подниматься и опускаться по ступенькам.

Dream 06.06.2012 20:06

Ответ: Вопросы по XNA.
 
Цитата:

Сообщение от Nikich (Сообщение 229611)
Спасибо.
А вот например, если у меня есть модель комнаты с дверным проемом, то как сделать так, чтобы я мог попасть в эту комнату? Ведь если создать только один BoundingBox, то внутрь я пройти не смогу. Надо создавать по отдельному BoundingBox на каждую стену?

если использоваться только те примитивы - то да, подругому ни как.
Цитата:

Сообщение от Nikich (Сообщение 229611)
И еще кое-что. Как делают физику для ступенек? То есть чтобы объект мог подниматься и опускаться по ступенькам.

- Если написать такуие примитивные колизии как у блица(там действительно всё очень примитивно) то будет и на небольшие ступеньки вылазить будет и в стены колизится.
Опятьже, повторяюсь - Bounding обьекты XNA не препятствуют ничем(да и как они могут то?) они просто дадут знать есть ли колизии с другими обьектами. не больше не меньше

Nikich 06.06.2012 22:20

Ответ: Вопросы по XNA.
 
Ясно.
Ступени, как я понял, дело вообще проблематичное. Это ведь придётся на каждую ступеньку BoundingBoх свой делать.
Очень интересно, как это в блитце сделали коллизии с объектами произвольной формы, ведь там любую модель загрузить можно, и коллизии правильно работать будут.

pax 07.06.2012 14:44

Ответ: Вопросы по XNA.
 
К XNA подключаются некоторые физические движки без особых проблем. Можно использовать их для определения коллизий.
Вот например http://bepuphysics.codeplex.com/

RegIon 08.06.2012 14:38

Ответ: Вопросы по XNA.
 
Баг:
Каждый ран приложения на XNA вызывает ошибку, библиотека MS C++ 2008 стоит,.NET 4 тоже:
Код:

APPCRASH
  Имя приложения:    WindowsGame1.exe
  Версия приложения:    1.0.0.0
  Отметка времени приложения:    4fc8e4c9
  Имя модуля с ошибкой:    KERNELBASE.dll
  Версия модуля с ошибкой:    6.1.7600.16385
  Отметка времени модуля с ошибкой:    4a5bdaae
  Код исключения:    e0434352
  Смещение исключения:    00009617
  Версия ОС:    6.1.7600.2.0.0.256.1
  Код языка:    1049
  Дополнительные сведения 1:    0a9e
  Дополнительные сведения 2:    0a9e372d3b4ad19135b953a78882e789
  Дополнительные сведения 3:    0a9e
  Дополнительные сведения 4:    0a9e372d3b4ad19135b953a78882e789

Почему?


Часовой пояс GMT +4, время: 12:52.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot