Здравствуйте
Хотелось бы узнать как с помошью OpenGL сделать IntelliZoom, те так преобразовывать координаты чтоб когда пользователь крутит колесико мыши изображение увеличивалось + та точка изображения над которой расположен курсор мыши постепенно сдвигалось бы в центр экрана (или удалялось и уменьшалось если крутить в другую сторону). Раньше это было сделано у меня с помощь GDI и выглядело так
procedure TForm.MouseWhellDown(MousePos: TPoint);
begin
FOrigin.x:=round(FOrigin.x-(mousepos.x-Forigin.x)*(increment-1));//increment=1.25
FOrigin.y:=round(FOrigin.y-(mousepos.y-Forigin.y)*(increment-1));
FScale:=increment*FScale;
paint;//тут перерисовывалась картинка
end;
FOrigin - начало графических координат те на эран выводилось все где то так
x:=Forigin.x+round(Fscale*x);
y:=Forigin.y+round(Fscale*y);
Lineto(x,y)
Я написал вот это — но что то не работает
procedure TEnv.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
const increment=1.25;
var
ModelViewMatrix,ProjectionMatrix:GLDouble;
Vievport:GLint;
x,y,z:GLdouble;
begin
glGetDoublev(GL_MODELVIEW_MATRIX,@ModelViewMatrix);
glGetDoublev(GL_PROJECTION_MATRIX,@ProjectionMatrix);
glGetIntegerv(GL_VIEWPORT,@Vievport);
gluUnProject(MousePos.x,MousePos.y,0,ModelViewMatrix,ProjectionMatrix,Vievport,x,y,z);
x:=-x*(increment-1);
y:=-y*(increment-1);
glTranslate(x,y,0);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glScale(increment,increment,1);
glCallList(1);
glFlush();
end;
Подскажите пожалуйста как это делается и где я ошибаюсь