/* Copyright 2014 <Piotr Derkowski> */ #include "terrains.hpp" #include "TextureUtils.hpp" const sf::VertexArray textures::terrains::hills = makeQuad(96, 48, sf::Vector2f(1, 197)); const sf::VertexArray textures::terrains::mountains = makeQuad(96, 48, sf::Vector2f(1, 197)); const sf::VertexArray textures::terrains::grassland = makeQuad(96, 48, sf::Vector2f(1, 99)); const sf::VertexArray textures::terrains::river = makeQuad(96, 48, sf::Vector2f(1, 99)); const sf::VertexArray textures::terrains::plains = makeQuad(96, 48, sf::Vector2f(1, 50)); const sf::VertexArray textures::terrains::forest = makeQuad(96, 48, sf::Vector2f(1, 50)); const sf::VertexArray textures::terrains::desert = makeQuad(96, 48, sf::Vector2f(1, 1)); const sf::VertexArray textures::terrains::visibleKnown = makeQuad(96, 48, sf::Vector2f(98, 50)); const sf::VertexArray textures::terrains::unvisibleKnown = makeQuad(96, 48, sf::Vector2f(98, 99)); const sf::VertexArray textures::terrains::unknown = makeQuad(96, 48, sf::Vector2f(98, 148));
// Should show two rotating cubes, one in the middle of the screen being rendered normally, the // other one in the top right hand corner, being rendered onto a texture mapped on a quad TEST_F(OsgScreenSpaceQuadRenderTests, RenderTextureTest) { auto defaultCamera = viewElement->getCamera(); auto camera = std::make_shared<OsgCamera>("RenderPass"); camera->setProjectionMatrix(defaultCamera->getProjectionMatrix()); camera->setRenderGroupReference("RenderPass"); camera->setGroupReference(SurgSim::Graphics::Representation::DefaultGroupName); auto dimensions = viewElement->getView()->getDimensions(); std::shared_ptr<OsgRenderTarget2d> renderTargetOsg = std::make_shared<OsgRenderTarget2d>(dimensions[0], dimensions[1], 1.0, 2, true); camera->setRenderTarget(renderTargetOsg); viewElement->addComponent(camera); int screenWidth = dimensions[0]; int screenHeight = dimensions[1]; int width = dimensions[0] / 3; int height = dimensions[1] / 3; std::shared_ptr<ScreenSpaceQuadRepresentation> quad; quad = makeQuad("Color1", width, height, screenWidth - width, screenHeight - height); quad->setTexture(renderTargetOsg->getColorTargetOsg(0)); viewElement->addComponent(quad); quad = makeQuad("Color2", width, height, screenWidth - width, screenHeight - height * 2); quad->setTexture(renderTargetOsg->getColorTargetOsg(1)); viewElement->addComponent(quad); quad = makeQuad("Depth", width, height, 0.0, screenHeight - height); quad->setTexture(renderTargetOsg->getDepthTargetOsg()); viewElement->addComponent(quad); Quaterniond quat = Quaterniond::Identity(); RigidTransform3d startPose = SurgSim::Math::makeRigidTransform(quat, Vector3d(0.0, 0.0, -0.2)); quat = SurgSim::Math::makeRotationQuaternion(M_PI, Vector3d::UnitY().eval()); RigidTransform3d endPose = SurgSim::Math::makeRigidTransform(quat, Vector3d(0.0, 0.0, -0.2)); auto box = std::make_shared<OsgBoxRepresentation>("Graphics"); box->setSizeXYZ(0.05, 0.05, 0.05); box->setGroupReference("RenderPass"); auto boxElement1 = std::make_shared<BasicSceneElement>("Box 1"); boxElement1->addComponent(box); boxElement1->setPose(startPose); scene->addSceneElement(boxElement1); box = std::make_shared<OsgBoxRepresentation>("Graphics"); box->setSizeXYZ(0.05, 0.05, 0.05); auto boxElement2 = std::make_shared<BasicSceneElement>("Box 2"); boxElement2->addComponent(box); boxElement2->setPose(startPose); scene->addSceneElement(boxElement2); /// Run the thread runtime->start(); int numSteps = 100; boost::this_thread::sleep(boost::posix_time::milliseconds(1000)); for (int i = 0; i < numSteps; ++i) { double t = static_cast<double>(i) / numSteps; boxElement1->setPose(SurgSim::Testing::interpolate<RigidTransform3d>(startPose, endPose, t)); boxElement2->setPose(SurgSim::Testing::interpolate<RigidTransform3d>(endPose, startPose, t)); boost::this_thread::sleep(boost::posix_time::milliseconds(1000 / 100)); } graphicsManager->dumpDebugInfo(); }