Результаты поиска
| |
Archido | Дата: Воскресенье, 28 Апреля 2013, 09:50 | Сообщение # 241 | Тема: Переход на новый язык программирования! |
Сэнсэй
Сейчас нет на сайте
| Цитата (Undead) В своём проекте же стараюсь всё оптимизировать на столько, на скольно возможно. Про зло под названием "преждевременная оптимизация" слышал? Оптимизировать таки надо, то что уже хорошо и отлажено работает, и действительно тормозит. На ранних стадиях разработки иногда приходится многое переписывать и, в таком случае, оптимизировать по новой. Но это так, к слову А вообще если нравится все оптимайзить и весь процесс контролировать, то язык похоже надо и правда менять.
Цитата (Undead) Ну unsafe,а не так много, в основном же Pinvoke, да маршалинг, т.к. часть кода на плюсах. Думаю о том, что бы проценитов 70 на плюсы переписать. Ну PInvoke это то нормально, а вот unsafe все таки не очень. А после 70-ти процентов со временем и оставшееся перепишешь
Цитата (Undead) Я всё чаще склоняюсь к мысли, что .Net - один большой костыль. Все может быть
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 пара умножений на вершину - это как капля в море
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Суббота, 27 Апреля 2013, 12:56 | Сообщение # 243 | Тема: Вики по DirectX 11 |
Сэнсэй
Сейчас нет на сайте
| По билбордам. Ты вычисляешь арктангенс чтобы получить угол, а потом этот же угол скармливаешь синусу и косинусу Это Epic. В добавок, насколько я помню, ты большой любитель шейдеров... которые в данном случае выполняют лишь обычные FFP преобразования (умножение вершины на матрицу трансформации и выборку из текстуры), а можно более эффективно и быстро вычислить ориентацию билборда в вертексном шейдере, безо всякой тригонометрии. Что, на самом деле, было бы полезней.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Суббота, 27 Апреля 2013, 12:57 |
|
| |
Archido | Дата: Суббота, 27 Апреля 2013, 09:27 | Сообщение # 244 | Тема: Переход на новый язык программирования! |
Сэнсэй
Сейчас нет на сайте
| Цитата (Vinchensoo) Прекрасно представляю, что такое unsafe и маршалинг. Unsafe- это мейджик, он зло и не соответствует идеологии языка + 1. Unsafe тут - фактически костыль
Цитата (Undead) С одной стороны да, но когда нужно взаимодействовать с натвиным кодом, то другого выхода нет. PInvoke же + маршалинг. Ибо все таки маршалинг и голые указатели внутри managed кода - это разные вещи. И тут скорее даже не взаимодействие с "нативным кодом", а взаимодействие между managed и unmanaged кодом (ну и native по умолчанию unmanaged). В случае с маршалингом - в коде нет торчащих наружу " аля void* ", все типы являются managed типами, и обычно этого достаточно для "общения" с native.
Цитата (Undead) Нужно. Если писать чисто на шарпе, то скорость будет ужасной. Цитата (Undead) Да и пробежаться указателем по коллекции быстрее, чем foreach использовать. Так и надо к этому более комплексно подходить. Не делать постоянно костыльные указатели повсеместно и мешать кашу из safе/unsafe кода, а брать, скажем, цельный алгоритм или вообще какую-либо систему (для движка актуально) и выносить отдельно в unmanaged native код (С++), где уже все заоптимизируется как надо.
Насчет "пробежаться указателем по коллекции быстрее", а за счет чего оно станет быстрее? После того как отработает JIT компилятор, foreach сам превратится в нативное "пробежаться по указателям" и усе. В Managed языках вообще не надо думать о указателях и о какой-то там памяти , иначе все концепция таких языков нарушается. Хотите "поработать" с памятью? Тогда только С++, только хардкор.
Цитата (Undead) Я же имел ввиду движки написанные на .Net языках. Это по идее не возможно, т.к. на данный момент все GAPI нативные. Для тех, кто скажет про XNA: Там внутри вызывается нативный DirectX. Ну, с такой постановкой вопроса на .Net языках писать вообще невозможно . Банальное создание окна - уже вызов нативной ф-ции внутри фреймворка, и так почти на каждый чих.
P.S. Имхо, конечно, многое . Но за указатели в managed я бы руки отрывал
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Суббота, 27 Апреля 2013, 10:29 |
|
| |
Archido | Дата: Вторник, 23 Апреля 2013, 14:00 | Сообщение # 245 | Тема: Проектирование ядра игры |
Сэнсэй
Сейчас нет на сайте
| Deswing Я в одной из предыдущих тем вроде кое-чего писал по этому поводу, повторюсь \ дополню:
Во-первых, без познаний в графике пытаться писать графический движок чистой воды абсурд... это ведь вполне логично и очевидно, разве нет? Поэтому надо набивать скилл, программируя на чистом OpenGL (можно в связке с глутом). Во-вторых, чтобы его написать - нужно представлять хоть примерно как он должен выглядеть и что уметь, иначе это просто написание сферического коня в вакууме... а чтобы получить эти представления можно написать небольшую игру на каком-либо интересном движке, отметить для себя как он устроен, какие ф-ции используются и для чего, и далее в таком же духе. Для полноты картины после можно еще поверхностно посмотреть на другие. А потом можно просто скомуниздить API первоначального движка (на котором писали игру) и сделать почти также и у себя - будет меньше вопросов. Когда все это осилишь - начнут появляться собственные мысли, тут уже можно и насочинять собственную "орхетектуру".
Добавлю, что ты сейчас вообще не теми вопросами задаешься. Тебе нужно не о архитектурах и проектировании думать, а набивать скилл как программиста. Алгоритмы там изучать, книжки интересные читать, писать тонны С++'го кода, практики побольше одним словом, иначе ты так и будешь на одном месте топтаться.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Четверг, 18 Апреля 2013, 17:36 | Сообщение # 246 | Тема: Обнуление указателей |
Сэнсэй
Сейчас нет на сайте
| Цитата (RUNGOGET2THECHOPAH) Суть проблемы в том, что когда объект удаляется, то на его место в памяти может создаться какой-нибудь другой объект. И тогда этот указатель на удалённый объект станет устаревшим, обращение по нему приведёт к действиям над новым объектом, а это не есть хорошо. Если проблема только в том, что вместо удаленного объекта непреднамеренно появится новый того же типа (или если они имеют общий базовый класс, на крайняк), то самый простой способ присвоить каждому объекту некий уникальный Id и хранить его рядом с указателем (и в самом объекте тоже ессно), и перед тем как делать чего-либо с этим объектом - сравнивать эти Id'ы и делать выводы.
А по проблемам с обращением по невалидному указателю есть смарт поинтеры, да. Ну или хендлы, на вкус и цвет уж.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Четверг, 18 Апреля 2013, 17:38 |
|
| |
Archido | Дата: Пятница, 12 Апреля 2013, 18:36 | Сообщение # 247 | Тема: ой... |
Сэнсэй
Сейчас нет на сайте
| MasTerilDar Где в реестре таки было?
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Пятница, 12 Апреля 2013, 18:28 | Сообщение # 248 | Тема: ой... |
Сэнсэй
Сейчас нет на сайте
| Цитата (MasTerilDar) значение AppInit_DLLs пустое Хм, интересно кто ее тогда загружает... Mozilla есть в наличии? Если нет, то просто ради интереса сделай поиск в реестре (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 например или довольно легковесная (и относителньо простая) вот такая либа, там же есть pdf с примерами. Стоит разобраться.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Среда, 03 Апреля 2013, 16:09 | Сообщение # 252 | Тема: Освещение, шейдеры, hlsl... |
Сэнсэй
Сейчас нет на сайте
| Цитата (Huntlier) Не понимаю каким образом вычисляются тени, хочу понять принцип, каким образом это выполняют шейдеры... Конкретное что-нибудь или вообще ничего не понятно по теням? Как в 3D простые тени рисуют есть познания? Ибо очень многое там и тут пересекается...
В целом суть подобных техник заключается в том, что у нас есть некая информация (ShadowMap) о том, где находится самый ближайший шадоу кастер к источнику света (для этого сцену рендерят с позиции светильника). Это делает один шейдер, собственно он строит ентот ShadowMap (это еще не итоговая тень). Во втором шейдере, которые уже будет рисовать непосредственно тень, зная эту информацию мы можем с помощью позиции пикселя и позиции источника света вычислить вектор направления, пустить луч по этому направлению и найти "пересечение" с ShadowMap и прочитать из него минимальную дистанцию до кастера. Собственно теперь, сравнивая полученное значение (расстояние) из шадоу мапы с расстоянием текущего пикселя до источника света, мы можем определить - находимся ли мы в тени или нет (меньше - не в тени, больше - в тени).
По первой сылке подробно рассказывается про то, как построить эту шадоу мапу. В кратце как-то так: Все, что отбрасывает тень (шадоу кастеры) - рендерится в R канал текстуры, но записывается не просто цвет, а вычисляется расстояние от конкретного пикселя до источника света и оно уже пишется в текстуру. Далее лучи от пикселя до светильника выравнивают (делают параллельными) по горизонтали, располагают в 4-х треугольниках (верхний и нижний - для вертикальных лучей, левый и правый - для горизонтальных. После "выравнивания" треуглы превращаются в прямоугольники) и по 2 записываются в два канала текстуры.
Потом делается то, что называется "Reduction". У нас есть куча параллельных лучей и вдоль их направления (по всей шадоу мапе) записано расстояние от кастеров до источника, но нам нужно знать именно самое минимальное, что с помощью "Reduction'a" и делается... Который представляет собой DownSampling (уменьшение в 2..N раз за проход) текстуры с шадоу мапой по горизонтали, но делается не обычное усреднение соседних пикселей (среднее арифметическое), а выбирается минимальное из двух - что и нужно. Автор уменьшает текстуру с 512 до 2 пикселей за 9 проходов (только следует иметь в виду то, что сам размер текстуры не уменьшается , а эти 2 пикселя просто "размазаны" по каждой горизонтальной полосе (лучу) в 512 пикселей. В идеале надо уменьшать до 1, но автор экономит лишний проход - значит приемлимо). В итоге на всем протяжении луча - у нас записано необходимое минимальное расстояние, шадоу мапа готова.
Собсна, используя эту мапу, мы читаем из нее растояние, считаем расстояние от пикселя до источника и сравниваем. Если наше меньше чем в мапе, то тень в этом пикселе не рисуем, если больше - то рисуем. Когда основная тень отрисовывается - ей делается Gaussian blur и считается затухание источника света, собирается вместе и вуаля.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Вторник, 02 Апреля 2013, 06:25 | Сообщение # 253 | Тема: ROTM.{2D Racing} |
Сэнсэй
Сейчас нет на сайте
| Цитата (Undead) Ну это то не существенно. Конретно в данном случае так и есть, я ведь не зря в конце своего поста смайл поставил А вот именно в общем случае большие объемы данных в xml обычно не хранят. Приходилось может с Collada работать? Там при увеличении полигонажа модели размер выходного файла растет как на дрожжах, что в свою очередь увеличивает время, необходимое на обработку данных (парсинг), и в итоге сказывается на общем времени загрузки. Т.е. как универсальный промежуточный формат - это очень неплохая вещь, но для загрузки непосредствено моделей в игру оно не подходит категорически.
Цитата (Amri) слушай, покажи, как? А что там показывать то? Вот у тебя сейчас есть массив map и ты его просто берешь и пишешь в бинарник ( ) с помощью BinaryWriter'a, например. Еще перед этим можно сохранять информацию о размерах карты. При загрузке берешь BinaryReader, читаешь размер карты и на основе его создаешь соответствующий массив map, после чего уже читаешь туда свои данные карты. Но без редактора в этом смысла нет. Пока можно просто как текстовый хранить или уж как xml (но лично мне карта в xml не нравится).
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Вторник, 02 Апреля 2013, 06:26 |
|
| |
Archido | Дата: Понедельник, 01 Апреля 2013, 15:28 | Сообщение # 254 | Тема: ROTM.{2D Racing} |
Сэнсэй
Сейчас нет на сайте
| Цитата (Undead) Он хотел редактор вроде писать. Это дело нужное
Цитата (Undead) По памяти: если из xml,ки только загружать карту, а потом просто создавать объект класса карты, то на памяти не должно ведь сказаться. Ога, я имел в виду память в виде диска
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Понедельник, 01 Апреля 2013, 14:54 | Сообщение # 255 | Тема: ROTM.{2D Racing} |
Сэнсэй
Сейчас нет на сайте
| Цитата (Undead) Почему бы не хранить сразу всё в XML? Так оверхед же ненужный. Карта может быть и простым списком в которой содержатся игровые обьекты и хранить ее можно бинарно как [Id, x, y], сами объекты описаны в xml и им присвоен уникальный Id. Будет быстрее. Но вообще для небольшой 2д игры, конечно, особо заметной разницы то и не будет Можно еще добавить, что плюс Xml'я в том, что его можно легко редактировать ручками (объекты, параметры их, etc), а вот карты в нем делать как-то не очень привлекает , для этого должен быть нормальный редактор... а зачем хранить данные которые нет смысла редактировать как текстовые, если их можно сохранить как бинарные и получить бонус в виде скорости и сэкономить память?
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Понедельник, 01 Апреля 2013, 14:57 |
|
| |
Archido | Дата: Понедельник, 01 Апреля 2013, 11:21 | Сообщение # 256 | Тема: ROTM.{2D Racing} |
Сэнсэй
Сейчас нет на сайте
| Цитата (Amri) Кстати, общественность может спросить, на кой пес мне нужны книги по Xml. Отвечаю - карты (точнее трассы) и сохранения я хочу сделать именно в файлах xml. Еще общественность интересует - почему именно xml? Для создания \ редактирования разного рода объектов при отсуствии редакторов - хороший вариант, но вот хранить саму карту таким образом (много повторяющихся ненужных тегов)... Визуального редактора карт не планируется? Ибо удобно описать в xml сами игровые объекты (их свойста и параметры) и присвоить каждому некоторый Id, а саму карту хранить в бинарном формате, в которой каждая ячейка с координатами x, y хранит список Id этих объектов (например), которые в ней расположены. Таким образом сначала парсится инфа о объектах из xml, быстро загружается информация о карте из бинарника, после чего уже создаются сами объекты в необходимых местах. Но карту неплохо бы делать в редакторе
Всю тему не читал, но если вдруг интересует \ заинтересует неплохая физика для авто, то существует очень неплохая статья про это дело.
P.S. Удачи с игрой
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
Archido | Дата: Суббота, 30 Марта 2013, 16:06 | Сообщение # 257 | Тема: Параметры объекта |
Сэнсэй
Сейчас нет на сайте
| Цитата (SilverOverlord) Насколько этот вариант убивает быстродействие? В первом случае обращаемся к памяти [адрес объекта + положение параметра в классе], во втором [адрес объекта + Idx в массиве]. Если во втором варианте будет больше чем один параметр, то к вычислению адреса добавится еще одно сложение (будет их два, хотя если индекс массива известен на этапе компиляции - то одно сложение и останется), что современные процессоры даже не заметят (с помощью LEA инструкции можно выполнить все это за один такт).
Так, что без разницы. Но первый вариант человечнее
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 |
|
| |
|