git-svn-id: svn://db.shs.com.ru/libs@705 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -54,6 +54,7 @@ RendererService::RendererService(Renderer * r_): r(r_) {
|
||||
axis_camera->setFOV(45.);
|
||||
axis_mesh = Primitive::arrow(12);
|
||||
size_vp_scale = size_full_scale = 1.;
|
||||
|
||||
box_mesh = Primitive::cube(0.8, 0.8, 0.8);
|
||||
box_mesh_f = Primitive::cubeFrame(0.8, 0.8, 0.8);
|
||||
omni_mesh = Primitive::ellipsoid(2, 1, 0.5);
|
||||
@@ -75,11 +76,23 @@ RendererService::RendererService(Renderer * r_): r(r_) {
|
||||
cone_mesh ->translatePoints(0,0,-0.5);
|
||||
cone_mesh ->scalePoints(1.5);
|
||||
|
||||
camera_mesh = Primitive::cube(1.2, 1.2, 1.2);
|
||||
mat.translate(0,0,-0.5);
|
||||
Mesh * m = Primitive::cone(6, 0.6, 1.);
|
||||
m->scalePoints(1.4);
|
||||
m->transformPoints(mat);
|
||||
camera_mesh->append(m);
|
||||
camera_mesh_f = Primitive::cubeFrame(1., 1., 1.);
|
||||
camera_mesh_f->append(Primitive::cubeFrame(0.5, 0.5, 0.5));
|
||||
m = Primitive::coneFrame(6, 0.6, 1.);
|
||||
m->transformPoints(mat);
|
||||
camera_mesh_f->append(m);
|
||||
|
||||
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, 0.5, 90);
|
||||
m = Primitive::disc(8, 0.5, 90);
|
||||
handle_ms_2_mesh->append(m);
|
||||
m->flipNormals();
|
||||
handle_ms_2_mesh->append(m);
|
||||
@@ -113,6 +126,8 @@ RendererService::~RendererService() {
|
||||
delete omni_mesh_f;
|
||||
delete cone_mesh;
|
||||
delete cone_mesh_f;
|
||||
delete camera_mesh;
|
||||
delete camera_mesh_f;
|
||||
delete line_mesh_f;
|
||||
delete axis_camera;
|
||||
delete axis_mesh;
|
||||
@@ -187,8 +202,7 @@ void RendererService::fillOmniObjects() {
|
||||
}
|
||||
|
||||
|
||||
void RendererService::fillSpotObjects() {
|
||||
QList<Light*> ll = r->view->scene()->lights_used.value(Light::Cone);
|
||||
void RendererService::fillAimedObjects(const ObjectBaseList & objects) {
|
||||
Object o;
|
||||
cur_objects.clear();
|
||||
cur_aims.clear();
|
||||
@@ -197,18 +211,19 @@ void RendererService::fillSpotObjects() {
|
||||
QVector<QVector2D> & lt (line_mesh_f->texcoords ());
|
||||
QVector< Vector2i> & lind(line_mesh_f->indicesLines());
|
||||
lv.clear();
|
||||
foreach (Light * l, ll) {
|
||||
foreach (ObjectBase * go, objects) {
|
||||
AimedObject * ao = (AimedObject *)go;
|
||||
QMatrix4x4 m;
|
||||
m = invariantSizeMatrix(l->worldPos()) * parentRotationMatrix(l);
|
||||
m = invariantSizeMatrix(ao->worldPos()) * parentRotationMatrix(ao);
|
||||
m.transposed().copyDataTo(o.modelmatrix);
|
||||
o.object_id = l->id_;
|
||||
o.object_id = ao->id_;
|
||||
cur_objects << o;
|
||||
|
||||
lv << l->worldPos() << l->worldAim();
|
||||
lv << ao->worldPos() << ao->worldAim();
|
||||
|
||||
m = invariantSizeMatrix(l->worldAim());
|
||||
m = invariantSizeMatrix(ao->worldAim());
|
||||
m.transposed().copyDataTo(o.modelmatrix);
|
||||
o.object_id = l->id_ + 1;
|
||||
o.object_id = ao->id_ + 1;
|
||||
cur_aims << o;
|
||||
}
|
||||
ln.resize(lv.size());
|
||||
@@ -313,13 +328,14 @@ void RendererService::drawLights() {
|
||||
|
||||
fillOmniObjects();
|
||||
omni_mesh->loadObjects(v, cur_objects);
|
||||
r->fillSelectionsBuffer(rs.cur_selections_, light2objectList(v->scene_->lights_used.value(Light::Omni)));
|
||||
r->fillSelectionsBuffer(rs.cur_selections_, lights2objectList(v->scene_->lights_used.value(Light::Omni)));
|
||||
omni_mesh->loadSelections(v, rs.cur_selections_);
|
||||
omni_mesh->draw(v, cur_objects.size());
|
||||
|
||||
fillSpotObjects();
|
||||
ObjectBaseList ll = lights2objectList(r->view->scene()->lights_used.value(Light::Cone));
|
||||
fillAimedObjects(ll);
|
||||
cone_mesh->loadObjects(v, cur_objects);
|
||||
r->fillSelectionsBuffer(rs.cur_selections_, light2objectList(v->scene_->lights_used.value(Light::Cone)));
|
||||
r->fillSelectionsBuffer(rs.cur_selections_, ll);
|
||||
cone_mesh->loadSelections(v, rs.cur_selections_);
|
||||
cone_mesh->draw(v, cur_objects.size());
|
||||
box_mesh->loadObjects(v, cur_aims);
|
||||
@@ -336,14 +352,15 @@ void RendererService::drawLightsFrame(QColor color) {
|
||||
fillOmniObjects();
|
||||
setObjectsColor(cur_objects, color);
|
||||
omni_mesh_f->loadObjects(v, cur_objects);
|
||||
r->fillSelectionsBuffer(rs.cur_selections_, light2objectList(v->scene_->lights_used.value(Light::Omni)));
|
||||
r->fillSelectionsBuffer(rs.cur_selections_, lights2objectList(v->scene_->lights_used.value(Light::Omni)));
|
||||
omni_mesh_f->loadSelections(v, rs.cur_selections_);
|
||||
omni_mesh_f->draw(v, cur_objects.size());
|
||||
|
||||
fillSpotObjects();
|
||||
ObjectBaseList ll = lights2objectList(r->view->scene()->lights_used.value(Light::Cone));
|
||||
fillAimedObjects(ll);
|
||||
setObjectsColor(cur_objects, color);
|
||||
cone_mesh_f->loadObjects(v, cur_objects);
|
||||
r->fillSelectionsBuffer(rs.cur_selections_, light2objectList(v->scene_->lights_used.value(Light::Cone)));
|
||||
r->fillSelectionsBuffer(rs.cur_selections_, ll);
|
||||
cone_mesh_f->loadSelections(v, rs.cur_selections_);
|
||||
cone_mesh_f->draw(v, cur_objects.size());
|
||||
|
||||
@@ -355,6 +372,45 @@ void RendererService::drawLightsFrame(QColor color) {
|
||||
}
|
||||
|
||||
|
||||
void RendererService::drawCameras() {
|
||||
QGLView * v = r->view;
|
||||
RendererSelection & rs(r->rend_selection);
|
||||
|
||||
ObjectBaseList cl = cameras2objectList(r->view->scene()->cameras_used);
|
||||
cl.removeOne(r->view->camera());
|
||||
fillAimedObjects(cl);
|
||||
camera_mesh->loadObjects(v, cur_objects);
|
||||
r->fillSelectionsBuffer(rs.cur_selections_, cl);
|
||||
camera_mesh->loadSelections(v, rs.cur_selections_);
|
||||
camera_mesh->draw(v, cur_objects.size());
|
||||
box_mesh->loadObjects(v, cur_aims);
|
||||
box_mesh->loadSelections(v, rs.cur_selections_);
|
||||
box_mesh->draw(v, cur_aims.size());
|
||||
|
||||
}
|
||||
|
||||
|
||||
void RendererService::drawCamerasFrame(QColor color) {
|
||||
QGLView * v = r->view;
|
||||
RendererSelection & rs(r->rend_selection);
|
||||
|
||||
ObjectBaseList cl = cameras2objectList(r->view->scene()->cameras_used);
|
||||
cl.removeOne(r->view->camera());
|
||||
fillAimedObjects(cl);
|
||||
setObjectsColor(cur_objects, color);
|
||||
camera_mesh_f->loadObjects(v, cur_objects);
|
||||
r->fillSelectionsBuffer(rs.cur_selections_, cl);
|
||||
camera_mesh_f->loadSelections(v, rs.cur_selections_);
|
||||
camera_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());
|
||||
|
||||
}
|
||||
|
||||
|
||||
void RendererService::setObjectsColor(QVector<Object> & ol, QColor col) {
|
||||
QVector4D cv = QColor2QVector(col);
|
||||
for (int i = 0; i < ol.size(); ++i)
|
||||
@@ -380,9 +436,11 @@ void RendererService::renderService() {
|
||||
prog->setUniformValue("line_width", 2.f);
|
||||
prog->setUniformValue("z_offset", 0.f);
|
||||
drawLightsFrame(Qt::white);
|
||||
drawCamerasFrame(Qt::white);
|
||||
prog->setUniformValue("line_width", 1.f);
|
||||
prog->setUniformValue("z_offset", -1.E-2f);
|
||||
drawLightsFrame(Qt::black);
|
||||
drawCamerasFrame(Qt::black);
|
||||
|
||||
}
|
||||
if (r->bindShader(Renderer::srServiceLine, &prog)) {
|
||||
|
||||
Reference in New Issue
Block a user