- procedure TFormClickAndMove.DrawClickAndMove;
- var elapsed: integer;
- speed: TVec;
- dist: float;
- begin
- elapsed := GetTickCount - LastTime;
- LastTime := LastTime + elapsed;
- Speed := VectorSub(Box.GetPosv, Box2.GetPosv);
- dist := VectorNormalize(Speed);
- if dist>0.1 then
- Box2.Movev(VectorScale(Speed, elapsed / 200));
- bgDrawScene;
- bgSwapBuffers;
- end;
- procedure TFormClickAndMove.PanelMouseDown(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- var wx,wy: integer;
- wz: single;
- mv: TMatrix4d;
- proj: TMatrix4d;
- vp: TVector4i;
- ox,oy,oz: double;
- begin
- wx := x;
- wy := Panel.ClientHeight - Y;
- glReadPixels(wx, wy, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @wz);
- glGetDoublev(GL_MODELVIEW_MATRIX, Addr(mv));
- glGetDoublev(GL_PROJECTION_MATRIX, Addr(proj));
- glGetIntegerv(GL_VIEWPORT, Addr(vp));
- gluUnProject(wx, wy, wz, mv, proj, vp, @ox, @oy, @oz);
- Box.SetPos(ox, 0, oz);
- end;