Суббота, 19 Июля 2025, 02:43

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
ArchidoДата: Воскресенье, 28 Апреля 2013, 09:50 | Сообщение # 241 | Тема: Переход на новый язык программирования!
Сэнсэй
Сейчас нет на сайте
Цитата (Undead)
В своём проекте же стараюсь всё оптимизировать на столько, на скольно возможно.

Про зло под названием "преждевременная оптимизация" слышал? smile Оптимизировать таки надо, то что уже хорошо и отлажено работает, и действительно тормозит. На ранних стадиях разработки иногда приходится многое переписывать и, в таком случае, оптимизировать по новой. Но это так, к слову smile А вообще если нравится все оптимайзить и весь процесс контролировать, то язык похоже надо и правда менять.

Цитата (Undead)
Ну unsafe,а не так много, в основном же Pinvoke, да маршалинг, т.к. часть кода на плюсах. Думаю о том, что бы проценитов 70 на плюсы переписать.

Ну PInvoke это то нормально, а вот unsafe все таки не очень. А после 70-ти процентов со временем и оставшееся перепишешь happy

Цитата (Undead)
Я всё чаще склоняюсь к мысли, что .Net - один большой костыль.

Все может быть biggrin


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Воскресенье, 28 Апреля 2013, 09:36 | Сообщение # 242 | Тема: Вики по DirectX 11
Сэнсэй
Сейчас нет на сайте
Цитата (warzes)
Это которое написано здесь - http://www.gamedev.ru/terms/Billboard

Да, кстати, один из вариантов.

Цитата (warzes)
Так ли уж оно быстрей? Я вычисляю арктангенсом один раз для всего билбоарда, плюс в шейдере 4 умножения матриц (4 вершины * MVP). А в этом примере добавляются еще 8 умножений). С другой стороны если арктангенс такой медленный...

Да. Арктангенс относительно медленный... и вся тригонометрия в целом, часто можно обойтись без нее и не делать двойную работу. Вот ты сначала считаешь арктангенс, получаешь угол, а потом его скармливаешь синусу и косинусу, потом еще умножаешь rotation на translation (хотя достаточно просто Translate прибавить, но у тебя оно на SSE живет, как я понимаю). А при шейдерной реализации достаточно лишь передать в шейдер позицию(или массив, если билбордов много) и View матрицу, там он вытянет необходимые векторы и сделает простейшие вычисления. Для GPU пара умножений на вершину - это как капля в море smile


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Суббота, 27 Апреля 2013, 12:56 | Сообщение # 243 | Тема: Вики по DirectX 11
Сэнсэй
Сейчас нет на сайте
По билбордам. Ты вычисляешь арктангенс чтобы получить угол, а потом этот же угол скармливаешь синусу и косинусу biggrin Это Epic. В добавок, насколько я помню, ты большой любитель шейдеров... которые в данном случае выполняют лишь обычные FFP преобразования (умножение вершины на матрицу трансформации и выборку из текстуры), а можно более эффективно и быстро вычислить ориентацию билборда в вертексном шейдере, безо всякой тригонометрии. Что, на самом деле, было бы полезней.

C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Суббота, 27 Апреля 2013, 12:57
ArchidoДата: Суббота, 27 Апреля 2013, 09:27 | Сообщение # 244 | Тема: Переход на новый язык программирования!
Сэнсэй
Сейчас нет на сайте
Цитата (Vinchensoo)
Прекрасно представляю, что такое unsafe и маршалинг. Unsafe- это мейджик, он зло и не соответствует идеологии языка

+ 1. Unsafe тут - фактически костыль smile

Цитата (Undead)
С одной стороны да, но когда нужно взаимодействовать с натвиным кодом, то другого выхода нет.

PInvoke же + маршалинг. Ибо все таки маршалинг и голые указатели внутри managed кода - это разные вещи. И тут скорее даже не взаимодействие с "нативным кодом", а взаимодействие между managed и unmanaged кодом (ну и native по умолчанию unmanaged). В случае с маршалингом - в коде нет торчащих наружу " аля void* ", все типы являются managed типами, и обычно этого достаточно для "общения" с native.

