git-svn-id: svn://db.shs.com.ru/libs@641 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2019-12-03 10:55:21 +00:00
parent 844173d571
commit c38678056d
7 changed files with 14 additions and 12 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -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;}

View File

@@ -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;

View File

@@ -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());