void BulletOpenGLApplication::Keyboard(unsigned char key, int x, int y) {
	// This function is called by FreeGLUT whenever
	// generic keys are pressed down.
	switch(key) {
		// 'z' zooms in
	case 'z': ZoomCamera(+CAMERA_STEP_SIZE); break;
		// 'x' zoom out
	case 'x': ZoomCamera(-CAMERA_STEP_SIZE); break;
	case 'w':
		// toggle wireframe debug drawing
		m_pDebugDrawer->ToggleDebugFlag(btIDebugDraw::DBG_DrawWireframe);
		break;

	case 'b':
		// toggle AABB debug drawing
		m_pDebugDrawer->ToggleDebugFlag(btIDebugDraw::DBG_DrawAabb);
		break;
 	case 'd':
 		{
 			// create a temp object to store the raycast result
 			RayResult result;
 			// perform the raycast
 			if (!Raycast(m_cameraPosition, GetPickingRay(x, y), result))
 				return; // return if the test failed
 			// destroy the corresponding game object
 			DestroyGameObject(result.pBody);
 			break;
 		}
	}
}
void BulletOpenGLApplication::Keyboard(unsigned char key, int x, int y) {
	// This function is called by FreeGLUT whenever
	// generic keys are pressed down.
	switch(key) {
		// 'z' zooms in
	case 'z': ZoomCamera(+CAMERA_STEP_SIZE); break;
		// 'x' zoom out
	case 'x': ZoomCamera(-CAMERA_STEP_SIZE); break;
	}
}
void
NavigateCurve::OnTimer(void)
{
    vtkRenderWindowInteractor *rwi = Interactor;

    int Pos[2];
    rwi->GetEventPosition(Pos);

    switch (State)
    {
      case VTKIS_PAN:
        PanCamera(Pos[0], Pos[1]);

        rwi->CreateTimer(VTKI_TIMER_UPDATE);
        break;

      case VTKIS_DOLLY:
        ZoomCamera(Pos[0], Pos[1]);

        rwi->CreateTimer(VTKI_TIMER_UPDATE);
        break;

      default:
        break;
    }
}
void
NavigateAxisArray::OnTimer(void)
{
    vtkRenderWindowInteractor *rwi = Interactor;

    int Pos[2];
    rwi->GetEventPosition(Pos);

    VisWindow *win = proxy;
    shouldSnap = win->GetInteractorAtts()->GetAxisArraySnap();

    switch (State)
    {
      case VTKIS_PAN:
        PanCamera(Pos[0], Pos[1], shouldSnap);

        rwi->CreateTimer(VTKI_TIMER_UPDATE);
        break;

      case VTKIS_DOLLY:
        ZoomCamera(Pos[0], Pos[1]);

        rwi->CreateTimer(VTKI_TIMER_UPDATE);
        break;

      default:
        break;
    }
}
Exemple #5
0
/**
 * Mouse active motion callback (when button is pressed)
 */