Цитата (Undead)
Нужно. Если писать чисто на шарпе, то скорость будет ужасной.

Цитата (Undead)
Да и пробежаться указателем по коллекции быстрее, чем foreach использовать.

Так и надо к этому более комплексно подходить. Не делать постоянно костыльные указатели повсеместно и мешать кашу из safе/unsafe кода, а брать, скажем, цельный алгоритм или вообще какую-либо систему (для движка актуально) и выносить отдельно в unmanaged native код (С++), где уже все заоптимизируется как надо.

Насчет "пробежаться указателем по коллекции быстрее", а за счет чего оно станет быстрее? После того как отработает JIT компилятор, foreach сам превратится в нативное "пробежаться по указателям" и усе. В Managed языках вообще не надо думать о указателях и о какой-то там памяти smile , иначе все концепция таких языков нарушается. Хотите "поработать" с памятью? Тогда только С++, только хардкор.

Цитата (Undead)
Я же имел ввиду движки написанные на .Net языках. Это по идее не возможно, т.к. на данный момент все GAPI нативные. Для тех, кто скажет про XNA: Там внутри вызывается нативный DirectX.

Ну, с такой постановкой вопроса на .Net языках писать вообще невозможно smile . Банальное создание окна - уже вызов нативной ф-ции внутри фреймворка, и так почти на каждый чих.

P.S. Имхо, конечно, многое smile . Но за указатели в managed я бы руки отрывал happy


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Суббота, 27 Апреля 2013, 10:29
ArchidoДата: Вторник, 23 Апреля 2013, 14:00 | Сообщение # 245 | Тема: Проектирование ядра игры
Сэнсэй
Сейчас нет на сайте
Deswing
Я в одной из предыдущих тем вроде кое-чего писал по этому поводу, повторюсь \ дополню:

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

Добавлю, что ты сейчас вообще не теми вопросами задаешься. Тебе нужно не о архитектурах и проектировании думать, а набивать скилл как программиста. Алгоритмы там изучать, книжки интересные читать, писать тонны С++'го кода, практики побольше одним словом, иначе ты так и будешь на одном месте топтаться.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Четверг, 18 Апреля 2013, 17:36 | Сообщение # 246 | Тема: Обнуление указателей
Сэнсэй
Сейчас нет на сайте
Цитата (RUNGOGET2THECHOPAH)
Суть проблемы в том, что когда объект удаляется, то на его место в памяти может создаться какой-нибудь другой объект. И тогда этот указатель на удалённый объект станет устаревшим, обращение по нему приведёт к действиям над новым объектом, а это не есть хорошо.

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

А по проблемам с обращением по невалидному указателю есть смарт поинтеры, да. Ну или хендлы, на вкус и цвет уж.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Четверг, 18 Апреля 2013, 17:38
ArchidoДата: Пятница, 12 Апреля 2013, 18:36 | Сообщение # 247 | Тема: ой...
Сэнсэй
Сейчас нет на сайте
MasTerilDar
Где в реестре таки было? smile


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Пятница, 12 Апреля 2013, 18:28 | Сообщение # 248 | Тема: ой...
Сэнсэй
Сейчас нет на сайте
Цитата (MasTerilDar)
значение AppInit_DLLs пустое

Хм, интересно кто ее тогда загружает... Mozilla есть в наличии? smile Если нет, то просто ради интереса сделай поиск в реестре (ctrl + F3 в regedit) по этому имени "phcgeon", может чего найдет. А если ничего не найдет, то вероятно ее левый экзешник загружает, неплохо бы еще Run'ы проверить:
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" и в "HKEY_CURRENT_USER" такой же есть.

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


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Пятница, 12 Апреля 2013, 18:30
ArchidoДата: Пятница, 12 Апреля 2013, 18:02 | Сообщение # 249 | Тема: ой...
Сэнсэй
Сейчас нет на сайте
А реестр смотрел? Если это таки длл'ка, то она с большой вероятностью загружается здесь:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows, там параметр AppInit_DLLs, его и смотреть.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Пятница, 12 Апреля 2013, 14:54 | Сообщение # 250 | Тема: Собираю команду на проект.
Сэнсэй
Сейчас нет на сайте
Так прогресс то есть какой-либо? Прототип с игровой механикой \ разного рода арт, что-либо еще... Или за год удалось лишь пару картинок набросать?

