本文整理汇总了C++中util::Reference::addChild方法的典型用法代码示例。如果您正苦于以下问题:C++ Reference::addChild方法的具体用法?C++ Reference::addChild怎么用?C++ Reference::addChild使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类util::Reference
的用法示例。
在下文中一共展示了Reference::addChild方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: test_large_scene
int test_large_scene(Util::UI::Window * window, Util::UI::EventContext & eventContext) {
// texture registry
std::map<std::string, Util::Reference<Rendering::Texture> > textures;
std::cout << "Create FrameContext...\n";
FrameContext fc;
unsigned int renderingFlags = /*BOUNDING_BOXES|SHOW_META_OBJECTS|*/FRUSTUM_CULLING/*|SHOW_COORD_SYSTEM*/;//|SHOW_COORD_SYSTEM;
std::cout << "Create scene graph...\n";
Util::Reference<GroupNode> root = new MinSG::ListNode();
/// Skybox
SkyboxState * sb = SkyboxState::createSkybox("Data/texture/?.bmp");
root->addState(sb);
/// Some shperes...
{
std::default_random_engine engine;
std::uniform_real_distribution<float> coordinateDist(0.0f, 200.0f);
std::vector<Util::Reference<Rendering::Mesh> > spheres;
Util::Reference<Rendering::Mesh> icosahedron = Rendering::MeshUtils::PlatonicSolids::createIcosahedron();
for(int i=0;i<6;++i)
spheres.push_back(Rendering::MeshUtils::PlatonicSolids::createEdgeSubdivisionSphere(icosahedron.get(), i)); // 6... 81920 triangles each
for (int i = 0; i < 1000; i++) {
// create a real clone inclusive internal data!
MinSG::GeometryNode * gn = new GeometryNode(spheres[std::uniform_int_distribution<std::size_t>(0, spheres.size() - 1)(engine)]->clone());
gn->moveRel(Geometry::Vec3(coordinateDist(engine), coordinateDist(engine), coordinateDist(engine)));
root->addChild(gn);
gn->scale(0.1 + std::uniform_real_distribution<float>(0.0f, 1000.0f)(engine) / 400.0);
}
}
/// Camera
Node * schwein = loadModel(Util::FileName("Data/model/Schwein.low.t.ply"), MESH_AUTO_CENTER | MESH_AUTO_SCALE);
ListNode * camera = new ListNode();
CameraNode * camNode = new CameraNode();
camNode->setViewport(Geometry::Rect_i(0, 0, 1024, 768));
camNode->setNearFar(0.1, 2000);
camNode->applyVerticalAngle(80);
camNode->moveRel(Geometry::Vec3(0, 4, 10));
camera->addChild(camNode);
camera->addChild(schwein);
schwein->moveRel(Geometry::Vec3(0, 0, 0));
schwein->rotateLocal_deg(180, Geometry::Vec3(0, 1, 0));
LightNode * myHeadLight = LightNode::createPointLight();
myHeadLight->scale(1);
myHeadLight->moveRel(Geometry::Vec3(0, 0, 0));
camera->addChild(myHeadLight);
LightingState * lightState = new LightingState;
lightState->setLight(myHeadLight);
root->addState(lightState);
root->addChild(camera);
/// Eventhandler
MoveNodeHandler * eh = new MoveNodeHandler();
MoveNodeHandler::initClaudius(eh, camera);
// ---------------------------------------------------------------------------------------------
Rendering::RenderingContext::clearScreen(Util::Color4f(0.5f, 0.5f, 0.5f, 0.5f));
// ----
GET_GL_ERROR();
uint32_t fpsFrameCounter = 0;
Util::Timer fpsTimer;
std::cout << "\nEntering main loop...\n";
// program main loop
bool done = false;
while (!done) {
++fpsFrameCounter;
double seconds = fpsTimer.getSeconds();
if (seconds > 1.0) {
double fps = static_cast<double> (fpsFrameCounter) / seconds;
std::cout << "\r " << fps << " fps ";
std::cout.flush();
fpsTimer.reset();
fpsFrameCounter = 0;
}
// message processing loop
eventContext.getEventQueue().process();
while (eventContext.getEventQueue().getNumEventsAvailable() > 0) {
Util::UI::Event event = eventContext.getEventQueue().popEvent();
// check for messages
switch (event.type) {
//.........这里部分代码省略.........