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

This commit is contained in:
2019-12-02 20:09:18 +00:00
parent 385070f70f
commit 35668c13fc
15 changed files with 792 additions and 263 deletions

View File

@@ -63,17 +63,16 @@ RendererService::RendererService(Renderer * r_): r(r_) {
cone_mesh = Primitive::cone(8, 1., 1., 1.);
cone_mesh_f = Primitive::coneFrame(8, 1., 1., 1.);
QMatrix4x4 mat;
mat.translate(0,0,1);
mat.rotate(180, 1,0,0);
mat.translate(0,0,-1);
cone_mesh ->transformPoints(mat);
cone_mesh_f->transformPoints(mat);
cone_mesh_f->scalePoints(1.5);
box_mesh ->scalePoints(1.3);
omni_mesh ->scalePoints(1.3);
cone_mesh ->translatePoints(0,0,-1);
cone_mesh ->translatePoints(0,0,0.5);
cone_mesh ->scalePoints(1.4);
cone_mesh ->translatePoints(0,0,1);
cone_mesh ->translatePoints(0,0,-0.5);
cone_mesh ->scalePoints(1.5);
handle_move_mesh = Primitive::arrow(12, 0.06);
@@ -153,15 +152,10 @@ QMatrix4x4 RendererService::parentRotationMatrix(ObjectBase * o, bool self_rotat
if (!o) return ret;
QMatrix4x4 pmat;
if (o->parent()) {
pmat = o->parent()->worldTransform();
pmat.setColumn(3, QVector4D(0,0,0,1));
double det = pmat.determinant();
if (det > 0.) pmat /= sqrt(det);
pmat = o->parent()->transform().matrixRotate();
}
if (self_rotation) {
ret.rotate(o->angles_.z(), 0., 0., 1.);
ret.rotate(o->angles_.y(), 0., 1., 0.);
ret.rotate(o->angles_.x(), 1., 0., 0.);
ret *= o->transform().matrixRotate();
}
ret = pmat * ret;
return ret;
@@ -197,12 +191,7 @@ void RendererService::fillSpotObjects() {
cur_aims.clear();
foreach (Light * l, ll) {
QMatrix4x4 m, lm;
//QVector3D up = QVector3D::crossProduct(l->direction, QVector3D(0,0,1)).normalized();
//if (up.isNull())
// up = QVector3D::crossProduct(l->direction, QVector3D(0,0,1)).normalized();
//lm.lookAt(QVector3D(), l->direction, up);
//lm.lookAt(QVector3D(), l->direction, (QVector3D(0,0,1)));
lm.rotate(QQuaternion::fromDirection(l->direction(), QVector3D()));
lm = l->transform().matrixRotate();
m = invariantSizeMatrix(l->worldPos()) * parentRotationMatrix(l) * lm;
m.transposed().copyDataTo(o.modelmatrix);
o.object_id = l->id_;
@@ -391,6 +380,7 @@ void RendererService::renderService() {
/// axis
f->glViewport(0, 0, axis_viewport.width(), axis_viewport.height());
axis_camera->setPos(-r->view->camera()->direction() * 3.);
axis_camera->setAim(QVector3D());
r->setUniformCamera(prog, axis_camera, true, axis_viewport);
axis_mesh->draw(f, 3);
f->glViewport(0, 0, r->view->width(), r->view->height());