C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Пятница, 05 Апреля 2013, 17:30 | Сообщение # 251 | Тема: Эвенты на с++ или как это назвать
Сэнсэй
Сейчас нет на сайте
Цитата (Нохчи)
Незачем плодить классы. Здесь самый нормальный вариант - использовать колбеки, т. е. при создании объекта ивент, передается функция, которая будет вызвана при его активации. При более продвинутой реализации это называется "механизм сигналов и слотов", но усложнять так совсем не обязательно.

+1.

У сишных сигнал\слотов на шаблонах - сплошные плюсы за исключением, наверное, вызовов виртуальных функций на каждый чих. Тут главное не генерить эти события пачками каждый кадр, а с умом подходить к этому делу - и будет все ок.
Самому такое писать, конечно, дело совсем непростое, но есть уже готовое - boost например smile или довольно легковесная (и относителньо простая) вот такая либа, там же есть pdf с примерами. Стоит разобраться.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Среда, 03 Апреля 2013, 16:09 | Сообщение # 252 | Тема: Освещение, шейдеры, hlsl...
Сэнсэй
Сейчас нет на сайте
Цитата (Huntlier)
Не понимаю каким образом вычисляются тени, хочу понять принцип, каким образом это выполняют шейдеры...

Конкретное что-нибудь или вообще ничего не понятно по теням? smile Как в 3D простые тени рисуют есть познания? Ибо очень многое там и тут пересекается...

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

По первой сылке подробно рассказывается про то, как построить эту шадоу мапу. В кратце как-то так:
Все, что отбрасывает тень (шадоу кастеры) - рендерится в R канал текстуры, но записывается не просто цвет, а вычисляется расстояние от конкретного пикселя до источника света и оно уже пишется в текстуру. Далее лучи от пикселя до светильника выравнивают (делают параллельными) по горизонтали, располагают в 4-х треугольниках (верхний и нижний - для вертикальных лучей, левый и правый - для горизонтальных. После "выравнивания" треуглы превращаются в прямоугольники) и по 2 записываются в два канала текстуры.

Потом делается то, что называется "Reduction". У нас есть куча параллельных лучей и вдоль их направления (по всей шадоу мапе) записано расстояние от кастеров до источника, но нам нужно знать именно самое минимальное, что с помощью "Reduction'a" и делается... Который представляет собой DownSampling (уменьшение в 2..N раз за проход) текстуры с шадоу мапой по горизонтали, но делается не обычное усреднение соседних пикселей (среднее арифметическое), а выбирается минимальное из двух - что и нужно. Автор уменьшает текстуру с 512 до 2 пикселей за 9 проходов (только следует иметь в виду то, что сам размер текстуры не уменьшается smile , а эти 2 пикселя просто "размазаны" по каждой горизонтальной полосе (лучу) в 512 пикселей. В идеале надо уменьшать до 1, но автор экономит лишний проход - значит приемлимо). В итоге на всем протяжении луча - у нас записано необходимое минимальное расстояние, шадоу мапа готова.

Собсна, используя эту мапу, мы читаем из нее растояние, считаем расстояние от пикселя до источника и сравниваем. Если наше меньше чем в мапе, то тень в этом пикселе не рисуем, если больше - то рисуем. Когда основная тень отрисовывается - ей делается Gaussian blur и считается затухание источника света, собирается вместе и вуаля.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Вторник, 02 Апреля 2013, 06:25 | Сообщение # 253 | Тема: ROTM.{2D Racing}
Сэнсэй
Сейчас нет на сайте
Цитата (Undead)
Ну это то не существенно.

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

Цитата (Amri)
слушай, покажи, как?

