![]() |
GLC_lib | |||||||
| OpenGL Library Class | ||||||||
Now that we know how displaying several objects by uses GLC_World class which contains a GLC_3DViewInstance class and a GLC_StructOccurence which the root assembly. This example show how to construct an assembly and how to positioning objects by using transformation with GLC_Matrix4x4 class.
Download Source and binaries of this example.
Only the difference compared to the example04 is developed.
##ifndef GLWIDGET_H_ #define GLWIDGET_H_ #include <QGLWidget> //////////////////////////// GLC specific/////////////////////////////////////// // The factory #include <GLC_Factory> // Light #include <GLC_Light> // The Viewport with a default camera #include <GLC_Viewport> // The world which manage product structure #include <GLC_World> // The Mover controller is used to change the point of view #include <GLC_MoverController> //////////////////////////End GLC specific///////////////////////////////////// class GLWidget : public QGLWidget { public: GLWidget(QWidget *p_parent); ~GLWidget(); private: void initializeGL(); void paintGL(); void resizeGL(int width, int height); // Create GLC_Object to display void CreateScene(); //Mouse events void mousePressEvent(QMouseEvent * e); void mouseMoveEvent(QMouseEvent * e); void mouseReleaseEvent(QMouseEvent * e); private: //////////////////////////// GLC specific/////////////////////////////////////// GLC_Factory* m_pFactory; GLC_Light m_Light; QColor m_DefaultColor; GLC_World m_World; GLC_Viewport m_GlView; GLC_MoverController m_MoverController; //////////////////////////End GLC specific///////////////////////////////////// }; #endif /*GLWIDGET_H_*/
The main change is in the method CreateScene().
// Create GLC_Object to display void GLWidget::CreateScene() { GLC_StructOccurence* pRoot= m_World.rootOccurence(); GLC_StructInstance* pInstance= NULL; // Create a box at the center of the scene GLC_3DRep box(m_pFactory->createBox(0.1, 0.1, 0.1)); box.geomAt(0)->addMaterial(new GLC_Material(m_DefaultColor)); pRoot->addChild(new GLC_StructInstance(box.clone())); // create Z axis representation GLC_3DRep cylinder(m_pFactory->createCylinder(0.02, 2.0)); cylinder.geomAt(0)->addMaterial(new GLC_Material(Qt::blue)); pRoot->addChild(new GLC_StructInstance(cylinder.clone())); // create X axis representation cylinder= m_pFactory->createCylinder(0.02, 2.0); cylinder.geomAt(0)->addMaterial(new GLC_Material(Qt::red)); GLC_Matrix4x4 matRot(glc::Y_AXIS, glc::PI/2); //Create a rotation matrix pInstance= new GLC_StructInstance(cylinder.clone()); pInstance->move(matRot); // move the cylinder pRoot->addChild(pInstance); // create Y axis representation cylinder= m_pFactory->createCylinder(0.02, 2.0); cylinder.geomAt(0)->addMaterial(new GLC_Material(Qt::green)); matRot.setMatRot(glc::X_AXIS, -glc::PI/2); // Set rotation matrix pInstance= new GLC_StructInstance(cylinder.clone()); pInstance->move(matRot); // move the cylinder pRoot->addChild(pInstance); // Create 3 circles around axis GLC_3DRep circle(m_pFactory->createCircle(2.5)); pRoot->addChild(new GLC_StructInstance(circle.clone())); circle= m_pFactory->createCircle(2.5); matRot.setMatRot(glc::Y_AXIS, glc::PI/2); pInstance= new GLC_StructInstance(circle.clone()); pInstance->move(matRot); // move the cylinder pRoot->addChild(pInstance); circle= m_pFactory->createCircle(2.5); matRot.setMatRot(glc::X_AXIS, glc::PI/2); pInstance= new GLC_StructInstance(circle.clone()); pInstance->move(matRot); // move the cylinder pRoot->addChild(pInstance); }
In this example we create all representations with the GLC_Factory class. The 3D representation created by GLC_Factory is included in the GLC_3DRep class.
GLC_3DRep contains a list of GLC_VboGeom (It's possible to have more than one body in a 3DRep).GLC_VboGeom is the base class of all GLC_Lib 3D geometries.
The geometries included in GLC_3DRep can be access by the method GLC_3DRep::geomAT(int).
In GLC_Lib the assembly structure is made of GLC_StructOccurence class. See Documentation for more informations.
| ©2005-2010 Laurent Ribon |