2016-08-15 6 views
0

В GLM у нас есть перегруженный оператор '*' для умножения матриц.Какая из них лучше при умножении матрицы? GLM перегруженный * оператор или использование прямых шейдеров

Мы можем сделать матричное умножение, как это с помощью этого оператора в GLM:

glm::mat4 MVP = Projection * View * Model; 
//after that pass MVP to uniform 'MVP' 

Но по-другому, мы можем передать Проекция, Вид и модель трех различных мундирах и сделать умножение в программе затенения.

GLM работает на процессоре, но шейдерные программы запускаются на GPU. Из-за архитектуры графического процессора мы можем выполнять матричные операции быстрее, чем CPU в шейдерных программах.

Но я не могу быть уверен. Какой путь быстрее?

+2

Всегда меры. Это зависит от вашего кода. – Rakete1111

+0

Спасибо, ты освещаешь темные стороны моего мозга. –

ответ

1

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

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

Всегда с умножение на ЦП было бы лучше с момента его разговора на призыв, а не раз на вершину. Если значения должны варьироваться между шейдерами, тогда необходимо выполнить умножение в шейдере.

Я думаю, что я был слишком быстр, чтобы ответить, но это может быть очень похож на вопрос Should I calculate matrices on the GPU or on the CPU?

+0

Большинство случаев? Каковы исключения? –

+0

Если у вас много матричных умножений и рендеринг только точек с разными матрицами для каждой точки, и каждая точка представляет собой один обратный вызов, умножение в методе GPU может быть быстрее, если CPU уже выполняет другие вычисления физики, что делает его узким местом для рендеринга каждого кадра. – Harish

+0

Как эффекты частиц? –