![]() |
Ответ: raycasting
Цитата:
FPS max. - 15, min. - 13 Стерео эффект пока что не очень, может быть из-за чёрных полосок сверху и снизу экрана, или нечёткости контуров. Слева экрана, артефактная красная полоса, в стерео очках даёт странный эффект - как будто слева очень узкая, дополнительная камера. |
Ответ: raycasting
Цитата:
Однако идея хорошая. Ты имеешь ввиду анаглифные очки? С ними можно попробовать поэкспериментировать. Вообще я сам не очень одобряю эти очки, у них и качество посредственное и пускать два разных цветовых канала в каждый глаз это издевательство. Но в целом опробовать стерео механику в широком смысле слова было бы неплохо для рендера. Как нибудь займусь этим. Насчет того эффекта что ты принял за стерео - его механика проще: изображение раскладывается на 3 составляющии, красное, зеленое и синие. Затем красное и синие сдвигаются вправо и влево относительно зеленого соотвественно, и немного искажаются по горизонтали, с помощью смещения. Затем 3 составляющии снова соединяются в одно изображение. То что это внешне напоминает стерео - просто совпадение, я и не думал о нем когда делал этот эффект. Цитата:
Я пробовал на стареньком ноуте с процем DualCore 2ГГц - там до 20 fps, на i7-930 - 55-60. У тебя нет возможности Linux версию протестировать? И кстати какая у тебя память (сколько каналов, тип и частота)? maze_6_13.tar.7z (Linux) |
Ответ: raycasting
Цитата:
А ведь почти получилось :) Цитата:
DDR 3 - 1333 - 4Гб - одна планка |
Ответ: raycasting
Цитата:
Вполе возможно что медленно так из-за памяти. Так что буду пробовать еще снижать трафик в памяти. Я думаю на памяти надо даже больше сосредоточиться чем на процессоре. Я кстати не знаю причины почему у тебя одна планка, но это не рационально. Для твоего процессора оптимальная память раза в 3 быстрей должна быть. У тебя же наверняка трехканальная передача данных поддерживается или что-то в этом роде. Еще 2 планки аналогичные поставь. |
Ответ: raycasting
Надеюсь автор топика не будет против, если я продолжу тему по иному рейкаст-двигателю (http://lodev.org/cgtutor/raycasting2.html)
Пробовал заделать пол и потолок градиентом (пикча) прирост производительноти процентов, эдак, на 50...75. Но всё равно отстойно смотрится. Замена double на float не привнесла абсолютно никаких изменений. Всё такой же адово низкий показатель fps. (при отрисовке текстур пола и потолка на разрешении 1366*768 и частоте проца 2.2 ГГц выдаёт 12 кадров пер секонд) И ещё, как поменять в этом движке высоту положения камеры ? Там надо отдельно менять какие-то значения в цикле рендера пола, цикле стен и спрайтов. |
Ответ: raycasting
В этом участке я максимум что осилил, так это вынести пару арифметических операций за тело цикла.
Код:
int dd=h * 128 ; |
Ответ: raycasting
Нужно избавиться от умножения. До тела цикла вычислить константу, а затем вычислять d+=const.
то же касается и TexY. А вообще лучше конечно было бы асм-всавками воспользоваться, но хз, как потом результат вычислений занести из регистров в определённую переменную... |
Ответ: raycasting
Пока еще не разбирал этот двиг, но некоторые алгоритмы рейкастинга (и в моем движке так тоже было в начале) могут не предусмативать настройку высоты камеры вообще - опять же этими апроксимациями можно сократить кол-во вычислений.
1366х768 и при этом собираешься делать ретро игру под pentium mmx с выборкой без сглаживания и целочисленными вычислениями? Так не выйдет. Определись - либо делаешь всё как в старых играх, в том числе 320х200 (или 240), либо делаешь нормально под современные железо и пользуешься текстурными фильтрами и прочими вещами которые хоть как то облагораживают изображения для более менее высокого разрешения. Иначе будет выглядеть трешево. Ок, можешь в сюда постить - будет общая тема рейкастинга. upd: Максимум что можно сделать это рендерить в буфер 320x240, а затем аппаратно перерисовать в более большой, например 1920х1080, потому что не все мониторы могут растянуть такое низкое разрешение на полный экран, только перерисовывать без сглаживания, либо с каким то дополнительным шейдерным эффектом, как например старые ЭЛТ мониторы - они не могли четко нарисовать пиксель как LCD монитор. |
Ответ: raycasting
Цитата:
так-то планирую хотя бы на 640*480 ориентироваться. Дело в том, что на 640*480 этот движок тоже адски тормозит. На моём пне MMX вполне шустро работает виндовый порт Дюка3д eduke32 на разрешении 800*600, на софтверном рендере, разумеется. А там графон огого, и динамические освещения, и разная высота стен, и альфаблендинг текстур, и анимация биллбордов и текстур, та и тайлинг текстур нехилый такой, и наклонные поверхности по всем осям, и ещё много чего. Та и не только рейкаст, даже полигнональные игры, типа NFS-1 или MDK на софтверном двигателе летают на моем MMX'e. А вот игры с коррекцией перспективы уже малость лажают (тот же quake 1-2, на разрешениях 640*480 проседают по фреймрейту, так как коррекция перспективы довольно ресурсоёмка. Хотя меш моделей *.md1 *.md2 с искажённым наложением текстур)... Но это уже малость оффтоп. |
Ответ: raycasting
Вот сейчас интересует, как же запилить ассемблерную вставку в коде-блоксе (mingw gcc win32).
Чтоб произвести арифметические вычисления, и результат из регистра поместить в какую-либо переменную. |
Ответ: raycasting
В gcc inline assembler есть два наречия at&t и intel - intel признано более удобным, но можешь по любому писать.
howto для at&t Для intel все тоже самое только нужно ".intel_syntax;" добавить первой строкой ну и соответсвенно на другом наречии дальше писать, например как тут. Здесь можно смотреть сами инструкции. Необязательно читать всё - тебе надо 5.5, а также часть 9 про mmx, части 10 и 11 про sse и sse2, ну и дальше если тебе нужно больше расширений. Однако многие предпочитают интринсики ассемблерным вставкам, они чуть медленей, но всеравно в разы быстрей чем без них, но я их не использовал, так что пусть ктонибудь другой ответит кто знает. |
Ответ: raycasting
За счёт побитного скролла fps увеличился с 50-ти до 62-ух (это если стенку в вплотную разглядывать... При разглядывании спрайтов fps почти вдвое меньше становится)
Код:
int d1=lineHeight * 128; |
Ответ: raycasting
Код:
int d = ( y << 8 ) - d2 + d1; |
Ответ: raycasting
Есть идеи, как в том сорсе осуществить поворот стен хотя бы кратный 45-ти градусам ?
В смысле не строго север\юг\запад\восток, а хотя бы так, как в zero tolerance на мегадрайве. |
Ответ: raycasting
В данном подходе никаких проблем нет. Главное нужно понимать что задачу можно разделить на две составляющие - первая нахождение пересечения луча со стеной в 2д, вторая уже на основе полученной длины луча мы строим слайс с учетом высоты стены. Поэтому в первой составляющей мы можем рассчитать стену как угодно, а для второй аргументами будут являться длина луча и высота стены. Так что считать только прямоугольные стены совсем не обязательно. Например мы можем рисовать произвольной кривизны линии изображающие стены и если у нас будет алгоритм, который сможет найти пересечения луча и этих линий то мы найдем длину луча, которую и передадим во вторую составляющую алгоритма. Однако не стоит забывать что в играх кроме графики есть и физика, и например рассчитывать коллизии игрока со стенами произвольной кривизны будет сложно. Я думаю самым оптимальным выбором будут стены составленные из отрезков, которые могут находиться под произвольным углом (а не только 45 градусов). Таким образом задача сводится к нахождению пересечения луча и отрезка.
Вроде когда я смотрел коды того движка, там карта задавалась прямо в коде в виде двумерного массива. С таким форматом ничего не выйдет - нужно разработать другой формат, который хранит данные о карте в форме отрезков. Возможно для удобства потребуется редактор таких карт. |
Часовой пояс GMT +4, время: 06:16. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot