//============================================================================================================= void CCausticsRenderer9::DrawColors() { for( size_t i = 0; i < distancemaps.size(); ++i ) { distancemap& dm = distancemaps[i]; for( int j = 0; j < 6; ++j ) { int index = max((j % 4) - 1, 0); look = viewdir[j] + Position; D3DXMatrixLookAtLH(&View, &Position, &look, &up[index]); game->Graphics->SetRenderTarget(0, dm.surfaces[j]); rendercolor(i); } } }
void SatGL::render(QMatrix4x4 projection, float distance, QQuaternion quat ) { QMatrix4x4 modelview; modelview.translate(0.0, 0.0, distance); modelview.rotate(quat); QVector<GLfloat> positions; QList<Satellite>::iterator sat = sats->GetSatlist()->begin(); int nbrSats = 0; int nbrVertices; QMatrix4x4 modelocta; QColor col(255, 0, 0); float alt; while ( sat != sats->GetSatlist()->end() ) { if( (*sat).active == true) { QVector3D pos, posnorm; (*sat).GetSatellitePosition(pos, posnorm, alt); positions.append(0.0f); positions.append(0.0f); positions.append(0.0f); positions.append(pos.x()); positions.append(pos.y()); positions.append(pos.z()); modelocta = modelview; modelocta.translate(posnorm.x(), posnorm.y(), posnorm.z()); modelocta.scale(0.005f); octa->render(projection, modelocta, col); QColor horizoncolour(opts.sathorizoncolor); horizon->render(projection, distance, quat, posnorm, alt, horizoncolour); nbrSats++; } ++sat; } positionsBuf.bind(); if(nbrSats != nbrActiveSats) { nbrActiveSats = nbrSats; positionsBuf.allocate(positions.data(), positions.size() * sizeof(GLfloat)); qDebug() << "positionsBuf.size() != nbrActiveSats * 2 * 3 * sizeof(GLfloat)"; qDebug() << "nbrActiveSats = " << nbrActiveSats << " positionsBuf.size() = " << positionsBuf.size(); } else { positionsBuf.write(0, positions.data(), positions.size() * sizeof(GLfloat)); } nbrVertices = positionsBuf.size() / (3 * sizeof(GLfloat)); positionsBuf.release(); QOpenGLVertexArrayObject::Binder vaoBinder(&vao); program->bind(); program->setUniformValue("MVP", projection * modelview); QMatrix3x3 norm = modelview.normalMatrix(); program->setUniformValue("NormalMatrix", norm); QColor rendercolor(255, 0, 0); program->setUniformValue("outcolor", QVector4D(rendercolor.redF(), rendercolor.greenF(), rendercolor.blueF(), 1.0f)); glDrawArrays(GL_LINES, 0, nbrVertices); sat = sats->GetSatlist()->begin(); while ( sat != sats->GetSatlist()->end() ) { if( (*sat).active == true) { if( (*sat).GetCatalogueNbr() == sats->GetSelectedSat() ) RenderTrail(&(*sat), projection, distance, quat, true); else RenderTrail(&(*sat), projection, distance, quat, false); } ++sat; } // QMatrix4x4 mod; // mod.setToIdentity(); // mod.translate(0.0, 0.0, distance); // mod.rotate(quat); // modelocta = mod; // modelocta.translate(0.0, 1.0, 0.0); // modelocta.scale(0.009f); // octa->render(projection, modelocta, col); // modelocta = mod; // modelocta.translate(0.0, 0.0, 1.0); // modelocta.scale(0.009f); // octa->render(projection, modelocta, col); // modelocta = mod; // modelocta.translate(1.0, 0.0, 0.0); // modelocta.scale(0.009f); // octa->render(projection, modelocta, col); }
void SatGL::RenderTrail(Satellite *sat, QMatrix4x4 projection, float distance, QQuaternion quat, bool trackon) // QMatrix4x4 modelview, bool trackon) { QVector<GLfloat> postrail; double tsince, // Time since epoch (in minutes) jul_epoch, // Julian date of epoch jul_utc; // Julian UTC date QSgp4Date nowutc = QSgp4Date::NowUTC(); jul_utc = nowutc.Julian(); jul_epoch = Julian_Date_of_Epoch(sat->GetEpoch()); QMatrix4x4 model; model.translate(0.0, 0.0, distance); model.rotate(quat); QMatrix4x4 modelview; modelview = model; QMatrix4x4 modelocta; QColor col(0,255,255); QEci qeci; QVector3D pos; double id; int nbrVertices = 0; tsince = (jul_utc - jul_epoch) * MIN_PER_DAY; // in minutes for( id = tsince - 5; id < tsince; id++ ) { (*sat).qsgp4->getPosition(id, qeci); QGeodetic qgeo = qeci.ToGeo(); LonLat2PointRad(qgeo.latitude, qgeo.longitude, &pos, 1.001f); if(id < tsince && id >= tsince - 5 ) { modelocta = model; modelocta.translate(pos.x(), pos.y(), pos.z()); modelocta.scale(0.004f); octa->render(projection, modelocta, col); } } if(trackon) { for( id = tsince - opts.realminutesshown + 1; id <= tsince + opts.realminutesshown; id++ ) // nbr of id's = 2 * opts.realminutesshown { (*sat).qsgp4->getPosition(id, qeci); QGeodetic qgeo = qeci.ToGeo(); LonLat2PointRad(qgeo.latitude, qgeo.longitude, &pos, 1.001f); postrail.append(pos.x()); postrail.append(pos.y()); postrail.append(pos.z()); } positionsTrail.bind(); if(tdiff != opts.realminutesshown) { tdiff = opts.realminutesshown; positionsTrail.allocate(postrail.data(), postrail.size() * sizeof(GLfloat)); } else { positionsTrail.write(0, postrail.data(), postrail.size() * sizeof(GLfloat)); } nbrVertices = positionsTrail.size() / (3 * sizeof(GLfloat)); positionsTrail.release(); QOpenGLVertexArrayObject::Binder vaoBinder(&vaotrail); program->bind(); program->setUniformValue("MVP", projection * modelview); QMatrix3x3 norm = modelview.normalMatrix(); program->setUniformValue("NormalMatrix", norm); QColor rendercolor(opts.sattrackcolor); program->setUniformValue("outcolor", QVector4D(rendercolor.redF(), rendercolor.greenF(), rendercolor.blueF(), 1.0f)); glDrawArrays(GL_LINE_STRIP, 0, nbrVertices); } }
void SegmentGL::RenderContour(Segment *seg, QMatrix4x4 projection, QMatrix4x4 modelview, int width, int height) { QVector3D vec; QVector3D pos; QVector<GLfloat> positions; QEci qeci; CalculateSegmentContour(&positions, seg->cornerpointfirst1.latitude, seg->cornerpointfirst1.longitude, seg->cornerpointlast1.latitude, seg->cornerpointlast1.longitude); CalculateSegmentContour(&positions,seg->cornerpointlast1.latitude, seg->cornerpointlast1.longitude, seg->cornerpointlast2.latitude, seg->cornerpointlast2.longitude); CalculateSegmentContour(&positions, seg->cornerpointlast2.latitude, seg->cornerpointlast2.longitude, seg->cornerpointfirst2.latitude, seg->cornerpointfirst2.longitude); CalculateSegmentContour(&positions,seg->cornerpointfirst2.latitude, seg->cornerpointfirst2.longitude, seg->cornerpointfirst1.latitude, seg->cornerpointfirst1.longitude); seg->qsgp4->getPosition(seg->minutes_since_state_vector, qeci); QGeodetic qgeo = qeci.ToGeo(); double lat1 = qgeo.latitude; double lon1 = qgeo.longitude; seg->qsgp4->getPosition(seg->minutes_since_state_vector + seg->minutes_sensing, qeci); qgeo = qeci.ToGeo(); double lat2 = qgeo.latitude; double lon2 = qgeo.longitude; CalculateSegmentContour(&positions, lat1, lon1, lat2, lon2); positionsBuf.bind(); positionsBuf.write(0, positions.data(), positions.size() * sizeof(GLfloat)); positionsBuf.release(); QOpenGLVertexArrayObject::Binder vaoBinder(&vao); program->bind(); program->setUniformValue("MVP", projection * modelview); QColor rendercolor(opts.satsegmentcolor); QColor rendercolorsel(opts.satsegmentcolorsel); if((*seg).segmentselected) program->setUniformValue("outcolor", QVector4D(rendercolorsel.redF(), rendercolorsel.greenF(), rendercolorsel.blueF(), 1.0f)); else program->setUniformValue("outcolor", QVector4D(rendercolor.redF(), rendercolor.greenF(), rendercolor.blueF(), 1.0f)); QMatrix3x3 norm = modelview.normalMatrix(); program->setUniformValue("NormalMatrix", norm); glDrawArrays(GL_LINE_LOOP, 0, nbrOfVertices - 10); glDrawArrays(GL_LINE_STRIP, nbrOfVertices - 10, 10); float mvmatrix[16], projmatrix[16]; QMatrix4x4 MVP; MVP = projection * modelview; float *ptr = modelview.data(); for(int i = 0; i < 16; i++) mvmatrix[i] = *(ptr + i); ptr = projection.data(); for(int i = 0; i < 16; i++) projmatrix[i] = *(ptr + i); QVector2D win; LonLat2PointRad((float)seg->cornerpointfirst1.latitude, (float)seg->cornerpointfirst1.longitude, &vec, 1.0); win = glhProjectf (vec, mvmatrix, projmatrix, width, height); seg->winvecend1 = win; LonLat2PointRad((float)seg->cornerpointfirst2.latitude, (float)seg->cornerpointfirst2.longitude, &vec, 1.0); win = glhProjectf (vec, mvmatrix, projmatrix, width, height); seg->winvecend2 = win; LonLat2PointRad((float)seg->cornerpointlast1.latitude, (float)seg->cornerpointlast1.longitude, &vec, 1.0); win = glhProjectf (vec, mvmatrix, projmatrix, width, height); seg->winvecend3 = win; LonLat2PointRad((float)seg->cornerpointlast2.latitude, (float)seg->cornerpointlast2.longitude, &vec, 1.0); win = glhProjectf (vec, mvmatrix, projmatrix, width, height); seg->winvecend4 = win; win = glhProjectf (seg->vec1, mvmatrix, projmatrix, width, height); seg->winvec1 = win; win = glhProjectf (seg->vec2, mvmatrix, projmatrix, width, height); seg->winvec2 = win; }