From c38678056d63b8eb99765bee16d08cdbc7ce724b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Tue, 3 Dec 2019 10:55:21 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@641 a8b55f48-bf90-11e4-a774-851b48703e85 --- qglengine/core/gltransform.cpp | 8 ++++---- qglengine/core/gltransform.h | 2 +- qglengine/glcamera.cpp | 1 + qglengine/globject.cpp | 3 ++- qglengine/globject.h | 2 +- qglengine/renderer_base.cpp | 4 ++-- qglengine/renderer_service.cpp | 6 +++--- 7 files changed, 14 insertions(+), 12 deletions(-) diff --git a/qglengine/core/gltransform.cpp b/qglengine/core/gltransform.cpp index adfe327..21169ad 100644 --- a/qglengine/core/gltransform.cpp +++ b/qglengine/core/gltransform.cpp @@ -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; diff --git a/qglengine/core/gltransform.h b/qglengine/core/gltransform.h index 096d48c..84bc887 100644 --- a/qglengine/core/gltransform.h +++ b/qglengine/core/gltransform.h @@ -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); diff --git a/qglengine/glcamera.cpp b/qglengine/glcamera.cpp index 6546f48..2112527 100644 --- a/qglengine/glcamera.cpp +++ b/qglengine/glcamera.cpp @@ -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; diff --git a/qglengine/globject.cpp b/qglengine/globject.cpp index d3fb39f..7b174ca 100644 --- a/qglengine/globject.cpp +++ b/qglengine/globject.cpp @@ -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(); } diff --git a/qglengine/globject.h b/qglengine/globject.h index 00be145..7ac17da 100644 --- a/qglengine/globject.h +++ b/qglengine/globject.h @@ -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;} diff --git a/qglengine/renderer_base.cpp b/qglengine/renderer_base.cpp index f47628c..515e111 100644 --- a/qglengine/renderer_base.cpp +++ b/qglengine/renderer_base.cpp @@ -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; diff --git a/qglengine/renderer_service.cpp b/qglengine/renderer_service.cpp index 2f69e6e..67de02e 100644 --- a/qglengine/renderer_service.cpp +++ b/qglengine/renderer_service.cpp @@ -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());