Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Математическая библиотека для физики и графики..и.т.д !

Математическая библиотека для физики и графики..и.т.д !

Страницы: 1 2 3 4 5 6 Следующая »
werasaimonПостоялецwww24 янв. 201821:00#0
Я пишу математическую библиотеку CMath на C++ для физики , графики ,и.т.д .
Вы можете использовать эту математическую библиотеку в своих проектах. В отличии от glm в библиотеки CMath всё максимально просто , и , нет ассемблера, зато есть большинство тензорных примочек . И плюс вы может кидать какие-то пожелания что ещё можно добавить в CMath?
Короче говоря всего чего не хватает я допишу по вашему желанию. Надеюсь таким образом мы напишем математическую библиотеку под все нужды. И в первую очередь библиотека нужна для обучение.
А для серьёзных проектов есть glm!

P.S: Если вы обнаружите какие-то ошибки в CMath, дайте мне знать пожалуйста ?

Source: C/C++ :: https://github.com/werasaimon/CMath

/A\Постоялецwww24 янв. 201821:39#1
static const T  gTwoPi = (T ) atan(1.0f) * 8.0f;

лучше писать atan(T(1)) * T(8) чтоб все вычисления были с одним типом.
#define SIMDSQRT12      float(0.7071067811865475244008443621048490)

сколько знаков может хранить float?

Как-то маловато кода для математической библиотеки)

werasaimon
> И плюс вы может кидать какие-то пожелания что ещё можно добавить в CMath?
Значения с размерностями, то есть чтоб считать 6м / 3с = 2м/с
2д формы: прямоугольник, круг, линия, треугольник
3д формы: axis aligned bounding box, object oriented box, sphere, ray, ...
обнаружение пересечений, отсечение по фрустуру хотябы для простых форм

werasaimonПостоялецwww24 янв. 201822:23#2
Misanthrope
> зачем?
Ну вопервых, все мат-библиотеки очень много чего игнорируют.
Я же хочу написать математику с большенством тензорных примочек. Под все случаи жызни ! Чтоб не дублировать код!

/A\
> Значения с размерностями, то есть чтоб считать 6м / 3с = 2м/с
> 2д формы: прямоугольник, круг, линия, треугольник
> 3д формы: axis aligned bounding box, object oriented box, sphere, ray, ...
> обнаружение пересечений, отсечение по фрустуру хотябы для простых форм
Поверх этой библиотеки пишу эщё одну библиотеку где будут большенство соврименых  геометрических алгоритмов. Clliping, Intersection point и.т.д . Также там будут 2D , 3D , 4D формы разних видовь. Как только так сразу ! В этой библиотеки я хочу средоточиться именно на базовой тензорной математики !


/A\
>
> лучше писать atan(T(1)) * T(8) чтоб все вычисления были с одним типом.
Спасибо . Обязательно исправлю  !

/A\
> Как-то маловато кода для математической библиотеки)
Кода мало , а функционал много ! В этом и эсть суть CMath!
Видь идеальный код , это код которого нет , а всё замечательно  роботает!


P.S: найдёте ещё ошыбки в коде обезательно сообщайте об этом инциденте? Спасибо за внимание!

Правка: 24 янв. 2018 22:26

wawanПостоялецwww24 янв. 201822:46#3
Rand<int>( 10 )  == 0

в чем смысл функций Pi и TwoPi
не нужно в векторах rgb поля, т.к. порядок R B может быть разный принят, например он разный в GL и DX

вместо static const rpVector4D<T> IDENTITY; лучше использовать статичные функции
static rpVector4D<T> IDENTITY() { return ... }
иначе потом гдето в коде можешь написать так и получить мусор в значении
static rpVector4D< float > g_CameraPos = rpVector4D< float >::IDENTITY;
а можешь и не получить, как повезет
а так всегда будет ок -
static rpVector4D< float > g_CameraPos = rpVector4D< float >::IDENTITY();

я почему-то думал что текстурные координаты называются UVW

углы в Sin Cos передаются в радианах, а в Rotate в градусах , надо бы определится

часть функций начинается с маленькой буквы, а часть с большой, тоже разброд и шатания

будет стопицот варнингов про неявную конвертацию double во float

для чего const rpQuaternion<T>& lhs = *this;

Правка: 24 янв. 2018 23:13

ShadowTeologПостоялецwww24 янв. 201823:26#4
берешь вот это
https://github.com/g-truc/glm
жмешь кнопочку fork и дополняешь в свое удовольствие чем тебе угодно. Если выйдет чего достойного, кинь pull request основному проекту. Так работает Open Source.
А "совершенно новый" велосипед с квадратными колесами написанный с нуля, и нафиг никому не нужен, поскольку требует нескольких лет работы нормального дяди до текущего функционала имеющихся библиотек.
asvpПостоялецwww24 янв. 201823:33#5
werasaimon
> Вы можете использовать эту математическую библиотеку в своих проектах.
Нет.
Всё сырое.

Так для примера:

void setToIdentity()
{
   for (int i = 0; i < 16; i++)
      mData[i] = (i % 5) ? 0 : 1;
}

void setToZero()
{
   for (int i = 0; i < 16; i++)
      mData[i] = 0;
}

Обязательно делать через циклы?

Для начала посмотри хотя бы как другие либы написаны. Скачай какой-нить двиг и посмотри реализацию математической части.

asvpПостоялецwww24 янв. 201823:34#6
> берешь вот это
> https://github.com/g-truc/glm
Ну вот и примерчик для изучения.

> А "совершенно новый" велосипед с квадратными колесами написанный с нуля, и
> нафиг никому не нужен, поскольку требует нескольких лет работы нормального дяди
> до текущего функционала имеющихся библиотек.
+100500

denesikПостоялецwww25 янв. 20180:18#7
    const T & operator[](int n) const
    {
        assert(n >= 0 && n <= 3);
        if (0 == n)
            return x;
        else if (1 == n)
            return y;
        else if (2 == n)
            return z;
        else
            return w;
    }

Без комментариев

Daniil PetrovПостоялецwww25 янв. 20184:17#8
werasaimon
> И в первую очередь библиотека нужна для обучение. А для серьёзных проектов есть glm!
Все уроки и примеры по OGL 3.3 и 4.x для новичков и среднячков идут на glm, поэтому проще изначально изучать его и не страдать муйнёй :)))

Правка: 25 янв. 2018 4:18

AndreyПостоялецwww25 янв. 20188:46#9
werasaimon
Добавь работу со сплайнами.
/A\Постоялецwww25 янв. 201820:09#10
asvp
> Обязательно делать через циклы?
компиляторы давно научились разворачивать циклы
serpinfПостоялецwww25 янв. 201820:22#11
/A\
> компиляторы давно научились разворачивать циклы
Только не все и не всегда...
werasaimonПостоялецwww25 янв. 201821:18#12

denesik
> const T & operator[](int n) const
> {
> assert(n >= 0 && n <= 3);
> if (0 == n)
> return x;
> else if (1 == n)
> return y;
> else if (2 == n)
> return z;
> else
> return w;
> }
> Без комментариев
А что не так ? Всё же правильно !

ShadowTeolog
> А "совершенно новый" велосипед с квадратными колесами написанный с нуля, и
> нафиг никому не нужен, поскольку требует нескольких лет работы нормального дяди
> до текущего функционала имеющихся библиотек.
Я и есть тот дядя который может довести всю матиматику до ума .Так как я хорошо знаю математику ! Но програмирую я так себе , поетому в коде много артефактов!

wawan
> вместо static const rpVector4D<T> IDENTITY; лучше использовать статичные
> функции
> static rpVector4D<T> IDENTITY() { return ... }
> иначе потом гдето в коде можешь написать так и получить мусор в значении
> static rpVector4D< float > g_CameraPos = rpVector4D< float >::IDENTITY;
> а можешь и не получить, как повезет
> а так всегда будет ок -
> static rpVector4D< float > g_CameraPos = rpVector4D< float >::IDENTITY();
>
> я почему-то думал что текстурные координаты называются UVW
>
> углы в Sin Cos передаются в радианах, а в Rotate в градусах , надо бы
> определится
>
> часть функций начинается с маленькой буквы, а часть с большой, тоже разброд и
> шатания
>
> будет стопицот варнингов про неявную конвертацию double во float
>
> для чего const rpQuaternion<T>& lhs = *this;
Большое спасибо. Обязательно исправлю! А как называеться четвёртая текстурная координата  (UVW?)
P.S: расчёт идёт всегда в радиянах!


asvp
> Нет.
> Всё сырое.
> Так для примера:
>
> void setToIdentity()
> {
> for (int i = 0; i < 16; i++)
> mData[i] = (i % 5) ? 0 : 1;
> }
>
> void setToZero()
> {
> for (int i = 0; i < 16; i++)
> mData[i] = 0;
> }
> Обязательно делать через циклы?
>
> Для начала посмотри хотя бы как другие либы написаны. Скачай какой-нить двиг и
> посмотри реализацию математической части.
Извиняюсь тупанул. Исправлю !


Daniil Petrov
> Все уроки и примеры по OGL 3.3 и 4.x для новичков и среднячков идут на glm,
> поэтому проще изначально изучать его и не страдать муйнёй :)))
Для  релятивистской механики  glm совершенно бесполезна .
И glm игнорирует большенство тензорных примочек . В glm даже елементарной диады нету !
CMath будет более полной с точки зрения тензорного анализа !

Andrey
> Добавь работу со сплайнами
werasaimon
> Поверх этой библиотеки пишу эщё одну библиотеку где будут большенство
> соврименых  геометрических алгоритмов. Clliping, Intersection point и.т.д .
> Также там будут 2D , 3D , 4D формы разних видовь. Как только так сразу ! В этой
> библиотеки я хочу средоточиться именно на базовой тензорной математики !
В том числе и робота со сплайнами!


P.S: "Для самых умных" эта математика для общего назначения ,
то бишь в ней есть и комплексные числа, и, тензорныйе примочки , и , кватернионы , октонионы и.т.д ! glm != CMath!

//---------------------- new  --------------------------/
В CMath буду добавлять октонионы , а вот на счёт седенионов не знаю стоит ли их добавлять?Уж не очень хочеться делать матрицу 12×12!


P.S : Если кто найдёт ещё какие-то ошыбки , дайте знать ?

Правка: 26 янв. 2018 0:47

werasaimonПостоялецwww25 янв. 201822:11#13
ShadowTeolog
> А "совершенно новый" велосипед с квадратными колесами написанный с нуля, и
> нафиг никому не нужен, поскольку требует нескольких лет работы нормального дяди
> до текущего функционала имеющихся библиотек.
Функционал CMath уже больше чем в glm, если во внимания брать только классы которые эсть в CMath! А я как матиматик могу сказать что для тензорного анализа glm вообще не годится . Ну ей  это и не нужно, так эта библиотека для графики , а не для тензорного анализа !

Правка: 25 янв. 2018 22:16

/A\Постоялецwww25 янв. 201822:44#14
werasaimon
Без юнит тестов этой математической библиотекой никто не будет пользоваться кроме тебя.
Страницы: 1 2 3 4 5 6 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр