Визуализируйте набор трехмерных точек в виде прямоугольников с сохранением соотношения сторон - PullRequest
0 голосов
/ 16 июня 2020

У меня есть набор трехмерных точек, и я хочу визуализировать каждую из этих точек в виде прямоугольников (для простоты). Я хочу, чтобы эти прямоугольники имитировали поведение трехмерных объектов в том смысле, что они сохраняют соотношение сторон по отношению к камере. В основном я хочу, чтобы они делали что-то вроде этого:

enter image description here

Вот что я делаю: в вершинном шейдере я в основном ничего не делаю и просто передаю вершину вниз по конвейеру

gl_Position = vec4(vtx_position, 1.0);

В геометрическом шейдере я пытаюсь сгенерировать эти прямоугольники, проецируя входные вершины в пространство просмотра модели, а затем генерируя 4 выходные вершины с одинаковым смещением от входа и выдачи их после умножения на матрицу проекции:

uniform mat4    MV;
uniform mat4    PROJ;
uniform float   size; 


position = MV * gl_in[0].gl_Position; 

gl_Position = position;
gl_Position.xy += vec2(-size, -size);
gl_Position = PROJ  * gl_Position;  
EmitVertex();

gl_Position = position;
gl_Position.xy += vec2(-size, size);
gl_Position = PROJ  * gl_Position;  
EmitVertex();

gl_Position = position;
gl_Position.xy += vec2(size, -size);
gl_Position = PROJ  * gl_Position;  
EmitVertex();

gl_Position = position;
gl_Position.xy += vec2(size, size);
gl_Position = PROJ  * gl_Position;  
EmitVertex();

Наконец, во фрагментном шейдере я просто заливаю их цветом. Однако на выходе я получаю что-то вроде этого:

enter image description here

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

1 Ответ

0 голосов
/ 17 июня 2020

Как выяснилось, пока я искал проблему в оттенках, я также умножал размер равномерно на соотношение сторон в коде на C ++.

...