Общим, у меня все работает на -O1 — goo.gl/XVhbOJ
Я ж не говорю что оно работает просто так. Constexpr тоже готовить нужно уметь. Вот для сравнения ваш код goo.gl/bR14sW
если просто, то 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). Куда больше проблем в привязке изображения к костям и что бы это нормально выглядело, солвер риггинга.
То что вы описали в коментарии называется «инверсная кинематика». И это не имеет отношения к самой анимации, это куда больше к ее созданию или моделированию тег же рагдолов.
Я ж не говорю что оно работает просто так. Constexpr тоже готовить нужно уметь. Вот для сравнения ваш код goo.gl/bR14sW
constexpr auto a = fact(8);
cout << a <<'\n';
вместо
cout << fact(8); <<'\n';
?
— на переменных
— на функциях
Если в выражении используются только constexpr переменные, с constexpr фуркциями и литералы, то это выражение может быть вычислено в компайл тайме.
Любое такое выражение можно исползьвать там где нужна константа компиляции.
Так же функции constexpr можно использовать с динамическими данными, т.е. это никак не деградирует рантайм полезность библиотеки.
Да, еще плюс в том что функции помеченые constexpr так же работают и на динамических данных. Т.е. в рантайме те же функции будут так же работать.
Смысл первого моего коментария в том что было бы интересно сделать полноценную компайл-тайм адекватную библиотеку матриц для задачи туториала.
Библиотека линейной алгебры которая обязана все считать на компиляции мягко говоря, бесполезна ведь.
Да и вообще, меньше слов, больше кода — ideone.com/wRz8nr
Этот мини класс можно использовать и для генерации компайл-тайм констант и для любых рантайм данных.
И это очень круто, если вместо const можно написать constexpr, тогда можно вовсе не парися о оптимизациях преде компиляцией, считая самому матрицы, и быть увереным что компилятор сам сложит выражения типа единичная матрица*перенос*поворот*инверс(перенос) в одну матрицу еще на компиляции.
Например, вы ведь не разрабатываете свой формат сжатия картинок, потому что не знаете как работает png. Если вы это сделаете вдруг, то вам придется или писать и поддерживать конверторы, или писать свой графический редактор, что занимает время, и, собственно не то что мы (я) хотим делать — писать игры.
То есть Вы хотите сделать то что уже все давно сделали, но при этом вместо того что бы разобраться в предметной области хотите написать свой велосипед. Анимации со скелетом невероятно простая тема. Каждый студент с семестром линейной алгебры и теормеха сможет написать прямую кинематику а и обратную. Инверсная кинематика это не метод. Это задача. Методом решения может быть, напрмер, матрици Якоби. Про вообще не понял о чем Вы.
Больше всего удивление вызывает нежелание пользоваться инструментами. Как я уже говорил, написать скелетную движек скелетной анимации может каждый на коленке. Это элементарная задача. Даже оптимизировать его не сложно. Это делали десятки раз. Что есть не элементарной задачей — это делать анимации. Для этого люди придумали множество инструментов. Например, тот же блендер. Есть специализированные для 2Д, такие как Spine или Spriter. Да тот же флеш! Ну общим, ваш код може быть интересен только в академических целях. Практическое его применение может быть только во вред.