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

This commit is contained in:
2019-12-03 18:29:26 +00:00
parent b1e1ad4aea
commit cb6fe2b7ef
10 changed files with 61 additions and 13 deletions

View File

@@ -75,6 +75,8 @@ RendererService::RendererService(Renderer * r_): r(r_) {
cone_mesh ->translatePoints(0,0,-0.5);
cone_mesh ->scalePoints(1.5);
line_mesh_f = Primitive::lineFrame(QVector3D(), QVector3D(0, 0, -1));
handle_move_mesh = Primitive::arrow(12, 0.06);
handle_ms_2_mesh = Primitive::torus(8, 12, 0.5, 0.02, 90);
Mesh * m = Primitive::disc(8, 1., 1., true, 90);
@@ -112,6 +114,7 @@ RendererService::~RendererService() {
delete omni_mesh_f;
delete cone_mesh;
delete cone_mesh_f;
delete line_mesh_f;
delete axis_camera;
delete axis_mesh;
delete handle_move_mesh;
@@ -137,12 +140,13 @@ void RendererService::resize(int width, int height) {
}
QMatrix4x4 RendererService::invariantSizeMatrix(QVector3D p) {
QMatrix4x4 RendererService::invariantSizeMatrix(QVector3D p, double * ret_scale) {
QVector4D pos = QVector4D(p, 1.);
double dist = -(v_mat * pos).z();
QMatrix4x4 m;
m.translate(pos.toVector3D());
m.scale(dist * size_full_scale);
if (ret_scale) *ret_scale = dist * size_full_scale;
return m;
}
@@ -189,13 +193,21 @@ void RendererService::fillSpotObjects() {
Object o;
cur_objects.clear();
cur_aims.clear();
cur_lines.clear();
double scl = 1.;
foreach (Light * l, ll) {
QMatrix4x4 m;
m = invariantSizeMatrix(l->worldPos()) * parentRotationMatrix(l);
m = invariantSizeMatrix(l->worldPos(), &scl) * parentRotationMatrix(l);
m.transposed().copyDataTo(o.modelmatrix);
o.object_id = l->id_;
cur_objects << o;
QMatrix4x4 sm;
sm.scale(1, 1, l->distance() / scl);
m = m * sm;
m.transposed().copyDataTo(o.modelmatrix);
//cur_lines << o;
m = invariantSizeMatrix(l->worldAim());
m.transposed().copyDataTo(o.modelmatrix);
o.object_id = l->id_ + 1;
@@ -330,12 +342,18 @@ void RendererService::drawLightsFrame(QColor color) {
r->fillSelectionsBuffer(rs.cur_selections_, light2objectList(v->scene_->lights_used.value(Light::Cone)));
cone_mesh_f->loadSelections(v, rs.cur_selections_);
cone_mesh_f->draw(v, cur_objects.size());
setObjectsColor(cur_aims, color);
box_mesh_f->loadObjects(v, cur_aims);
box_mesh_f->loadSelections(v, rs.cur_selections_);
box_mesh_f->draw(v, cur_aims.size());
setObjectsColor(cur_aims, color);
setObjectsColor(cur_lines, color);
line_mesh_f->loadObjects(v, cur_lines);
r->fillSelectionsBuffer(rs.cur_selections_, light2objectList(v->scene_->lights_used.value(Light::Cone)));
line_mesh_f->loadSelections(v, rs.cur_selections_);
line_mesh_f->draw(v, cur_lines.size());
}