Exemplo n.º 1
0
// Draw tile
void tile_type::draw( double x, double y, double z, bool newTick){
  if(true){
    // Make sure there is a model
    if( model != "MODEL_NONE"){
      // Shader
      if( type == TILE_WATER){
        glUseProgram( waterShader);
        changeMaterial( MATERIAL_WATER);
      }

      glBindTexture(GL_TEXTURE_2D, image_reference_number[newTick]);

      // Go into modelview matrix
      glPushMatrix();

      // Translate in
      glTranslatef( x, y, z);

      if( model == "MODEL_CUBE" || key[KEY_T]){
        quick_primatives::cube( 1.0f, 0.75f);
      }
      // Small Cube
      else if( model == "MODEL_CUBE_SMALL"){
        quick_primatives::model_render( 0.25f, quick_primatives::test_model);
      }
      // Flat Cube
      else if( model == "MODEL_FLAT"){
        quick_primatives::cube_flat( 1.0f);
      }
      // X like planes
      else if( model == "MODEL_DOUBLE_PLANE"){
        quick_primatives::double_plane( 1.0f);
      }
      // X like planes tall
      else if( model == "MODEL_DOUBLE_PLANE_TALL"){
        quick_primatives::double_plane_tall( 1.0f);
      }

      // Shader back
      if( currentMaterial != MATERIAL_DEFAULT){
        changeMaterial( MATERIAL_DEFAULT);
        glUseProgram( defaultShader);
      }

      // Back
      glPopMatrix();
    }
  }
}
void FormMaterialIndicesManager::chooseMaterialByColor(QColor color){
    // check if materials are enabled
    if(FBOImageProporties::currentMaterialIndeks == MATERIALS_DISABLED) return;

    bool bColorFound = false;
    // look for the color in materials
    for(int m = 0 ; m < ui->listWidgetMaterialIndices->count() ; m++){
        // get the material color
        QColor materialColor = ui->listWidgetMaterialIndices->item(m)->backgroundColor();
        int compValue = abs(materialColor.red() - color.red())
                     +  abs(materialColor.green() - color.green())
                     +  abs(materialColor.blue() - color.blue());

        // if color are same change material
        if(compValue == 0){
            QCoreApplication::processEvents();
            changeMaterial(m);
            bColorFound = true;
            break;
        }

    } // end of for

    // if color not found on the list
    if(!bColorFound){
        QMessageBox::information(this, QGuiApplication::applicationDisplayName(),
                                 "The picked color was not found in the materials table\n"
                                 "make sure you chose the correct color e.g\n"
                                 "not the sky box background.");
    }
}
Exemplo n.º 3
0
void PersonShape::createEntity(const std::string &name,
                               PersonShape::Type type,
                               Ogre::SceneManager *scene_manager)
{
  ROS_DEBUG_STREAM("create new entity");

  if (type == PersonShape::BODY)
  {
#if (OGRE_VERSION_MINOR >=8)
    ogre_tools::STLLoader stl_loader;
    Ogre::MeshPtr mesh_ptr;
    std::string mesh_name = "rviz_person_body";
    stl_loader.load(getMeshRoot()+"/meshes/rviz_body.stl");
    mesh_ptr = stl_loader.toMesh(mesh_name);
    entity_ = scene_manager->createEntity(name, mesh_ptr->getName() );
#else
    entity_ = scene_manager->createEntity(name, "cylinder.mesh");
#endif
  }
  else{
    entity_ = scene_manager->createEntity(name,  Ogre::SceneManager::PT_PLANE);
  }

  // set _material
  changeMaterial(type);
  entity_->setMaterial(material_);

  type_ = type;
}
void FormMaterialIndicesManager::toggleMaterials(bool toggle){

    if(toggle == false){
        FBOImageProporties::currentMaterialIndeks = MATERIALS_DISABLED; // render normaly
        emit materialChanged();
    }else{ // if material group is enabled -> replot all materials

        int lastMaterial = lastMaterialIndex;
        // repaint all materials
        for(int m = 0 ; m < ui->listWidgetMaterialIndices->count() ; m++){
            QCoreApplication::processEvents();
            changeMaterial(m);
        }
        changeMaterial(lastMaterial);
    }

    emit  materialsToggled(toggle);

}
Exemplo n.º 5
0
void GeometryGather::addText(const Font* font, float fontSize, const UnicodeString& text, const Color& color)
{
    if (!font->isReadyForUse() || !text.length())
        return;

    changeMaterial("Font");

    ensureTransformIsCurrent();
    currentQueue_->queue->getItems().addDrawTextItem(font, fontSize, text, color);
}
Exemplo n.º 6
0
void GeometryGather::addImmediateTriangles(unsigned int triangleCount)
{
    changeMaterial("ImmediateGeometry");

    // Expand the immediate triangles chunk if needed
    if ((immediateTriangleCount + triangleCount) * 3 > immediateTriangleGeometry.getVertexCount())
    {
        immediateTriangleGeometry.unlockVertexData();

        immediateTriangleGeometry.unregisterWithRenderer();

        if (immediateTriangleGeometry.getVertexCount() == 0)
        {
            immediateTriangleGeometry.setDynamic(true);
            immediateTriangleGeometry.addVertexStream({VertexStream::Position, 3});
            immediateTriangleGeometry.addVertexStream({VertexStream::DiffuseTextureCoordinate, 2});
            immediateTriangleGeometry.addVertexStream({VertexStream::Color, 4, TypeUInt8});
        }

        auto initialVertexCount = immediateTriangleGeometry.getVertexCount();

        immediateTriangleGeometry.setVertexCount(
            std::max(immediateTriangleGeometry.getVertexCount() * 2,
                     immediateTriangleGeometry.getVertexCount() + triangleCount * 3));

        // Reset the new vertex data
        auto vertices = immediateTriangleGeometry.lockVertexData<ImmediateVertex>();
        for (auto i = initialVertexCount; i < immediateTriangleGeometry.getVertexCount(); i++)
            vertices[i] = ImmediateVertex();
        immediateTriangleGeometry.unlockVertexData();

        // Setup indices while preserving draw items
        auto indices = Vector<unsigned int>(immediateTriangleGeometry.getVertexCount());
        for (auto i = 0U; i < indices.size(); i++)
            indices[i] = i;
        immediateTriangleGeometry.setupIndexData(immediateTriangleGeometry.getDrawItems(), indices);

        immediateTriangleGeometry.registerWithRenderer();
    }

    // Add a drawitem for these immediate triangles and queue it for rendering
    immediateTriangleGeometry.appendDrawItem(
    {GraphicsInterface::TriangleList, triangleCount * 3, immediateTriangleCount * 3});

    addGeometryChunk(immediateTriangleGeometry, immediateTriangleGeometry.getDrawItems().size() - 1);
}
Exemplo n.º 7
0
void display()
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluPerspective(80.0, 1.0, 0.25, 8.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  gluLookAt(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
  glRotatef(theta[0], 1.0, 0.0, 0.0);
  glRotatef(theta[1], 0.0, 1.0, 0.0);
  glRotatef(theta[2], 0.0, 0.0, 1.0);
  changeMaterial(&flat_yellow);
  glScalef(1.0, 1.0, 0.33);
  glCallList(sphere_list);
  glutSwapBuffers();
}
Exemplo n.º 8
0
	void CGraphics::process(const std::shared_ptr<CMessage>& message) {
		switch( message->getMessageType() ) {
			case Message::ACTIVATE: {
				setVisible(std::static_pointer_cast<CMessageActivate>(message)->getActivated());
				break;
			}
			case Message::CHANGE_MATERIAL: {
				std::shared_ptr<CMessageChangeMaterial> chgMatMsg = std::static_pointer_cast<CMessageChangeMaterial>(message);
				changeMaterial( chgMatMsg->getMaterialName() );
				break;
			}
			case Message::DECAL: {
				std::shared_ptr<CMessageDecal> msgDecal = std::static_pointer_cast<CMessageDecal>(message);
				drawDecal(msgDecal->getPosition(), msgDecal->getTexture(), msgDecal->getRandomSize());
				break;
			}
		}

		} // process