You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.2 KiB
56 lines
1.2 KiB
4 years ago
|
#ifndef GFXARCBALL_INCLUDED // -*- C++ -*-
|
||
|
#define GFXARCBALL_INCLUDED
|
||
|
#if !defined(__GNUC__)
|
||
|
# pragma once
|
||
|
#endif
|
||
|
|
||
|
/************************************************************************
|
||
|
|
||
|
Arcball rotation control.
|
||
|
|
||
|
$Id: arcball.h 427 2004-09-27 04:45:31Z garland $
|
||
|
|
||
|
************************************************************************/
|
||
|
|
||
|
#include "baseball.h"
|
||
|
|
||
|
namespace gfx
|
||
|
{
|
||
|
|
||
|
class Arcball : public Baseball
|
||
|
{
|
||
|
private:
|
||
|
Vec2 ball_ctr;
|
||
|
double ball_radius;
|
||
|
|
||
|
Quat q_now, q_down, q_drag; // Quaternions describing rotation
|
||
|
Vec3 v_from, v_to; //
|
||
|
|
||
|
bool is_dragging;
|
||
|
|
||
|
protected:
|
||
|
Vec3 proj_to_sphere(const Vec2&);
|
||
|
void update();
|
||
|
|
||
|
|
||
|
public:
|
||
|
Arcball();
|
||
|
|
||
|
virtual void update_animation();
|
||
|
virtual bool mouse_down(int *where, int which);
|
||
|
virtual bool mouse_up(int *where, int which);
|
||
|
virtual bool mouse_drag(int *where, int *last, int which);
|
||
|
|
||
|
virtual void apply_transform();
|
||
|
virtual void get_transform(Vec3 & c, Vec3 &t, Quat & q);
|
||
|
virtual void set_transform(const Vec3 & c, const Vec3 & t, const Quat & q);
|
||
|
|
||
|
virtual void write(std::ostream&);
|
||
|
virtual void read(std::istream&);
|
||
|
};
|
||
|
|
||
|
} // namespace gfx
|
||
|
|
||
|
// GFXARCBALL_INCLUDED
|
||
|
#endif
|