Войти
ПрограммированиеФорумГрафика

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

Страницы: 1 2 3 4 529 Следующая »
#30
10:52, 8 ноя. 2014

>Это для пиписи
а на ПеКа какой ... нужно пострадать чтобы подобное провернуть?
вроде новая плойка уже не пиписи, а хэвосемьдесятшесть, у них просто должен быть мануал и для новой )

#31
11:48, 8 ноя. 2014

Hybernaculum
> Внимание, ответ.
садись - тебе 2. Иди учи шейдеры. И знай, что в DX все координаты в промежутке [-1;1] и [0;1] для z. Точка 0.0 в центре

#32
15:29, 8 ноя. 2014

war_zes
> садись - тебе 2. Иди учи шейдеры. И знай, что в DX все координаты в промежутке
> [-1;1] и [0;1] для z. Точка 0.0 в центре

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

#33
15:41, 8 ноя. 2014

что-то war_zes суровым стал. Раньше добрее был. Вот как программирование меняет людей :(

#34
19:42, 8 ноя. 2014

codingmonkey
На ПеКа эта команда называется _mm_prefetch

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

#35
20:16, 8 ноя. 2014

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.

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

#36
20:26, 8 ноя. 2014

bazhenovc
> На ПеКа эта команда называется

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

#37
16:00, 9 ноя. 2014

Стас
> Тоже 2. Как настроишь матрицу перспективы, так и будет.
Кол, чтобы не порол чушь. XY ∈ [-1;1] и Z ∈ [0;1] - захардкожено в DX. А матрица проекции применяется до клиппинга по этим диапазонам.

#38
16:07, 9 ноя. 2014

bazhenovc
> Да, потому что память намного медленнее, чем процессор. Посмотри те 2 ссылки, которые я тебе скинул.
Вот только это не значит, что dirty флаг не дает выйгрыша. Посчитать матрицу не долго, долго может быть её установить/передать дальше. В его случае матрица скорее всего идет на конвеер. Так что вместо вредных советов - лучше вообще не давать их.

#39
17:27, 9 ноя. 2014

Ок. Детально.
Есть класс Transform. В нем есть position, orientation, scale.

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

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

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

Что быстрее?

#40
19:26, 9 ноя. 2014

Dampire
быстрее будет вернуть флаг из GetMatrix и если он true - то пихать в юниформ.

bool Transform::GetMatrix(glm::mat4 m)
{
    if(dirty){
        m = Update();
        return (true);
    } 
    else return (false)
}
#41
19:45, 9 ноя. 2014

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;
}

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

#42
19:52, 9 ноя. 2014

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

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

#43
6:09, 10 ноя. 2014

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

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

#44
8:34, 10 ноя. 2014

Тесты про поможет или не поможет dirty в студию

Страницы: 1 2 3 4 529 Следующая »
ПрограммированиеФорумГрафика