Как преобразовать преобразованные координаты в мировые координаты в OpenGL? - PullRequest
0 голосов
/ 18 февраля 2010

У меня есть преобразование в Opengl, например:

glPushMatrix(); 
glTranslated(pntPos.X(), pntPos.Y(), pntPos.Z());
glRotated(dx, 1, 0, 0);
glRotated(dy, 0, 1, 0);
glRotated(dz, 0, 0, 1);

//I use this to Render a freely placeable textbox in 3d 
//space which is based on the FTGL-Toolkit [1] (for TTF support).

m_FTLayout.Render(m_wcCaption, m_iCaptionSize);
glPopMatrix();

Это работает как ожидалось.

Тем не менее, я хотел бы вычислить 3d-Boundingbox, который ограничивает мой текст в пространстве слов. Я знаю координаты этой ограничительной рамки относительно моего GL-преобразования.

Но мне сложно вычислить их мировые координаты по ним. Не могли бы вы дать мне некоторое представление о том, как получить соответствующие Мировые координаты четырех вершин в ограничительной рамке?

[1] http://sourceforge.net/projects/ftgl/

1 Ответ

2 голосов
/ 18 февраля 2010

Самый простой способ - спросить у GL, какова его текущая матрица вида модели glGetFloatv(GL_MODELVIEW_MATRIX, m), и преобразовать вершины ограничивающего прямоугольника в полученную матрицу.

             m[0]  m[4]  m[8]  m[12]     v[0]
             m[1]  m[5]  m[9]  m[13]     v[1]
     M(v) =  m[2]  m[6]  m[10] m[14]  X  v[2]
             m[3]  m[7]  m[11] m[15]     v[3]

Это даст вам однородное положение вашей вершины в пространстве вида 4 * D.

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

...