В этой заметке хочу рассказать о рисовании 2д окружности всегда ориентированной к наблюдателю. Рендер в МоБи на OpenGL, так что заметка носит более общий характер и не привязана к указанному программному продукту.

Окружность рисуется так

1
2
3
4
5
6
7
X(t) = (x, y, z),

x = r * sin(t)

y = r * cos(t)

z = 0.0

где r — радиус, а t — параметр лежит в диапазоне от 0 до 2 PI

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

1
2
3
4
5
6
7
FBMatrix m;

m = pCamera->GetMatrix(kFBModelView);

FBVector3d rot;

FBMatrixToRotation(rot, m);

где pCamera — указатель на объект камеры в сцене

FBMatrixToRotation — функция МоБи для перевода матрицы в углы ейлера

 

Теперь если собрать это воедино,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
glPushMatrix();

{

glRotatef( -rot[2], 1.0f, 0.0f, 0.0f );

glRotatef( -rot[1], 0.0f, 1.0f, 0.0f );

glRotatef( -rot[0], 0.0f, 0.0f, 1.0f );

//

//-- рисование окружности

//

}

glPopMatrix();
МоБи подсказка: рисование окружности-биллборда
Метки:            

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *