Pull to refresh
30
0
Vlad Svoka @Shchvova

GameDev

Send message
Общим, у меня все работает на -O1 — goo.gl/XVhbOJ
Я ж не говорю что оно работает просто так. Constexpr тоже готовить нужно уметь. Вот для сравнения ваш код goo.gl/bR14sW
А что будет если написать
constexpr auto a = fact(8);
cout << a <<'\n';
вместо
cout << fact(8); <<'\n';
?
если просто, то constexpr бывает в двух ипостасях:
— на переменных
— на функциях
Если в выражении используются только constexpr переменные, с constexpr фуркциями и литералы, то это выражение может быть вычислено в компайл тайме.
Любое такое выражение можно исползьвать там где нужна константа компиляции.
Так же функции constexpr можно использовать с динамическими данными, т.е. это никак не деградирует рантайм полезность библиотеки.
std::integral_constant это вообще тип, если что… Я окончательно перестал понимать что вы хотите сказать. Вам хочется что бы обязательно счисления проводились в компайл тайме? Ну тогда да, вы можете это зафорсить обвернув в этот тип, но все использованные функции Обязаны быть constexpr. Это не или/или.
Уф… Блин, походу тут какое-то недоразумение. constexpr показывает что функцию/объект можно использовать в качестве компайл тайм констант. Учитывая специфики современных компляторов — они сделают все что возможно в компайл тайме. То есть когда вы пишите int x = 5+4; вы ведь правда считаете что компилятор постчитает выражение 5+4 и вам не нужно прибавлять их самому? Когда делаете объекты и функции constexpr, это показывает компилятору так же что ваш объект можно так оптимизировать. Конечно, если полностью отключить оптимизацию он этого не сделает.

Да, еще плюс в том что функции помеченые constexpr так же работают и на динамических данных. Т.е. в рантайме те же функции будут так же работать.
Снова не по теме. Это кусок кода который я написал скопировал из другого места, где std::move нужен был. Он демострирует НЕ std::move, который здесь вообще ничего не делает, и я это знаю.
Смысл первого моего коментария в том что было бы интересно сделать полноценную компайл-тайм адекватную библиотеку матриц для задачи туториала.
При чем тут вообще это? constexpr показывает что счисление возможно провести на этапе компиляции. Но это так же значит что функции помеченые constexpr можно вызывать и в коде не с constexpr выражения.
Библиотека линейной алгебры которая обязана все считать на компиляции мягко говоря, бесполезна ведь.
Да и вообще, меньше слов, больше кода — ideone.com/wRz8nr
Этот мини класс можно использовать и для генерации компайл-тайм констант и для любых рантайм данных.
В C++14 в constexpr можно делать конструкторы и нормальные функции (в 11 только однострочные).
И это очень круто, если вместо const можно написать constexpr, тогда можно вовсе не парися о оптимизациях преде компиляцией, считая самому матрицы, и быть увереным что компилятор сам сложит выражения типа единичная матрица*перенос*поворот*инверс(перенос) в одну матрицу еще на компиляции.
Согласен. Утверждать что доступ к выделенному необнуленному буферу и доступ к почти любому участку памяти это одно и то же как то странно.
Еще бы сделать демку и в веб плеер ее :)
Рейтрейсеры вообще лего писать ведь. У них проблема спроизводительностью, что довольно плохо, если скажем, игры делаем.
Прикольно. А как это сделано? Рейтрейсер рендерер элементарно рисует отражения/тени. Я не знаю как такое делать шейдерами.
«line sweeping» я бы перевел как «проход отрезком». Тут sweeping это в главном своем значении «wide in range or effect». Вообще я бы не стал ставить какое-то русское слово в перевод sweep/sweeping, так как языки не совпадают вовсе. Спасибо за статьи! Очень интересно подалать все как в молодости :)
Лучше сделайте это, потому что иначе вовсе антиклимакс какой-то :) Просто дайте ссылку на файлик с обьектом головы, и домашку его отрендерить.
Когда был студентом всегда представлял это как еще одно измерение нашего же мира, которое мы не можем осязать. Вроде так хорошо получалось.
Теормех это не факультет, это предмет (теоретическая механика), начало которого рассказывает о том как рассчитывать кинематику. Насколько я знаю его учат во всех технических ВУЗах. В нужной Вам части очень легко разобраться, хоте, мне тяжело об этом судить, так я ее давно знаю, и она уже отошла на один план с умножением и прочими простыми задачами над которыми не приходится задумываться. Просто хочу предупредить, что написать ее самому это просто. Куда сложнее — именно делать анимации. Т.е. получать ключевые позиции, и прочее. Не думаю что набивать цифры руками это вариант. Есть множество инструментариев для этого. Когда Вы пишите полностью свою систему, вы отказываетесь от этих инструментов, ничего собственно не преобретая.
Например, вы ведь не разрабатываете свой формат сжатия картинок, потому что не знаете как работает png. Если вы это сделаете вдруг, то вам придется или писать и поддерживать конверторы, или писать свой графический редактор, что занимает время, и, собственно не то что мы (я) хотим делать — писать игры.
Мне остается только поднять брови на такой ответ.
То есть Вы хотите сделать то что уже все давно сделали, но при этом вместо того что бы разобраться в предметной области хотите написать свой велосипед. Анимации со скелетом невероятно простая тема. Каждый студент с семестром линейной алгебры и теормеха сможет написать прямую кинематику а и обратную. Инверсная кинематика это не метод. Это задача. Методом решения может быть, напрмер, матрици Якоби. Про вообще не понял о чем Вы.
Больше всего удивление вызывает нежелание пользоваться инструментами. Как я уже говорил, написать скелетную движек скелетной анимации может каждый на коленке. Это элементарная задача. Даже оптимизировать его не сложно. Это делали десятки раз. Что есть не элементарной задачей — это делать анимации. Для этого люди придумали множество инструментов. Например, тот же блендер. Есть специализированные для 2Д, такие как Spine или Spriter. Да тот же флеш! Ну общим, ваш код може быть интересен только в академических целях. Практическое его применение может быть только во вред.
Не сильно понимаю в чем смысл. В скелетной анимации никогда не было проблемой сделать собственно кости, скелет или фреймы (forward kinematics). Куда больше проблем в привязке изображения к костям и что бы это нормально выглядело, солвер риггинга.
То что вы описали в коментарии называется «инверсная кинематика». И это не имеет отношения к самой анимации, это куда больше к ее созданию или моделированию тег же рагдолов.

Information

Rating
Does not participate
Location
Toronto, Ontario, Канада
Registered
Activity