Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / OpenGL Вопросы (3 стр)

OpenGL Вопросы (3 стр)

Поделиться

Страницы: 1 2 3 4 ... 12 ... 21 22 23 Следующая

codingmonkeyПостоялецwww8 ноя. 201410:52#30
>Это для пиписи
а на ПеКа какой ... нужно пострадать чтобы подобное провернуть?
вроде новая плойка уже не пиписи, а хэвосемьдесятшесть, у них просто должен быть мануал и для новой )
war_zesПостоялецwww8 ноя. 201411:48#31
Hybernaculum
> Внимание, ответ.
садись - тебе 2. Иди учи шейдеры. И знай, что в DX все координаты в промежутке [-1;1] и [0;1] для z. Точка 0.0 в центре
СтасПостоялецwww8 ноя. 201415:29#32
war_zes
> садись - тебе 2. Иди учи шейдеры. И знай, что в DX все координаты в промежутке
> [-1;1] и [0;1] для z. Точка 0.0 в центре

Тоже 2. Как настроишь матрицу перспективы, так и будет.

static_castПостоялецwww8 ноя. 201415:41#33
что-то war_zes суровым стал. Раньше добрее был. Вот как программирование меняет людей :(
bazhenovcУдалёнwww8 ноя. 201419:42#34
codingmonkey
На ПеКа эта команда называется _mm_prefetch

Ещё полезно почитать про _mm_stream_pi/ps/sd/ss; _mm_sfence

Правка: 8 ноя. 2014 19:47

codingmonkeyПостоялецwww8 ноя. 201420:16#35
bazhenovc
Вав, надо же это возможно и на ПеКа, спс за инфу )
А вообще я тут несколько посвятился 5 минут назад и выяснил что бабушка на двое сказала и надо копать тему: Lazy Evaluation vs data-oriented optimizations
...you're always able to move scene nodes and request their updated world transforms any time, which are lazy-evaluated as necessary. An optimization-focused engine might calculate the world transforms once per frame within a tightly optimized loop, in which case the updated world transforms would not be immediately available.

То что - лень это первый друг человека и его двигатель это понятно, а вот с оптимизациями сложно как-то получается.

innuendoПостоялецwww8 ноя. 201420:26#36
bazhenovc
> На ПеКа эта команда называется

У amd есть ещё своя штука

MrShoorУчастникwww9 ноя. 201416:00#37
Стас
> Тоже 2. Как настроишь матрицу перспективы, так и будет.
Кол, чтобы не порол чушь. XY ∈ [-1;1] и Z ∈ [0;1] - захардкожено в DX. А матрица проекции применяется до клиппинга по этим диапазонам.
MrShoorУчастникwww9 ноя. 201416:07#38
bazhenovc
> Да, потому что память намного медленнее, чем процессор. Посмотри те 2 ссылки, которые я тебе скинул.
Вот только это не значит, что dirty флаг не дает выйгрыша. Посчитать матрицу не долго, долго может быть её установить/передать дальше. В его случае матрица скорее всего идет на конвеер. Так что вместо вредных советов - лучше вообще не давать их.
DampireПостоялецwww9 ноя. 201417:27#39
Ок. Детально.
Есть класс Transform. В нем есть position, orientation, scale.

Вариант с dirty:
Есть переменная matrix, куда мы пишем данные при апдейте матрицы.

glm::mat4 Transform::GetMatrix()
{
    if(dirty)
        Update()

    return matrix;
}
Вариант без dirty:
glm::mat4 Transform::GetMatrix()
{
     return // типа считаю матрицу
}
Дальше при рендере вызывается GetMatrix(), перемножается с View и Projection и пхается в юниформ. Все.

Что быстрее?

MrShoorУчастникwww9 ноя. 201419:26#40
Dampire
быстрее будет вернуть флаг из GetMatrix и если он true - то пихать в юниформ.
bool Transform::GetMatrix(glm::mat4 m)
{
    if(dirty){
        m = Update();
        return (true);
    } 
    else return (false)
}
СтасПостоялецwww9 ноя. 201419:45#41
MrShoor
Что и где ты собрался клипать? С какого бока ты сюда отсечение приплел? Clipping(computer graphics)

D3DXMatrixOrthoOffCenterLH

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

D3DXMatrixPerspectiveOffCenterLH

тоже самое для перспективы.

Поэтому говорить о системе координат по умолчанию, по меньшей мере не корректно.

Во вторых.


MrShoor
> bool Transform::GetMatrix(glm::mat4 m)
> {
> if(dirty){
> m = Update();
> return (true);
> }
> else return (false)
> }

Вместо одного условия ты создал два... молодец... Хорошая оптимизация, был один кеш мисс, стало два... крут.
Если ты возвращаешь флаг true предполагается, что ты собрался его проверять. Если же ты не собираешься его проверять, то вообще не понятно на кой его возвращать.

Dampire
> glm::mat4 Transform::GetMatrix()
> {
> if(dirty)
> Update()
>
> return matrix;
> }

Вообще твой вариант правильнее было бы написать:

const glm::mat4 & Transform::GetMatrix()
{
    if(dirty)
        Update()

    return matrix;
}

Вообще  нужно смотреть, в комплексе что и как ты сделал, сказать как правильно сложно.

Правка: 9 ноя. 2014 20:47

СтасПостоялецwww9 ноя. 201419:52#42
Dampire
То что сказал bazhenovc в принципе правда, но не целиком, дело в том что это довольно сложная история, и пользоваться этим нужно правильно, иначе вместо ускорения ты получишь слайд шоу. 

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

MrShoorУчастникwww10 ноя. 20146:09#43
Стас
D3DX - это не по умолчанию.
> Поэтому говорить о системе координат по умолчанию, по меньшей мере не
> корректно.
Открой для себя шейдеры наконец. В них можно вообще на матрицу не умножать, а работать сразу в пространстве [-1;1] [0;1].

> Вместо одного условия ты создал два... молодец... Хорошая оптимизация, был один кеш мисс, стало два... крут.
> Если ты возвращаешь флаг true предполагается, что ты собрался его проверять. Если же ты не собираешься его проверять, то вообще не понятно на кой его возвращать.
Да хоть 8 кешмиссов, главное, чтобы этот флаг позволил мне избежать установки на конвеер.

Правка: 10 ноя. 2014 6:09

innuendoПостоялецwww10 ноя. 20148:34#44
Тесты про поможет или не поможет dirty в студию

Страницы: 1 2 3 4 ... 12 ... 21 22 23 Следующая

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

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