Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F101905561
camera.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Feb 14, 23:48
Size
3 KB
Mime Type
text/x-c
Expires
Sun, Feb 16, 23:48 (16 h, 51 m)
Engine
blob
Format
Raw Data
Handle
24242208
Attached To
rDLMA Diffusion limited mixed aggregation
camera.h
View Options
// This file is part of Eigen, a lightweight C++ template library
// for linear algebra.
//
// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
//
// This Source Code Form is subject to the terms of the Mozilla
// Public License v. 2.0. If a copy of the MPL was not distributed
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef EIGEN_CAMERA_H
#define EIGEN_CAMERA_H
#include <Eigen/Geometry>
#include <QObject>
// #include <frame.h>
class
Frame
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
inline
Frame
(
const
Eigen
::
Vector3f
&
pos
=
Eigen
::
Vector3f
::
Zero
(),
const
Eigen
::
Quaternionf
&
o
=
Eigen
::
Quaternionf
())
:
orientation
(
o
),
position
(
pos
)
{}
Frame
lerp
(
float
alpha
,
const
Frame
&
other
)
const
{
return
Frame
((
1.f
-
alpha
)
*
position
+
alpha
*
other
.
position
,
orientation
.
slerp
(
alpha
,
other
.
orientation
));
}
Eigen
::
Quaternionf
orientation
;
Eigen
::
Vector3f
position
;
};
class
Camera
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
Camera
(
void
);
Camera
(
const
Camera
&
other
);
virtual
~
Camera
();
Camera
&
operator
=
(
const
Camera
&
other
);
void
setViewport
(
uint
offsetx
,
uint
offsety
,
uint
width
,
uint
height
);
void
setViewport
(
uint
width
,
uint
height
);
inline
uint
vpX
(
void
)
const
{
return
mVpX
;
}
inline
uint
vpY
(
void
)
const
{
return
mVpY
;
}
inline
uint
vpWidth
(
void
)
const
{
return
mVpWidth
;
}
inline
uint
vpHeight
(
void
)
const
{
return
mVpHeight
;
}
inline
float
fovY
(
void
)
const
{
return
mFovY
;
}
void
setFovY
(
float
value
);
void
setPosition
(
const
Eigen
::
Vector3f
&
pos
);
inline
const
Eigen
::
Vector3f
&
position
(
void
)
const
{
return
mFrame
.
position
;
}
void
setOrientation
(
const
Eigen
::
Quaternionf
&
q
);
inline
const
Eigen
::
Quaternionf
&
orientation
(
void
)
const
{
return
mFrame
.
orientation
;
}
void
setFrame
(
const
Frame
&
f
);
const
Frame
&
frame
(
void
)
const
{
return
mFrame
;
}
void
setDirection
(
const
Eigen
::
Vector3f
&
newDirection
);
Eigen
::
Vector3f
direction
(
void
)
const
;
void
setUp
(
const
Eigen
::
Vector3f
&
vectorUp
);
Eigen
::
Vector3f
up
(
void
)
const
;
Eigen
::
Vector3f
right
(
void
)
const
;
void
setTarget
(
const
Eigen
::
Vector3f
&
target
);
inline
const
Eigen
::
Vector3f
&
target
(
void
)
{
return
mTarget
;
}
const
Eigen
::
Affine3f
&
viewMatrix
(
void
)
const
;
const
Eigen
::
Matrix4f
&
projectionMatrix
(
void
)
const
;
void
rotateAroundTarget
(
const
Eigen
::
Quaternionf
&
q
);
void
localRotate
(
const
Eigen
::
Quaternionf
&
q
);
void
zoom
(
float
d
);
void
localTranslate
(
const
Eigen
::
Vector3f
&
t
);
/** Setup OpenGL matrices and viewport */
void
activateGL
(
void
);
Eigen
::
Vector3f
unProject
(
const
Eigen
::
Vector2f
&
uv
,
float
depth
,
const
Eigen
::
Matrix4f
&
invModelview
)
const
;
Eigen
::
Vector3f
unProject
(
const
Eigen
::
Vector2f
&
uv
,
float
depth
)
const
;
protected:
void
updateViewMatrix
(
void
)
const
;
void
updateProjectionMatrix
(
void
)
const
;
protected:
uint
mVpX
,
mVpY
;
uint
mVpWidth
,
mVpHeight
;
Frame
mFrame
;
mutable
Eigen
::
Affine3f
mViewMatrix
;
mutable
Eigen
::
Matrix4f
mProjectionMatrix
;
mutable
bool
mViewIsUptodate
;
mutable
bool
mProjIsUptodate
;
// used by rotateAroundTarget
Eigen
::
Vector3f
mTarget
;
float
mFovY
;
float
mNearDist
;
float
mFarDist
;
};
#endif
// EIGEN_CAMERA_H
Event Timeline
Log In to Comment