void MouseMotionCallback(int x, int y)
{
    if (gPreviousMouseX >= 0 && gPreviousMouseY >= 0)
    {
        //compute delta
        float deltaX = x-gPreviousMouseX;
        float deltaY = y-gPreviousMouseY;
        gPreviousMouseX = x;
        gPreviousMouseY = y;
        
        //orbit, strafe, or zoom
        if (gMouseButton == GLUT_LEFT_BUTTON)
        {
            RotateCamera(deltaX, deltaY);
        }
        else if (gMouseButton == GLUT_MIDDLE_BUTTON)
        {
            StrafeCamera(deltaX, deltaY);
        }
        else if (gMouseButton == GLUT_RIGHT_BUTTON)
        {
            ZoomCamera(deltaY);
        }
        
    } else
    {
        gPreviousMouseX = x;
        gPreviousMouseY = y;
    }
    
}
//摄像机操作方式
void CRegionCamera::TransformCamer(long lOperaMode,long lParam1,long lParam2,long lParam3)
{
	switch(lOperaMode)
	{
		//震动
	case 1:
		ShockCamera((float)lParam1,lParam2,lParam3);
		break;
		//平滑移动
	case 2:
		MoveCamera((float)lParam1,(float)lParam2,(float)lParam3);
		break;
		//水平旋转
	case 3:
		RotateCameraH((float)lParam1,lParam2);
		break;
		//垂直旋转
	case 4:
		RotateCameraV((float)lParam1,lParam2);
		break;
		//距离变化
	case 5:
		ZoomCamera((float)lParam1,(float)lParam2);
		break;
		//恢复
	case 6:
		ResumeCamera();
		break;
	}
}
void
NavigateCurve::OnMouseWheelBackward()
{
    StartZoom();
    ZoomCamera(MotionFactor * -0.2 * this->MouseWheelMotionFactor);
    EndZoom();
    IssueViewCallback(true);
}
void
ZoomCurve::EndLeftButtonAction()
{
    EndRubberBand();
    ZoomCamera();
    EndZoom();
    IssueViewCallback();
}
Exemple #9
0
Gource::Gource(std::string logfile) {

    this->logfile = logfile;

    commitlog = 0;

    fontlarge = fontmanager.grab("FreeSans.ttf", 42);
    fontlarge.dropShadow(true);
    fontlarge.roundCoordinates(true);

    fontmedium = fontmanager.grab("FreeSans.ttf", 16);
    fontmedium.dropShadow(true);
    fontmedium.roundCoordinates(false);

    font = fontmanager.grab("FreeSans.ttf", 14);
    font.dropShadow(true);
    font.roundCoordinates(true);

    start_position = 0.0;

    paused     = false;
    first_read = true;
    draw_loading = true;

    mousemoved = false;
    mouseclicked = false;

    splash = -1.0;

    debug = false;
    trace_debug = false;

    dirNodeTree = 0;
    userTree = 0;

    selectedFile = 0;
    hoverFile = 0;
    selectedUser = 0;
    hoverUser = 0;

    date_x_offset = 0;

    camera = ZoomCamera(vec3f(0,0, -300), vec3f(0.0, 0.0, 0.0), 250.0, 5000.0);
    setCameraMode(false);

    root = 0;

    background_colour = vec3f(0.25, 0.25, 0.25);

    findUserImages();

    reset();
}
Exemple #10
0
 void UpdateCamera(Camera* camera) override 
 {
     switch (_mode)
     {
     case Mode::rotate:
     {
         RotateCamera(camera);
     }
         break;
     case Mode::zoom:
         ZoomCamera(camera);
         break;
     default:
         break;
     }
 }
