git-svn-id: svn://db.shs.com.ru/libs@641 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -377,7 +377,7 @@ QQuaternion Transform::fromAxes(const QVector3D & xAxis, const QVector3D & yAxis
|
||||
}
|
||||
|
||||
|
||||
QVector3D Transform::fromDirection(QVector3D d, float roll) {
|
||||
QVector3D Transform::fromDirection(QVector3D d, float pitch) {
|
||||
QVector3D ret;
|
||||
//QMatrix3x3 m = QQuaternion::fromDirection(d, QVector3D()).toRotationMatrix();
|
||||
//ret[0] = -atan2(m(0, 2), m(1, 2));
|
||||
@@ -385,10 +385,10 @@ QVector3D Transform::fromDirection(QVector3D d, float roll) {
|
||||
//ret[2] = atan2(m(2, 0), m(2, 1));
|
||||
d.normalize();
|
||||
ret[0] = M_PI - acos(d.z());
|
||||
ret[1] = roll * deg2rad;
|
||||
ret[1] = pitch * deg2rad;
|
||||
ret[2] = -atan2(d.x(), d.y());
|
||||
if (ret[0] < 0.) ret[0] += M_2PI;
|
||||
if (ret[0] >= M_2PI) ret[0] -= M_2PI;
|
||||
//if (ret[0] < 0.) ret[0] += M_2PI;
|
||||
//if (ret[0] >= M_2PI) ret[0] -= M_2PI;
|
||||
if (ret[2] < 0.) ret[2] += M_2PI;
|
||||
if (ret[2] >= M_2PI) ret[2] -= M_2PI;
|
||||
return ret * rad2deg;
|
||||
|
||||
@@ -73,7 +73,7 @@ public:
|
||||
const QVector3D & axis3, float angle3);
|
||||
static QQuaternion fromAxes(const QVector3D & xAxis, const QVector3D & yAxis, const QVector3D & zAxis);
|
||||
|
||||
static QVector3D fromDirection(QVector3D d, float roll = 0.f);
|
||||
static QVector3D fromDirection(QVector3D d, float pitch = 0.f);
|
||||
static QVector3D fromRotationMatrix(const QMatrix3x3 & m);
|
||||
static QMatrix3x3 toRotationMatrix(const QVector3D & r);
|
||||
|
||||
|
||||
@@ -189,6 +189,7 @@ void Camera::orbitXY(const float & a) {
|
||||
//trans.rotationRef() *= QQuaternion::fromEulerAngles(a, 0, 0);
|
||||
ObjectBase::rotateX(-a);
|
||||
move(pa - aim());
|
||||
|
||||
//qDebug() << pos() << aim();
|
||||
/*QVector3D dv = aim_ - pos_;
|
||||
float tl = dv.length(), tc;
|
||||
|
||||
@@ -456,7 +456,8 @@ void AimedObject::setAim(const QVector3D & p) {
|
||||
trans.setRotation(Transform::fromDirection(dir, trans.rotationY()));
|
||||
aim_dist = dir.length();
|
||||
buildTransform();
|
||||
//qDebug() << "setAim" << p << aim();
|
||||
//if (!p.isNull())
|
||||
//qDebug() << "setAim" << p << aim() << worldAim();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -244,7 +244,7 @@ public:
|
||||
QVector3D worldAim() const;
|
||||
void setAim(const QVector3D & p);
|
||||
QVector3D direction() const;
|
||||
QVector3D worldDirection() const {return (itransform_ * QVector4D(direction(), 0.)).toVector3D().normalized();}
|
||||
QVector3D worldDirection() const {return (itransform_ * QVector4D(QVector3D(0,0,-1), 0.)).toVector3D().normalized();}
|
||||
void setDirection(const QVector3D & d);
|
||||
void setDirection(double x, double y, double z) {setDirection(QVector3D(x, y, z));}
|
||||
double distance() const {return aim_dist;}
|
||||
|
||||
@@ -258,9 +258,9 @@ void RendererBase::reloadLightsPositions(Camera * cam) {
|
||||
QGLLightPosition & so(cur_lights_pos_[i]);
|
||||
Light * l = current_lights[i];
|
||||
QMatrix4x4 m = mat * l->worldTransform();
|
||||
QVector4D pos(0, 0, 0, 1.), dir(l->direction(), 1);//, dir0(light->dir0), dir1(light->dir1);
|
||||
QVector4D pos(0, 0, 0, 1.), dir(QVector3D(0,0,-1), 1);//, dir0(light->dir0), dir1(light->dir1);
|
||||
pos = m * pos;
|
||||
dir = (m * QVector4D(l->direction(),0)).normalized();//((m * dir) - pos).normalized();
|
||||
dir = (m * QVector4D(QVector3D(0,0,-1),0)).normalized();//((m * dir) - pos).normalized();
|
||||
so.position = pos;
|
||||
so.direction = dir;
|
||||
//so.shadowMatrix = l->shadow_matrix;
|
||||
|
||||
@@ -190,9 +190,8 @@ void RendererService::fillSpotObjects() {
|
||||
cur_objects.clear();
|
||||
cur_aims.clear();
|
||||
foreach (Light * l, ll) {
|
||||
QMatrix4x4 m, lm;
|
||||
lm = l->transform().matrixRotate();
|
||||
m = invariantSizeMatrix(l->worldPos()) * parentRotationMatrix(l) * lm;
|
||||
QMatrix4x4 m;
|
||||
m = invariantSizeMatrix(l->worldPos()) * parentRotationMatrix(l);
|
||||
m.transposed().copyDataTo(o.modelmatrix);
|
||||
o.object_id = l->id_;
|
||||
cur_objects << o;
|
||||
@@ -387,6 +386,7 @@ void RendererService::renderService() {
|
||||
f->glViewport(0, 0, axis_viewport.width(), axis_viewport.height());
|
||||
axis_camera->setPos(-r->view->camera()->direction() * 3.);
|
||||
axis_camera->setAim(QVector3D());
|
||||
axis_camera->setRotation(r->view->camera()->rotation());
|
||||
r->setUniformCamera(prog, axis_camera, true, axis_viewport);
|
||||
axis_mesh->draw(f, 3);
|
||||
f->glViewport(0, 0, r->view->width(), r->view->height());
|
||||
|
||||
Reference in New Issue
Block a user