А что там показывать то? smile Вот у тебя сейчас есть массив map и ты его просто берешь и пишешь в бинарник ( biggrin ) с помощью BinaryWriter'a, например. Еще перед этим можно сохранять информацию о размерах карты. При загрузке берешь BinaryReader, читаешь размер карты и на основе его создаешь соответствующий массив map, после чего уже читаешь туда свои данные карты.
Но без редактора в этом смысла нет. Пока можно просто как текстовый хранить или уж как xml (но лично мне карта в xml не нравится).


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Вторник, 02 Апреля 2013, 06:26
ArchidoДата: Понедельник, 01 Апреля 2013, 15:28 | Сообщение # 254 | Тема: ROTM.{2D Racing}
Сэнсэй
Сейчас нет на сайте
Цитата (Undead)
Он хотел редактор вроде писать.

Это дело нужное smile

Цитата (Undead)
По памяти: если из xml,ки только загружать карту, а потом просто создавать объект класса карты, то на памяти не должно ведь сказаться.

Ога, я имел в виду память в виде диска smile


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Понедельник, 01 Апреля 2013, 14:54 | Сообщение # 255 | Тема: ROTM.{2D Racing}
Сэнсэй
Сейчас нет на сайте
Цитата (Undead)
Почему бы не хранить сразу всё в XML?

Так оверхед же ненужный.
Карта может быть и простым списком в которой содержатся игровые обьекты и хранить ее можно бинарно как [Id, x, y], сами объекты описаны в xml и им присвоен уникальный Id. Будет быстрее. Но вообще для небольшой 2д игры, конечно, особо заметной разницы то и не будет smile
Можно еще добавить, что плюс Xml'я в том, что его можно легко редактировать ручками (объекты, параметры их, etc), а вот карты в нем делать как-то не очень привлекает smile , для этого должен быть нормальный редактор... а зачем хранить данные которые нет смысла редактировать как текстовые, если их можно сохранить как бинарные и получить бонус в виде скорости и сэкономить память? happy


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Понедельник, 01 Апреля 2013, 14:57
ArchidoДата: Понедельник, 01 Апреля 2013, 11:21 | Сообщение # 256 | Тема: ROTM.{2D Racing}
Сэнсэй
Сейчас нет на сайте
Цитата (Amri)
Кстати, общественность может спросить, на кой пес мне нужны книги по Xml. Отвечаю - карты (точнее трассы) и сохранения я хочу сделать именно в файлах xml.

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

Всю тему не читал, но если вдруг интересует \ заинтересует неплохая физика для авто, то существует очень неплохая статья про это дело.

P.S. Удачи с игрой smile


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Суббота, 30 Марта 2013, 16:06 | Сообщение # 257 | Тема: Параметры объекта
Сэнсэй
Сейчас нет на сайте
Цитата (SilverOverlord)
Насколько этот вариант убивает быстродействие?

В первом случае обращаемся к памяти [адрес объекта + положение параметра в классе], во втором [адрес объекта + Idx в массиве]. Если во втором варианте будет больше чем один параметр, то к вычислению адреса добавится еще одно сложение (будет их два, хотя если индекс массива известен на этапе компиляции - то одно сложение и останется), что современные процессоры даже не заметят (с помощью LEA инструкции можно выполнить все это за один такт).

Так, что без разницы. Но первый вариант человечнее smile


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Суббота, 30 Марта 2013, 16:08
ArchidoДата: Четверг, 28 Марта 2013, 08:52 | Сообщение # 258 | Тема: OpenGL
Сэнсэй
Сейчас нет на сайте
Проекция ортографическая? Обновляешь ее при ресайзе окна?

C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Четверг, 28 Марта 2013, 08:49 | Сообщение # 259 | Тема: Проблема с Visual Studio 2012!
Сэнсэй
Сейчас нет на сайте
Это просто предрелизная (Release Candidate) версия, смысла в которой уже нет. Скачай себе последнюю Release.

C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Четверг, 28 Марта 2013, 08:43 | Сообщение # 260 | Тема: GLSL
Сэнсэй
Сейчас нет на сайте
LWJGL - фактически самый обычный OpenGL, поэтому туториалы лучше смотреть вообще любые, без привязки к конкретному языку. По GLSL существует весьма недурная книженция - Orange Book, лучше материала наверное вообще нет.

C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Четверг, 28 Марта 2013, 08:44
Поиск:

Все права сохранены. GcUp.ru © 2008-2025 Рейтинг