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

This commit is contained in:
2019-11-27 21:49:24 +00:00
parent 988c4e1150
commit 09298fadcd
22 changed files with 291 additions and 173 deletions

View File

@@ -123,6 +123,21 @@ void RendererBase::setUniformViewCorners(QOpenGLShaderProgram * prog, Camera * c
}
void RendererBase::fillSelectionsBuffer(QVector<uchar> & buffer, const QList<ObjectBase *> & ol) {
buffer.resize(ol.size());
for (int i = 0; i < ol.size(); ++i) {
buffer[i] = (ol[i]->isSelected(true) ? 1 : 0);
}
}
void RendererBase::fillSelectionsBuffer(QVector<uchar> & buffer, bool yes, int size) {
buffer.resize(size);
for (int i = 0; i < size; ++i)
buffer[i] = (yes ? 1 : 0);
}
void RendererBase::reloadMaterials(Scene & scene) {
//qDebug() << "reloadMaterias";
QList<Map*> maps[2];
@@ -199,12 +214,21 @@ void RendererBase::reloadMaterials(Scene & scene) {
}
void RendererBase::reloadLightsParameters(const QList<Light*> & lights) {
cur_lights_params_.resize(qMin(lights.size(), max_lights));
void RendererBase::reloadLightsParameters(const QMap<int, QList<Light*>> & lights) {
lights_start.clear();
lights_start[Light::Omni] = 0;
QMapIterator<int, QList<Light*>> it(lights);
current_lights.clear();
while (it.hasNext()) {
it.next();
lights_start[it.key()] = current_lights.size();
current_lights.append(it.value());
}
cur_lights_params_.resize(qMin(current_lights.size(), max_lights));
//qDebug() << "reloadLightsParameters" << cur_lights_params_.size();
for (int i = 0; i < cur_lights_params_.size(); ++i) {
QGLLightParameter & so(cur_lights_params_[i]);
Light * l = lights[i];
Light * l = current_lights[i];
double ang_start = l->angle_start / 2.f, ang_end = l->angle_end / 2.f;
if (l->light_type == Light::Omni)
ang_start = ang_end = 180.;
@@ -227,12 +251,12 @@ void RendererBase::reloadLightsParameters(const QList<Light*> & lights) {
}
void RendererBase::reloadLightsPositions(const QList<Light *> & lights, Camera * cam) {
cur_lights_pos_.resize(qMin(lights.size(), max_lights));
void RendererBase::reloadLightsPositions(Camera * cam) {
cur_lights_pos_.resize(qMin(current_lights.size(), max_lights));
QMatrix4x4 mat = cam->viewMatrix() * cam->offsetMatrix();
for (int i = 0; i < cur_lights_pos_.size(); ++i) {
QGLLightPosition & so(cur_lights_pos_[i]);
Light * l = lights[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);
pos = m * pos;