void
NavigateCurve::ZoomCamera(const int x, const int y)
{
    if (OldY != y)
    {
        //
        // Calculate the zoom factor.
        //
        double dyf = MotionFactor * (double)(y - OldY) /
                         (double)(Center[1]);

        ZoomCamera(dyf);

        OldX = x;
        OldY = y;
    }
}
Exemple #12
0
void
Zoom3D::EndLeftButtonAction()
{
    // We must issue the proper end state for either pan or rotate
    // depending on whether the shift or ctrl button was pushed.  The
    // shift left mouse pan action matches the Navigate2D/3D modes.
    if (shiftPressed)
    {
        EndBoundingBox();
        EndPan();
        shiftPressed = false;
    }
    else
    {
        EndRubberBand();
        ZoomCamera();
        EndZoom();
    }

    EnableSpinMode();

    IssueViewCallback();
}
void
Zoom3D::EndLeftButtonAction()
{
    //
    // We must issue the proper end state for either pan or rotate depending
    // on whether the shift or ctrl button was pushed.
    //
    if (ctrlOrShiftPushed)
    {
        EndBoundingBox();
        EndPan();
    }
    else
    {
        EndRubberBand();
        ZoomCamera();
        EndZoom();
    }

    EnableSpinMode();

    IssueViewCallback();
}
Exemple #14
0
Gource::Gource(std::string logfile) {

    this->logfile = logfile;

    commitlog = 0;

    fontlarge = fontmanager.grab("FreeSans.ttf", 42);
    fontlarge.dropShadow(true);
    fontlarge.roundCoordinates(true);

    fontmedium = fontmanager.grab("FreeSans.ttf", 16);
    fontmedium.dropShadow(true);
    fontmedium.roundCoordinates(false);

    font = fontmanager.grab("FreeSans.ttf", 14);
    font.dropShadow(true);
    font.roundCoordinates(true);

    bloomtex = texturemanager.grab("bloom.tga");
    beamtex  = texturemanager.grab("beam.png");

    start_position = 0.0;
    stop_position = 0.0;

    stop_on_idle=false;
    stop_position_reached=false;
    stop_at_end=false;

    paused     = false;
    first_read = true;
    draw_loading = true;

    mousemoved = false;
    mouseclicked = false;

    splash = -1.0;

    debug = false;
    trace_debug = false;

    frameExporter = 0;

    dirNodeTree = 0;
    userTree = 0;

    selectedFile = 0;
    hoverFile = 0;
    selectedUser = 0;
    hoverUser = 0;

    date_x_offset = 0;

    camera = ZoomCamera(vec3f(0,0, -300), vec3f(0.0, 0.0, 0.0), 250.0, 5000.0);
    setCameraMode(false);

    root = 0;

    background_colour = vec3f(0.0, 0.0, 0.0);

    //min phsyics rate 60fps (ie maximum allowed delta 1.0/60)
    max_tick_rate = 1.0 / 60.0;
    runtime = 0.0f;
    frameskip = 0;
    framecount = 0;

    findUserImages();

    reset();
}
void CNuGenDimensionView::OnMouseMove(UINT nFlags, CPoint point)
{
    CChildFrame* pFrame = static_cast<CChildFrame*>(GetParentFrame());
    SetFocus();
    if (!pFrame->m_commander)
    {
        switch (m_hand_action )
        {
        case HA_ROTATE:
            if (nFlags & MK_LBUTTON)
            {
                SG_VECTOR downPnt;
                SG_VECTOR curPnt;
                // Convert the mouse left button down position to world
                m_Camera.GetWorldCoord(m_ScreenLeftButtonDownPoint.x,
                                       m_ScreenLeftButtonDownPoint.y,
                                       0.0,
                                       downPnt);
                // Convert the mouse point into world coordinates
                m_Camera.GetWorldCoord(point.x,	point.y, 0.0,curPnt);
                //VecSubf(curPnt, downPnt, curPnt);
                curPnt = sgSpaceMath::VectorsSub(curPnt, downPnt);
                CSize deltaPos;
                deltaPos = m_ScreenLeftButtonDownPoint - point;
                m_ScreenLeftButtonDownPoint = point;
                RotateCamera(deltaPos);
                Invalidate(FALSE);
            }
            break;
        case HA_MOVE:
            if (nFlags & MK_LBUTTON)
            {
                SG_VECTOR downPnt;
                SG_VECTOR curPnt;
                // Convert the mouse left button down position to world
                m_Camera.GetWorldCoord(m_ScreenLeftButtonDownPoint.x,
                                       m_ScreenLeftButtonDownPoint.y,
                                       0.0,
                                       downPnt);
                // Convert the mouse point into world coordinates
                m_Camera.GetWorldCoord(point.x,	point.y, 0.0,curPnt);
                //VecSubf(curPnt, downPnt, curPnt);
                curPnt = sgSpaceMath::VectorsSub(curPnt, downPnt);
                m_ScreenLeftButtonDownPoint = point;
                TranslateCamera(curPnt);
                Invalidate(FALSE);
            }
            break;
        case HA_ZOOM:
            if (nFlags & MK_LBUTTON)
            {
                SG_VECTOR downPnt;
                SG_VECTOR curPnt;
                // Convert the mouse left button down position to world
                m_Camera.GetWorldCoord(m_ScreenLeftButtonDownPoint.x,
                                       m_ScreenLeftButtonDownPoint.y,
                                       0.0,
                                       downPnt);
                // Convert the mouse point into world coordinates
                m_Camera.GetWorldCoord(point.x,	point.y, 0.0,curPnt);
                //VecSubf(curPnt, downPnt, curPnt);
                curPnt = sgSpaceMath::VectorsSub(curPnt, downPnt);
                CSize deltaPos;
                deltaPos = m_ScreenLeftButtonDownPoint - point;
                m_ScreenLeftButtonDownPoint = point;
                ZoomCamera(deltaPos);
                Invalidate(FALSE);
            }
            break;
        default:
            break;
        }
    }

    if (!pFrame->m_commander)
        /*pFrame->m_commander->MouseMove(nFlags,point.x,point.y);
        else*/
        if (!(nFlags & MK_LBUTTON))
        {
            int snapSz = pFrame->GetSnapSize();
            const sgCObject* oldHotObj = Drawer::CurrentHotObject;

            Drawer::CurrentHotObject = GetTopObject(GetHitsInRect(CRect(point.x-snapSz, point.y-snapSz,
                                                    point.x+snapSz, point.y+snapSz),true));
            Drawer::TopParentOfHotObject = GetObjectTopParent(Drawer::CurrentHotObject);
            if (Drawer::TopParentOfHotObject)
                Drawer::CurrentHotObject = Drawer::TopParentOfHotObject;
            /**************************************/
            if (Drawer::CurrentHotObject &&
                    (Drawer::CurrentHotObject->GetType()==SG_OT_LINE ||
                     Drawer::CurrentHotObject->GetType()==SG_OT_CIRCLE ||
                     Drawer::CurrentHotObject->GetType()==SG_OT_SPLINE ||
                     Drawer::CurrentHotObject->GetType()==SG_OT_ARC ||
                     Drawer::CurrentHotObject->GetType()==SG_OT_CONTOUR)
               )
            {
                sgC2DObject* spl = reinterpret_cast<sgC2DObject*>(Drawer::CurrentHotObject);
                CString messs = "2DObject ";
                if (spl->IsClosed())
                    messs += " Closed; ";
                else
                    messs += " No closed; ";
                if (spl->IsLinear())
                {
                    messs += " Linear;";
                }
                else
                {
                    messs += " No linear - ";
                    SG_VECTOR plN;
                    double    plD;
                    if (spl->IsPlane(&plN,&plD))
                    {
                        CString aaaa;
                        aaaa.Format("Normal: X=%f,Y=%f,Z=%f D: %f",plN.x,plN.y,plN.z,plD);
                        messs += " Plane; ";
                        messs+=aaaa;
                    }
                    else
                        messs += " No Plane; ";
                }

                if (spl->IsSelfIntersecting())
                    messs += "Self intersecing; ";
                else
                    messs += "No Self intersecing; ";

                pFrame->PutMessage(IApplicationInterface::MT_MESSAGE,
                                   messs);

            }
            else if (Drawer::CurrentHotObject &&	(Drawer::CurrentHotObject->GetType()==SG_OT_3D))
            {
                sgC3DObject* ddd = reinterpret_cast<sgC3DObject*>(Drawer::CurrentHotObject);
                CString messs;
                messs.Format("Volume = %f",ddd->GetVolume());
                messs+="  Square = ";
                CString aaaa;
                aaaa.Format("%f",ddd->GetSquare());
                messs+=aaaa;
                pFrame->PutMessage(IApplicationInterface::MT_MESSAGE,
                                   messs);
            }
            else
                pFrame->PutMessage(IApplicationInterface::MT_MESSAGE,
                                   "                        ");
            /**************************************/

            if (oldHotObj!=Drawer::CurrentHotObject)
                Invalidate();
        }

    COpenGLView::OnMouseMove(nFlags, point);
}
Exemple #16
0
Gource::Gource(FrameExporter* exporter) {

    this->logfile = gGourceSettings.path;

    commitlog = 0;

    fontlarge = fontmanager.grab("FreeSans.ttf", 42);
    fontlarge.dropShadow(true);
    fontlarge.roundCoordinates(true);

    fontmedium = fontmanager.grab("FreeSans.ttf", gGourceSettings.font_size);
    fontmedium.dropShadow(true);
    fontmedium.roundCoordinates(false);

    font = fontmanager.grab("FreeSans.ttf", 14);
    font.dropShadow(true);
    font.roundCoordinates(true);

    //only use bloom with alpha channel if transparent due to artifacts on some video cards
    std::string bloom_tga = gGourceSettings.transparent ? "bloom_alpha.tga" : "bloom.tga";

    bloomtex = texturemanager.grab(bloom_tga);
    beamtex  = texturemanager.grab("beam.png");

    logotex = 0;
    backgroundtex = 0;

    //load logo
    if(gGourceSettings.logo.size() > 0) {
        logotex = texturemanager.grabFile(gGourceSettings.logo);
    }

    //load background image
    if(gGourceSettings.background_image.size() > 0) {
        backgroundtex = texturemanager.grabFile(gGourceSettings.background_image);
    }

    stop_position_reached=false;

    paused       = false;
    first_read   = true;
    draw_loading = true;

    grab_mouse   = false;
    mousemoved   = false;
    mousedragged = false;
    mouseclicked = false;

    if(1) {
        cursor.setCursorTexture(texturemanager.grab("cursor.png"));
        cursor.useSystemCursor(false);
    }

    if(gGourceSettings.hide_mouse) {
        cursor.showCursor(false);
    }

    splash = -1.0;

    debug = false;
    trace_debug = false;

    frameExporter = 0;

    dirNodeTree = 0;
    userTree = 0;

    selectedFile = 0;
    hoverFile = 0;
    selectedUser = 0;
    hoverUser = 0;

    date_x_offset = 0;

    camera = ZoomCamera(vec3f(0,0, -300), vec3f(0.0, 0.0, 0.0), 250.0, 5000.0);

    setCameraMode(gGourceSettings.camera_mode);

    root = 0;

    //min phsyics rate 60fps (ie maximum allowed delta 1.0/60)
    max_tick_rate = 1.0 / 60.0;
    runtime = 0.0f;
    frameskip = 0;
    framecount = 0;

    reset();

    if(exporter!=0) setFrameExporter(exporter, gGourceSettings.output_framerate);

    //if recording a video or in demo mode, or multiple repos, the slider is initially hidden
    if(exporter==0 && gGourceSettings.repo_count==1) slider.show();
}