OpenGL в Delphi

       

Для простейших задач перевода координат может использоваться gluUnProject




Обработка щелчка выглядит следующим образом:

procedure TfrmGL.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Viewport : Array [0..3] of GLInt; // область вывода
mvMatrix, // матрица модели
ProjMatrix : Array f0..15] of GLDouble; // матрица проекций
RealY : GLint; // OpenGL у - координата
wx, wy, wz : GLdouble; // возвращаемые мировые x, у, z координаты
Zval : GLfloat; // оконная z - координата
Begin
glGetIntegerv (GL_VIEWPORT, @Viewport); // матрица области вывода
// заполняем массивы матриц
glGetDoublev (GL_MODELVIEW_MATRIX, @mvMatrix);
glGetDoublev (GL_PROJECTION_MATRIX, @ProjMatrix) ; // viewport[3] - высота окна в пикселах, соответствует Height
RealY := viewport[3] - Y - 1;
Caption := 'Координаты курсора ' + IntToStr (x) + ' ' +
FloatToStr (RealY);
glReadPixels(X, RealY, 1, I, GL_DEPTH_COMPONENT, GL_FLOAT, @Zval);
gluUnProject (X, RealY, Zval,
@mvMatrix, @ProjMatrix, @Viewport, wx, wy, wz) ;
ShowMessage ('Мировые координаты для z=' + FloatToStr(Zval)
+ ' : ' + chr (13) + '(' + FloatToStr(wx)
+ '; ' + FloatToStr(wy) + '; '
+ FloatToStr(wz) + ')');
end;

Команда gluUnProject требует задания трех оконных координат - X, Y, Z Третья координата здесь - значение буфера глубины соответствующего пиксела, для получения которого пользуемся командой glReadPixels, указав в качестве аргументов координаты пиксела и задав размер области 1x1.
Обратите внимание, что при нажатии кнопки на пустом месте значение буфера глубины максимально и равно единице, для точек, наименее удаленных от точки зрения, значение буфера глубины минимальное
Команда gluUnProject имеет парную команду - gluProject, переводящую координаты объекта в оконные координаты Для ознакомления с этой командой предназначен проект из подкаталога Ех21 Действие приложения заключается в том, что в пространстве по кругу перемещается точка, а ее оконные координаты непрерывно выводятся в компоненте класса TMemo в правой части экрана (рис 6.11).
Для проверки достоверности результатов в заголовке окна выводятся координаты курсора.



Содержание раздела