Вопросы по XNA.
Вопросов скапливается немерено, поэтому решил отписываться здесь. Просьба не кидаться помидорами, ведь я только учусь.
Как изменить x и y в Vector2? То есть у меня есть: Код:
Vector2 player_position=new Vector2(100,100) Кстати, почему это называется вектором? Ведь тут нету направления, а значит это скаляр. UPD: Всё, разобрался. Код:
if (Keyboard.GetState().IsKeyDown(Keys.W)) И ещё. Как следует работать со временем? Есть ли аналог MilliSecs()? |
Ответ: Вопросы по XNA.
Цитата:
PHP код:
Цитата:
|
Ответ: Вопросы по XNA.
Спасибо. Только что значит var? В паскале так начинался блок с переменными, но вряд ли это как-то связано с паскалем.
|
Ответ: Вопросы по XNA.
|
Ответ: Вопросы по XNA.
Вектор обычно выражается в двух числах, и чаще всего подразумевает что первая точка находиться в 0,0.
Есть нормализованный вектор, когда длина между 0,0 и указанными x,y равна 1.0, в данном случае это не нормализованный вектор, и по сути из этих двух чисел ты можешь получить длину вектора и его направление. Используй официальную документацию, она может быть очень полезной и само-достаточной. http://msdn.microsoft.com/en-us/libr...2_members.aspx Чтобы получить X или Y, просто пиши: Код:
player_position.X; Код:
Vector2 playerPosition = new Vector2(100, 100) |
Ответ: Вопросы по XNA.
А какой из этих вариантов читабельнее?
Код:
PlayerPosition(playerPosition, playerPosition + enemyPosition, playerPosition * enemyPosition - lolPosition) Код:
PlayerPosition(player_position, player_position + enemy_position, player_position * enemy_position - lol_position) |
Ответ: Вопросы по XNA.
Спасибо. А нет ли у кого примеров по XNA? Просто я не знаю, на что он вообще способен:) В принципе и функционал в БлитцМаксе нормальный был, но мне не кажется что это действительно максимум в 2D. Кстати, может ли кто-нибудь назвать то, чего нельзя сделать на чистом(!) Максе, но можно на XNA?
|
Ответ: Вопросы по XNA.
XNA это графическое АПИ (альтернатива DirectX). Можно все, на что способна видеокарта - шейдеры и т.п. И это не только 2d.
|
Ответ: Вопросы по XNA.
в инете куча туториалов с XNA. а на ютубе много роликов в которых показывают его возможности
|
Ответ: Вопросы по XNA.
http://create.msdn.com/en-US/educati...etting_started
Пока что лучшее из того, что видел. Всё очень понятно, а главное показывают не только функционал XNA, а также и с самим шарпом знакомят. |
Ответ: Вопросы по XNA.
Гм.
Решил провести тест на производительность. Выяснилось, что Макс быстрее XNA. Это я быдло-кодер на C#(хотя конечно я быдло-кодер, но до такой ли степени?), или это действительно так? |
Ответ: Вопросы по XNA.
Тест в студию.
Сравнивать столь разные инструменты использующие разные GAPI немного не разумно, ну да ладно.. |
Ответ: Вопросы по XNA.
|
Ответ: Вопросы по XNA.
Не корректно выразился, я имел ввиду не сам ехе теста, а его описание (что тестируешь) и исходники.
Не тестируй тупо вывод картинок - это ничего не показывает. Также реально готовый проект на обоих будет конкретно отличаться по многим аспектам. Короче говоря, ты сравниваешь BMW с AUDI, разные вещи хоть и имеют по 4 колеса. |
Ответ: Вопросы по XNA.
Чем больше картинок, тем хуже.
Кидаю код. Max: XNA: Результаты этого теста: Max - 2160 XNA - 1816 Не знаю почему, но меня это вообще в шок повергло. А с чем именно это связано? XNA использует DirectX, Max вроде бы тоже. |
Ответ: Вопросы по XNA.
Мб в блицмаксе не рисуются объекты когда выходят за экран? Тоесть в функции рендера такая проверка. А в XNA нужно самому проверять.
|
Ответ: Вопросы по XNA.
facepalm
|
Ответ: Вопросы по XNA.
Тогда бы случай с одной картинкой должен был давать одинаковый результат.
Дело в чем-то другом. Тут у меня вопрос возник. А есть ли что-нибудь шустрее Макса, в плане вывода картинок? |
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
Цитата:
и попробуй вот так потестить Код:
for (int i = 0; i < 1100; i++) |
Ответ: Вопросы по XNA.
Во втором тесте у картинок есть прозрачность? Спрайт батч имеет еще параметры сортировки спрайтов, что используется по умолчанию?
|
Ответ: Вопросы по XNA.
Нет, прозрачности нигде нету. Про сортировку ничего не знаю, сейчас посмотрю.
Тут появилось две идеи. Может это связано с форматом картинки? Также, возможно, я неправильно убрал ограничение фпс в XNA? З.Ы. Исходники двумя моими постами выше, в оффтопе. |
Ответ: Вопросы по XNA.
Цитата:
Цитата:
Но самый быстрый это: Код:
sprites.Begin(SpriteSortMode.Deferred, BlendState.Additive); Попробуй с такой строчкой. и так попробуй: BlendState.Opaque Но этот медлеенее у меня чем Additive Цитата:
|
Ответ: Вопросы по XNA.
Сейчас нет доступа к ПК. А сильно ли это у тебя повлияло?
|
Ответ: Вопросы по XNA.
Цитата:
Вообщем sprites.Begin(); 8700 sprites.Begin(SpriteSortMode.Deferred, BlendState.Opaque); 8840 не знаю от чего зависит. при каждом запуске разные цифры. щас вообще 8650 было с sprites.Begin(SpriteSortMode.Deferred, BlendState.Opaque); а до этого , как я говорил sprites.Begin(SpriteSortMode.Deferred, BlendState.Additive); выдавал больше чем sprites.Begin(SpriteSortMode.Deferred, BlendState.Opaque); |
Ответ: Вопросы по XNA.
Ну-с, будем ждать ответа знающих, что они думают по этому поводу.
|
Ответ: Вопросы по XNA.
Сделайте задержку на пару секунд перед тестом в XNA, вероятно влияет начальная подгрузка библиотек Net Framework и т.д.
|
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
ППерепробывал все варианты в спрайтбатче, и задержку делал. Как ни крути Макс быстрее.
В общем, решился я на отчаянный шаг. На чем, говорите, велосипед изобретают? C++ + OpenGL/DirectX ? Попробую сделать тоже самое, банальный вывод картинок, только на DirectX SDK, и посмотреть, будет ли отличаться результат. Кстати, сложно ли это будет, если я раньше не работал с плюсами? |
Ответ: Вопросы по XNA.
Основная нагрузка идет за счет шейдеров. То что ты напишеш на ДиректИкс будит все равно все отсылать данные на видео карту. А та в свою очередь применять шейдеры.
Цитата:
Вот этот код (точнее некоторые функции внутри него, одна для вертексного, другая для пиксельного шейдера) выполняется, как минимум 4 раза для вертексного (ну у обычной картинки 4 вершины же) и 100*100 раз для пиксельного для картинки размером 100 на 100. Тоесть для каждого пикселя. И если ты хочеш добиться лучшей проиводительности, то тебе нужно помаксимуму упростить код пиксельного шейдера. Тоесть вот эту хрень: Код:
float4 PixelShaderFunction(float2 texCoord: TEXCOORD0) : COLOR0 Поэтому лучше учи HLSL. |
Ответ: Вопросы по XNA.
Хм. А можно как-нибудь посмотреть, как это в Максе сделано? Ведь там это дело быстрее, чем в XNA.
И еще. Раз вывод картинки все равно происходит благодаря шейдерам, то почему в Максе нельзя с ними работать? |
Ответ: Вопросы по XNA.
Цитата:
Цитата:
|
Ответ: Вопросы по XNA.
Нет, что-то не так.
В террарии, которая сделанна на XNA, у меня было 60 фпс. Когда я делал на максе Виво с видом сбоку, выдавало 80 фпс. Из моего теста следует, что при 100 картинках разница между максом и XNA в 300 фпс. В проектах же, картинок куда больше чем 100.Размеры картинок в Террарии и в Виво одни и те же(16х16). А значит, что проблема в чем-то другом. |
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
Так я его снял, чтобы проверить сколько фпс. Возможно я его не так снял:)
|
Ответ: Вопросы по XNA.
Цитата:
Цитата:
|
Ответ: Вопросы по XNA.
Я это к тому, что разница должна быть больше чем на 300 фпс, а разница только на 20.
Так что вопрос еще актуален. |
Ответ: Вопросы по XNA.
Хотя я подумал, пока что это не важно. Если меньше 60 выдавать будет, то буду переживать, а пока 2000 тоже хватит.
Появилась идея для игры. И тут как раз нужен шейдер. У кого-нибудь есть пример самого простого шейдера для XNA? Например, шейдер, который будет цвет каждого пикселя делать ярче, или темнее. |
Ответ: Вопросы по XNA.
както вы странно тестите. вот сейчас запусти те два кода и фпс -
BlitzMax - ~1500 XNA - ~2300 Shaders - http://forums.create.msdn.com/forums/t/27849.aspx по поводу разрешения экрана - GraphicsDevice.Adapter.CurrentDisplayMode и не забываем - после операций сграфикосом или девайсом лучше сделать ApplyChanges |
Ответ: Вопросы по XNA.
А картинки какие брал?
UPD Сегодня я кое-что вспомнил. В Максе ведь есть команды GetPixel WritePixel. А значит, на нем можно писать пиксельные шейдеры? |
Ответ: Вопросы по XNA.
Цитата:
А те команды что ты привел больше похожи на обычные вин апи функции, которые очень долгие:) |
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
Е-е-е. Видимо я нашёл в чем была проблема. Скорее всего, это было связано с тем, что я всё время создавал новый вектор2.
new Vector2(player_position.X + i * 256, player_position.Y + i1 * 256) Это строчка работает крайне медленно. Сейчас решил вывести всё в нулевых координатах. Результат - XNA превосходит Макс на 40 фпс. Но это привело к следующий проблеме: так как тогда выводить картинки? Есть ли какая-нибудь замена вектор2? |
Ответ: Вопросы по XNA.
Цитата:
Мб вся проблема в том, что в максе те картинки что ты рисуешь за экраном просто не рисуются?:) Vector2 это структура, тоесть тип значения. Что может быть еще быстрее хз. А выделение памяти для 2 переменных типа float происходит так быстро что ппц. |
Ответ: Вопросы по XNA.
Нет. Оно не рисуется не в XNA, не в Max'e. Это легко заметить, если выдвинуть картинки за экран - фпс увеличивается в разы.
|
Ответ: Вопросы по XNA.
Э-э-э. Что за чушь?! Поменял
Код:
sprites.Begin(SpriteSortMode.Immediate, BlendState.Opaque) Код:
sprites.Begin(); Ой, что-то я совсем запутался. UPD: SpriteSortMode.Immediate - ВРАГ. SpriteSortMode.Deferred - ДРУГ. Теперь всё стало на свои места. ------------ |
Ответ: Вопросы по XNA.
Цитата:
Цитата:
|
Ответ: Вопросы по XNA.
Тут имеется ввиду то, что в режиме Immediate спрайты выводятся сразу, а не при вызове метода End. Смысл в том, что в этом режиме будет столько вызовов рисования, сколько вызовов Draw. А в других режимах вывод графики будет отсортирован и выведен за меньшее число DIP'ов. В приведенном случае может быть всего один DIP, т.е. текстура всего одна. Но есть один минус сортировок не в "ручную" - вывод графики может быть не в том порядке, в котором был вызов Draw. Например если на экране рисовались две картинки чередуясь, то при сортировке могут сначала вывестись все вызовы первой картинки, потом все вызовы второй, что будет не правильно, если надо было вывести картинки чередуясь. Поэтому выбирать тот или иной режим надо от ситуации. Чаще лучше разделить вывод графики на экран на слои, чтобы добиться высокой производительности. Так же снизить число DIP'ов можно используя атласы, когда рисуются части одной и той же текстуры, но текстура например всего одна.
|
Ответ: Вопросы по XNA.
Цитата:
Вот скажем посылаем мы на видео карту объект какой нить. (Пускай будит Куб) И этот куб не входит в зону видимости камеры. (ну за экраном он.) Вершины этого объекта пройдут вершинный шейдер. И пиксельный? На какой стадии определится что не нужно его будит рисовать? Для мелких объектов не нужно делать проверку потому что эта проверка займет больше времени чем передача вершин этого объекта видеокарте и дальнейший проход по шейдерам? Или же он пройдет вершинный шейдер, увидит что координаты получаются скажем 1025 500 (и остальные вершины куба тоже за экраном), поймет что Весь куб за экраном и не пошлет ничего в пиксельный шейдер? |
Ответ: Вопросы по XNA.
У меня вопрос возник. Кто-нибудь качал исходной код, прилагающийся к книге 3D Graphics with XNA Game Studio 4.0? У меня большая часть не работает, с ошибкой : "Cannot find importer "FbxImporter". Не знаете, с чем это может быть связано?
|
Ответ: Вопросы по XNA.
не хватает проекта "FbxImporter" или он не подключен к проекту
|
Ответ: Вопросы по XNA.
Такого проекта нету и не должно быть. В обучение ничего про него не говорится.
|
Ответ: Вопросы по XNA.
точно, он должен идти уже с XNA. посмотри версии какие используются в референсах проектов, возможно у тебя другая версия установлена. поудаляй референсы на пеплайны и подобавляй по новой
|
Ответ: Вопросы по XNA.
Спасибо!
После прочтения этой книги, стало ясно, что она направлена на шейдеры и графон, а не на основы создания 3Д игр. В связи с этим, возникло много вопросов. И вот первый из них: как сделать коллизии? |
Ответ: Вопросы по XNA.
ну, примитивные колизии - есть классы BoundingBox и BoundingSphere у них есть методы для получения пересечений и всё такое. если чтото сложнее - то всё также как и в любом другом движке - писать своё или использовать уже готовые физ движки
|
Ответ: Вопросы по XNA.
Спасибо.
А вот например, если у меня есть модель комнаты с дверным проемом, то как сделать так, чтобы я мог попасть в эту комнату? Ведь если создать только один BoundingBox, то внутрь я пройти не смогу. Надо создавать по отдельному BoundingBox на каждую стену? И еще кое-что. Как делают физику для ступенек? То есть чтобы объект мог подниматься и опускаться по ступенькам. |
Ответ: Вопросы по XNA.
Цитата:
Цитата:
Опятьже, повторяюсь - Bounding обьекты XNA не препятствуют ничем(да и как они могут то?) они просто дадут знать есть ли колизии с другими обьектами. не больше не меньше |
Ответ: Вопросы по XNA.
Ясно.
Ступени, как я понял, дело вообще проблематичное. Это ведь придётся на каждую ступеньку BoundingBoх свой делать. Очень интересно, как это в блитце сделали коллизии с объектами произвольной формы, ведь там любую модель загрузить можно, и коллизии правильно работать будут. |
Ответ: Вопросы по XNA.
К XNA подключаются некоторые физические движки без особых проблем. Можно использовать их для определения коллизий.
Вот например http://bepuphysics.codeplex.com/ |
Ответ: Вопросы по XNA.
Баг:
|
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
Я тупо скачал файлик с темы, запустил его и ошибка...я не пишу на XNA, откуда обычный смертный должен знать был что нужно для этого??
|
Ответ: Вопросы по XNA.
Цитата:
|
Ответ: Вопросы по XNA.
Цитата:
|
Часовой пояс GMT +4, время: 04:33. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot