Войти
ПрограммированиеФорумОбщее

Матрица LookAt (комментарии)

#0
18:59, 29 янв 2020

Матрица LookAt (комментарии)

Это сообщение сгенерировано автоматически.

#1
18:59, 29 янв 2020

Почините верстку, вся главная в этой статье.

#2
19:20, 29 янв 2020

0xc0de
Это подсказки. Кроме того ассемблер знают не все.
В чем причина вашей ереси?

#3
19:24, 29 янв 2020

Dampire
> Почините верстку, вся главная в этой статье.
>
>
Это к модераторам.

#4
19:43, 29 янв 2020

eDmk
> По вашей логике все подсказки надо удалить?

Не так. По моей логике информация должна быть упорядочена и скомпонована, а не разбросана по подсказкам. И это должен быть не тупо кусок кода для копипаста, а пояснения. В подсказках имхо должна быть специфическая информация, которую найти довольно сложно.
Представь, что будет если создать на каждую функцию из библиотеки glm отдельную подсказку.

#5
19:54, 29 янв 2020

0xc0de
> должна быть упорядочена и скомпанована
Она упорядочена, скомпонована и лежит на сайте GameDev. Модератор опубликовал.
Я не понимаю, что вам не нравится в подсказке? Почему вам другие подсказки нравятся?
Там тоже куча, на мой взгляд, глупостей, которые очевидны.
Одни считают, что надо только формулы приводить, другие считают, что без кода - не дело.
Третьим подавай чертежи с подробной докой. Я вам так скажу - не нравится - не щупай.

#6
20:08, 29 янв 2020

eDmk
> Я не понимаю, что вам не нравится в подсказке?

Не, ну если ты бы вместо того, чтобы удалять сообщения, еще бы в них вникал, то наверное понял бы, что не нравится и как твои подсказки можно улучшить. Или критика уже запрещена?

#7
20:14, 29 янв 2020

0xc0de
> Или критика уже запрещена?
А что вы хотите критиковать? Это просто готовая функция с комментариями в коде.
Я писал все сам. Время потратил. Это работа и не самая плохая. Критикуйте, если есть чего.

>вместо того, чтобы удалять сообщения
Эти сообщения не о чем. Тут чел мне на доктора намекал. Я его удалил.
Зачем хамить то?

#8
21:45, 29 янв 2020

Где что вылезло на главную? У меня всё нормально.

#9
22:08, 29 янв 2020

Mikle
wat поправил.

#10
2:40, 30 янв 2020

eDmk
> другие считают, что без кода - не дело
На таких можешь не обращать внимания, им даже если дать готовый код, они всё равно ничего не поймут и сделают всё неправильно. На гд.ру даже наглядные примеры есть.

#11
3:37, 30 янв 2020

Delfigamer
Поискал на этом сайте LookAt - первая ссылка на страницу из книги по OpenGL на английском. Вообщем ни о чем. Следующие 9 ссылок также ни о чем. 1 ссылка корректная, но нужна библиотека glu. Дальше все советуют пользоваться glm. 3 страницы ссылок в google просмотрел и везде не рабочий код.

Функция не секретная. Взял из книги Фрэнсиса Хилла OpenGL для профессионалов, но она там не готовая, а в виде формул. Написал, отладил и оптимизировал. Куча работы сделана. Все равно не нравится что-то. Не нравится - не бери. Нравится - возьми и пользуйся. Странные люди.

Не у всех анрилы и юнити стоят. Кто то и по старинке сам пишет.

#12
10:25, 30 янв 2020

заведи свой блог и пиши там, так все делают(и я тоже)
на публичных форумах не все труды принимаются, подстраивайся че

eDmk
> Кто то и по старинке сам пишет
посоветую тебе прочитать про рейтрейсинг, и посмотреть код простейших рейтрейсеров,где в том числе матрица lookAt применяется постоянно

все 3Д передвижения с клавиатуры/мышки и поворот камеры занимают пару десятков строк кода
вот все расчеты на чистом Си, весь код можно скопипастить и скомпилировать на любой ОС под любое железо (на Си добавив определений под типы vecX и все)

https://www.shadertoy.com/view/4lVXRm

#13
15:39, 30 янв 2020

Danilw
> посоветую тебе прочитать про рейтрейсинг, и посмотреть код простейших
> рейтрейсеров,где в том числе матрица lookAt применяется постоянно

struct Camera
{
    FMat mwc;
    FMat mcw;
    float utan;
    float vtan;

    static Camera Targeted(FPoint const& origin, FPoint const& target, float utan, float vtan)
    {
        FDisp forward = norm(target - origin);
        FDisp up = FDisp{ 0, 0, 1 };
        FDisp right = norm(cross(forward, up));
        FDisp down = norm(cross(forward, right));
        Camera c;
        c.mwc = FMat::basis(right, down, forward, origin);
        c.mcw = inverse(c.mwc);
        c.utan = utan;
        c.vtan = vtan;
        return c;
    }
};
void ForwardSampler::Iterate()
{
    for (int iy = height - 1; iy >= 0; --iy) {
        for (int ix = 0; ix < width; ++ix) {
            float dx;
            float dy;
            GenerateTriangle(dx);
            GenerateTriangle(dy);
            float cx = 2.0f * (ix + dx + 0.5f) / width - 1.0f;
            float cy = 1.0f - 2.0f * (iy + dy + 0.5f) / height;
            float cu = cx * camera.utan;
            float cv = cy * camera.vtan;
            TraceRequest tr;
            tr.origin = camera.mwc.origin();
            tr.dir = norm(camera.mwc * FDisp{ cu, cv, 1.0f });
            <...>
        }
    }
}
void BidirSampler::RecordContribution(FDisp dir, FDisp value)
{
    FDisp cdir = camera.mcw * dir;
    float cdx, cdy, cdz;
    cdir.unpack(cdx, cdy, cdz);
    if (cdz >= 0) {
        return;
    }
    float cu = cdx / cdz;
    float cv = cdy / cdz;
    float cx = cu / camera.utan;
    float cy = cv / camera.vtan;
    float nx = 0.5f * (1.0f + cx) * width - 0.5f;
    float ny = 0.5f * (1.0f - cy) * height - 0.5f;
    float nfx = floorf(nx);
    float nfy = floorf(ny);
    float dx = nx - nfx;
    float dy = ny - nfy;
    int ix = (int)nfx;
    int iy = (int)nfy;
    float q;
    GenerateUniform(q);
    if (q < dx) {
        ix += 1;
    }
    GenerateUniform(q);
    if (q < dy) {
        iy += 1;
    }
    RecordToFrame(ix, iy, value);
}

(сами лучи считаются в мировых координатах)

ПрограммированиеФорумОбщее

Тема в архиве.