void loadProperty(const QString &property, QTextStream &value) { if (property == "material") { QGLMaterial *mat = new QGLMaterial(); QString name, file; value >> name >> file; if (file != "-") { QGLTexture2D *tex = new QGLTexture2D(); tex->setImage(QImage(dataDir + file)); mat->setTexture(tex); mat->setTextureCombineMode(QGLMaterial::Decal); } int r, g, b; value >> r >> g >> b; if (r != -1) mat->setAmbientColor(QColor(r, g, b)); value >> r >> g >> b; if (r != -1) mat->setDiffuseColor(QColor(r, g, b)); value >> r >> g >> b; if (r != -1) mat->setSpecularColor(QColor(r, g, b)); qreal shin; value >> shin; mat->setShininess(shin); palette.insert(name, mat); } else if (property == "size") {
static QGLMaterial *qCreateFluid() { QImage image(QSize(128,128), QImage::Format_ARGB32); QRgb col = qRgba(rval(), rval(), rval(), 196); image.fill(col); QPainter painter(&image); QLinearGradient linearGrad(QPointF(56, 56), QPointF(72, 72)); linearGrad.setColorAt(0, col); linearGrad.setColorAt(1, QColor(col).lighter()); linearGrad.setSpread(QGradient::ReflectSpread); painter.fillRect(image.rect(), linearGrad); painter.end(); QGLMaterial *mat = new QGLMaterial; QColor white(Qt::white); white.setAlpha(128); mat->setAmbientColor(white); mat->setDiffuseColor(white); QGLTexture2D *tex = new QGLTexture2D(mat); tex->setImage(image); mat->setTexture(tex); return mat; }
/*! Initializes the Qt3D materials used in the application. */ void GameView::initializeMaterials() { m_MaterialCollection = new QGLMaterialCollection(this); QGLTexture2D *lightTexture = new QGLTexture2D; lightTexture->setImage(QImage(":/reflectionmap.png")); QColor ambientColor = QColor(64, 64, 190); QGLMaterial *material = new QGLMaterial; material->setObjectName("PauseButtonMaterial"); QGLTexture2D *texture = new QGLTexture2D; texture->setImage(QImage(":/pause_button.png")); material->setTexture(texture); m_MaterialCollection->addMaterial(material); // Black hole material material = new QGLMaterial; material->setObjectName("BlackHoleMaterial"); texture = new QGLTexture2D; texture->setImage(QImage(":/BlackHole.jpg")); material->setTexture(texture); texture = new QGLTexture2D; texture->setImage(QImage(":/bh_sprial.png")); material->setTexture(texture, 1); material->setTextureCombineMode(QGLMaterial::Replace); m_MaterialCollection->addMaterial(material); // Black hole center material material = new QGLMaterial; material->setObjectName("BlackHoleFrontMaterial"); texture = new QGLTexture2D; texture->setImage(QImage(":/bh_sprial.png")); material->setTexture(texture); material->setTexture(lightTexture, 1); m_MaterialCollection->addMaterial(material); // Platform material material = new QGLMaterial; material->setObjectName("PlatformMaterial"); texture = new QGLTexture2D; texture->setImage(QImage(":/platformtex.png")); material->setTexture(texture); m_MaterialCollection->addMaterial(material); // Blok material material = new QGLMaterial; material->setObjectName("BlokMaterial"); texture = new QGLTexture2D; texture->setImage(QImage(":/SimpleBlock.png")); material->setTexture(texture); material->setTexture(lightTexture, 1); material->setAmbientColor(ambientColor); material->setShininess(0.2f); m_MaterialCollection->addMaterial(material); // Ball materials material = new QGLMaterial; material->setObjectName("BallMaterial1"); material->setAmbientColor(ambientColor); material->setDiffuseColor(QColor(255, 255, 64)); material->setTexture(texture, 0); material->setTexture(lightTexture, 1); material->setShininess(1.0f); material->setSpecularColor(material->diffuseColor()); m_MaterialCollection->addMaterial(material); material = new QGLMaterial; material->setObjectName("BallMaterial2"); material->setAmbientColor(ambientColor); material->setDiffuseColor(QColor(255, 64, 64)); material->setTexture(texture, 0); material->setTexture(lightTexture, 1); material->setShininess(1.0f); material->setSpecularColor(material->diffuseColor()); m_MaterialCollection->addMaterial(material); material = new QGLMaterial; material->setObjectName("BallMaterial3"); material->setDiffuseColor(QColor(64, 64, 255)); material->setAmbientColor(ambientColor); material->setTexture(texture, 0); material->setTexture(lightTexture, 1); material->setShininess(1.0f); material->setSpecularColor(material->diffuseColor()); m_MaterialCollection->addMaterial(material); material = new QGLMaterial; material->setObjectName("BallMaterial4"); material->setDiffuseColor(QColor(64, 255, 64)); material->setAmbientColor(ambientColor); material->setTexture(texture, 0); material->setTexture(lightTexture,1); material->setShininess(1.0f); material->setSpecularColor(material->diffuseColor()); m_MaterialCollection->addMaterial(material); material = new QGLMaterial; material->setObjectName("LightFlareMaterial"); texture = new QGLTexture2D; texture->setImage(QImage(":/flare.png")); material->setTexture(texture); m_MaterialCollection->addMaterial(material); material = new QGLMaterial; material->setObjectName("FontMaterial"); texture = new QGLTexture2D; texture->setImage(QImage(":/scorefont.png")); material->setTexture(texture); m_MaterialCollection->addMaterial(material); }
void tst_QGLRender::sequence() { QSKIP("QWidget: Cannot create a QWidget when no GUI is being used"); QSharedPointer<QGLMaterialCollection> palette(new QGLMaterialCollection()); // create a yellow lit material QGLMaterial *mat = new QGLMaterial; mat->setAmbientColor(Qt::yellow); int ix0 = palette->addMaterial(mat); // create a blue lit material mat = new QGLMaterial; mat->setAmbientColor(Qt::blue); int ix1 = palette->addMaterial(mat); // create a grey textured material int tx0; { QImage uv(1024, 1024, QImage::Format_ARGB32); uv.fill(qRgba(196, 196, 196, 196)); mat = new QGLMaterial; mat->setAmbientColor(Qt::gray); QGLTexture2D *tex = new QGLTexture2D; tex->setImage(uv); mat->setTexture(tex); tx0 = palette->addMaterial(mat); } QGLSceneNode *scene = new QGLSceneNode; scene->setPalette(palette); QGLSceneNode *node = 0; QGLSceneNode *prim; { QGLBuilder builder(palette); QVector3D a(-1.0f, -1.0f, 0.0f); QVector3D b(1.0f, -1.0f, 0.0f); QVector3D c(1.0f, 1.0f, 0.0f); QGeometryData p; p.appendVertex(a, b, c); p.generateTextureCoordinates(); builder.addTriangles(p); prim = builder.currentNode(); prim->setMaterialIndex(ix0); builder.newSection(); QVector3D d(-1.2f, -1.2f, 0.0f); QVector3D e(1.2f, -1.2f, 0.0f); QVector3D f(1.2f, 1.2f, 0.0f); QVector3D g(-1.2f, 1.2f, 0.0f); QGeometryData q; q.appendVertex(d, e, f, g); q.generateTextureCoordinates(); builder.addQuads(q); prim = builder.currentNode(); prim->setMaterialIndex(ix1); node = builder.finalizedSceneNode(); } scene->addNode(node); QGLSceneNode *cl = prim->clone(scene); cl->setMaterialIndex(tx0); cl->setEffect(QGL::LitDecalTexture2D); TestView widget(scene); if (!widget.context()->isValid()) QSKIP("GL Implementation not valid"); TestPainter *ptr = new TestPainter(&widget); widget.paintGL(ptr); QList<int> starts = ptr->starts(); QList<int> counts = ptr->counts(); QCOMPARE(starts.at(0), 0); QCOMPARE(counts.at(0), 3); QCOMPARE(starts.at(1), 3); QCOMPARE(counts.at(1), 6); }