Спасибо большое, я тут как раз нашел Opegl-костыль, если кому интересно, выкладываю функцию, которая рисует прямоугольник с заданными размерами, и принимающую мировые координаты в качестве аргумента.
void __fastcall TForm1::glGDIRect(double x, double y, double z) { const int fr=4; const int len=kegl*6; const int hig=kegl;
int viewport[4]; // Место для данных окна просмотра double mvmatrix[16], projmatrix[16]; // Место для матрицы трансформации double winx, winy, winz; // Место для координат проекции
double x1,y1,z1; glGetIntegerv (GL_VIEWPORT, viewport); // Извлечь текущее окно просмотра glGetDoublev (GL_MODELVIEW_MATRIX, mvmatrix); // Извлечь текущую матрицу просмотра glGetDoublev (GL_PROJECTION_MATRIX, projmatrix); // Извлечь матрицу проекции
// Определим 2D позиции 3D точки gluProject(x, y, z, mvmatrix, projmatrix, viewport, &winx, &winy, &winz); winx-=fr; winy-=fr; gluUnProject(winx, winy, 0, mvmatrix, projmatrix, viewport, &x, &y, &z); gluUnProject(winx+len, winy, 0, mvmatrix, projmatrix, viewport, &x1, &y1, &z1);
glBegin(GL_LINES); glVertex3f(x,y,z); glVertex3f(x1,y1,z1); glEnd();
gluUnProject(winx+len, winy+hig+fr, 0, mvmatrix, projmatrix, viewport, &x, &y, &z); glBegin(GL_LINES); glVertex3f(x,y,z); glVertex3f(x1,y1,z1); glEnd();
gluUnProject(winx, winy+hig+fr, 0, mvmatrix, projmatrix, viewport, &x1, &y1, &z1); glBegin(GL_LINES); glVertex3f(x,y,z); glVertex3f(x1,y1,z1); glEnd();
gluUnProject(winx, winy, 0, mvmatrix, projmatrix, viewport, &x, &y, &z); glBegin(GL_LINES); glVertex3f(x,y,z); glVertex3f(x1,y1,z1); glEnd();
}
|