Example #1
0
Controller::Controller(const ControllerResource* cr, SceneGraph& sg, UnitId id, PxPhysics* physics, PxControllerManager* manager)
	: m_resource(cr)
	, m_scene_graph(sg)
	, _unit_id(id)
	, m_manager(manager)
	, m_controller(NULL)
{
	TransformInstance ti = sg.get(id);
	const Vector3 pos = sg.world_position(ti);

	PxCapsuleControllerDesc desc;
	desc.climbingMode = PxCapsuleClimbingMode::eCONSTRAINED;
	desc.nonWalkableMode = PxCCTNonWalkableMode::eFORCE_SLIDING;
	desc.radius = cr->radius;
	desc.height = cr->height;
	desc.slopeLimit = cos(cr->slope_limit);
	desc.stepOffset = cr->step_offset;
	desc.contactOffset = cr->contact_offset;
	desc.upDirection = PxVec3(0.0, 1.0, 0.0);
	desc.material = physics->createMaterial(0.5f, 0.5f, 0.5f);
	desc.position = PxExtendedVec3(pos.x, pos.y, pos.z);
	desc.reportCallback = &m_callback;
	CE_ASSERT(desc.isValid(), "Capsule is not valid");

	m_controller = manager->createController(desc);
	CE_ASSERT(m_controller, "Failed to create controller");
}
Example #2
0
Node::~Node() 
{
  deleteChildNodes(); //Remove this string for optimise process of release memory

	SceneGraph *sg = getSceneGraph();
	if (sg) {
		if (sg->getSelectedShapeNode() == this)
			sg->setSelectedShapeNode(NULL);
		if (sg->getSelectedNode() == this)
			sg->setSelectedNode(NULL);
	}

	remove();

	if (isInstanceNode() == true)
		setOriginalMembers();

#if defined(CX3D_SUPPORT_JSAI)
	delete mJNode;
#endif

	delete mName;
	delete mExposedField;
	delete mEventInField;
	delete mEventOutField;
	delete mField;
	delete mPrivateField;
	delete mPrivateNodeVector;
	delete mChildNodes;
	delete mInitialized;
}
Example #3
0
Node::~Node() 
{
	deleteChildNodes();

	SceneGraph *sg = getSceneGraph();
	if (sg) {
		if (sg->getSelectedShapeNode() == this)
			sg->setSelectedShapeNode(NULL);
		if (sg->getSelectedNode() == this)
			sg->setSelectedNode(NULL);
	}

	remove();

	if (isInstanceNode() == true)
		setOriginalMembers();

#ifdef SUPPORT_JSAI
	delete mJNode;
#endif

	delete mName;
	delete mType;
	delete mExposedField;
	delete mEventInField;
	delete mEventOutField;
	delete mField;
	delete mPrivateField;
	delete mPrivateNodeVector;
	delete mChildNodes;
	delete mInitialized;
}
void UndoOrthoViewChangeTransformScaleFn(void *info)
{
	UndoOrthoViewChangeTransformScale *undoInfo = (UndoOrthoViewChangeTransformScale *)info;

	SceneGraph *sg = GetWorld()->getSceneGraph();
	if (sg->hasNode(undoInfo->transform) == true)
		undoInfo->transform->setScale(undoInfo->scale);
}
void UndoOrthoViewChangeTransformRotationFn(void *info)
{
	UndoOrthoViewChangeTransformRotation *undoInfo = (UndoOrthoViewChangeTransformRotation *)info;

	SceneGraph *sg = GetWorld()->getSceneGraph();
	if (sg->hasNode(undoInfo->transform) == true)
		undoInfo->transform->setRotation(undoInfo->rotation);
}
void UndoOrthoViewCreatePrimitiveFn(void *info)
{
	UndoOrthoViewCreatePrimitive *undoInfo = (UndoOrthoViewCreatePrimitive *)info;

	SceneGraph *sg = GetWorld()->getSceneGraph();
	if (sg->hasNode(undoInfo->transform) == true) {
		CtbGetTreeView()->deleteSceneGraphNode(undoInfo->transform);
		delete undoInfo->transform;
	}
}
Example #7
0
void initSceneData() {
  scene = loadScene("data/room.obj");
  scene.generateBvhs();
  scene.setCamera(Camera(glm::vec3(0.0f, 2.0f, -4.0f),
                         glm::vec3(0.0f, 1.5f, -1.5f),
                         glm::vec3(0.0f, 1.0f, 0.0f),
                         60.0f, PROJ_WIDTH, PROJ_HEIGHT));
  scene.addLight(Light(glm::vec3(0.0f, 2.99f, -0.75f),
                       glm::vec3(1.0f, 1.0f, 1.0f), 20.0f));
}
Example #8
0
void Node::removeRoutes() 
{
	SceneGraph *sg = getSceneGraph();
	if (sg) {
		Route *route=sg->getRoutes();
		while (route) {
			Route *nextRoute = route->next();
			if (route->getEventInNode() == this || route->getEventOutNode() == this)
				delete route;
			route = nextRoute;
		}
	}
}
Example #9
0
int main(int argc, char** argv) {
	SceneGraph* sg = new SceneGraph();
	sg->Parse("scene1.txt");
	sg->traverse(glm::mat4());//begin traversing
	sg->writeToFile("scene1_results.txt");

	SceneGraph* sg2 = new SceneGraph();
	sg2->Parse("scene2.txt");
	sg2->traverse(glm::mat4());//begin traversing
	sg2->writeToFile("scene2_results.txt");

	//system("pause");
}
void UndoOrthoViewDeletePrimitiveFn(void *info)
{
	UndoOrthoViewDeletePrimitive *undoInfo = (UndoOrthoViewDeletePrimitive *)info;

	SceneGraph *sg = GetWorld()->getSceneGraph();
	if (undoInfo->parentNode != NULL) {
		if (sg->hasNode(undoInfo->parentNode) == true)
			undoInfo->parentNode->addChildNode(undoInfo->shape);
	}
	else
		sg->addNode(undoInfo->shape);

	CtbGetTreeView()->addSceneGraphNode(undoInfo->shape, undoInfo->parentNode);
}
void Object3D::addDragger(osgManipulator::Dragger *dragger)
{
    if(_isPickable)
    {
        removeDragger();

        this->getOrCreateStateSet()->setMode(GL_NORMALIZE, osg::StateAttribute::ON);
        dragger->setupDefaultGeometry();

        ref_ptr<osgManipulator::Selection> selection = _selNode;
#if 0
        int mask = dragger->getNodeMask();
        mask = mask & ~SHADOW_CASTER_MASK;
        mask = mask & ~SHADOW_RECEIVER_MASK;
        dragger->setNodeMask(mask);
        SceneGraph* sg = *(_sgList.begin());
        sg->getSceneGraph()->addChild(dragger);
#else
        ref_ptr<Group> parent = new Group;
        // the dragger is added to the scenegraph of the viewer in which the add is made, and only this one
        Group* group = this->getParent(0)->getParent(0)->getParent(0)
        #if USE_SHADOWS
                ->getParent(0)
        #endif
                ;
        parent->addChild(dragger);
        group->addChild(parent);
#endif

        float scale = this->getOriginalNode()->getBound().radius() * 1.6;
        dragger->setMatrix(this->getFrameMatrix() *
                           Matrix::inverse(Matrix::translate(this->getFrameMatrix().getTrans())) *
                           Matrix::inverse(Matrix::rotate(this->getTransformationMatrix().getRotate())) *
                           Matrix::scale(scale, scale, scale) *
                           Matrix::translate(this->getOriginalNode()->getBound().center()));

        dragger->postMult(selection->getMatrix());

        ref_ptr<osgManipulator::CommandManager> commandManager = new osgManipulator::CommandManager();
        commandManager->connect(*dragger, *selection);
        _dragger = dragger;
        int mask = _dragger->getNodeMask();
        mask = mask & ~SHADOW_CASTER_MASK;
        mask = mask & ~SHADOW_RECEIVER_MASK;
        _dragger->setNodeMask(mask);
    }
    else printNonPickable();
}
Example #12
0
void GBufferPass::update_ubershader_from_scene(RenderContext const& ctx,
                                               SerializedScene const& scene,
                                               SceneGraph const& graph) {
  bool ubershader_available = true;
  for (auto const& geometry_pair : scene.geometrynodes_) {
    ubershader_available =
        ubershader_available && ubershaders_.count(geometry_pair.first);
  }

  if (!ubershader_available) {
    auto get_ubershader = [&](node::Node * n) {
      node::GeometryNode* geode = dynamic_cast<node::GeometryNode*>(n);
      if (geode) {
        std::type_index type(typeid(*geode));
        if (!ubershaders_.count(type)) {
          auto const& ressource =
              GeometryDatabase::instance()->lookup(geode->get_filename());
          if (ressource) {
            auto ubershader = ressource->create_ubershader();
            ubershader->cleanup(ctx);
            ubershader->create(cached_materials_);
            ubershaders_[type] = ubershader;
          }
        }
      }
    }
    ;
    gua::dfs_traverse(graph.get_root().get(), get_ubershader);
  }
}
Example #13
0
void Node::removeSFNodes() 
{
	SceneGraph *sg = getSceneGraph();
	if (sg) {
		for (ScriptNode *script = sg->findScriptNode(); script; script=script->nextTraversal()) {
			for (int n=0; n<script->getNFields(); n++) {
				Field *field = script->getField(n);
				if (field->getType() == fieldTypeSFNode) {
					SFNode *sfnode = (SFNode *)field;
					if (sfnode->getValue() == this)
						sfnode->setValue((Node *)NULL);
				}
			}
		}
	}
}
Example #14
0
void Serializer::check(SerializedScene& output,
                       SceneGraph const& scene_graph,
                       std::string const& render_mask,
                       bool draw_bounding_boxes,
                       bool draw_rays,
                       bool enable_frustum_culling) {

  data_ = &output;


  std::size_t geometry_count = data_->geometrynodes_.size();
  std::size_t volume_count = data_->volumenodes_.size();
  std::size_t point_light_count = data_->point_lights_.size();
  std::size_t spot_light_count = data_->spot_lights_.size();
  std::size_t sun_light_count = data_->sun_lights_.size();
  std::size_t ray_count = data_->rays_.size();
  std::size_t textured_quad_count = data_->textured_quads_.size();

  data_->geometrynodes_.clear();
  data_->volumenodes_.clear();
  data_->point_lights_.clear();
  data_->spot_lights_.clear();
  data_->sun_lights_.clear();
  data_->textured_quads_.clear();

  data_->bounding_boxes_.clear();
  data_->rays_.clear();
  draw_bounding_boxes_ = draw_bounding_boxes;
  draw_rays_ = draw_rays;

  if (draw_bounding_boxes_) {
    data_->materials_.insert("gua_bounding_box");
    data_->bounding_boxes_.reserve(geometry_count + point_light_count + spot_light_count + ray_count);
  }

  if (draw_rays_) {
    data_->materials_.insert("gua_bounding_box");
    data_->rays_.reserve(ray_count);
  }

  data_->materials_.insert("gua_textured_quad");

  // assuming the number of nodes stays quite constant through time,
  // reserving the old size might save some time

  data_->volumenodes_.reserve(volume_count);
  data_->point_lights_.reserve(point_light_count);
  data_->spot_lights_.reserve(spot_light_count);
  data_->sun_lights_.reserve(sun_light_count);
  data_->textured_quads_.reserve(textured_quad_count);

  enable_frustum_culling_ = enable_frustum_culling;

  current_render_mask_ = Mask(render_mask);
  current_frustum_ = output.frustum;
  current_center_of_interest_ = output.center_of_interest;

  scene_graph.accept(*this);
}
void Object3D::removeDragger()
{
    if(_dragger.valid())
    {
#if 0
        SceneGraph* sg = *(_sgList.begin());
        sg->getSceneGraph()->removeChild(_dragger.get());
#else
        osg::Group* group = this->getParent(0)->getParent(0)->getParent(0)
        #if USE_SHADOWS
                ->getParent(0)
        #endif
                ;
        group->removeChild(_dragger->getParent(0));
#endif
        _dragger = NULL;
    }
}
    //---------------------------------------------------------------
    void LightExporter::exportLights ( )
    {
        if ( !ExportOptions::exportLights() ) return;

        // Get the list with the transform nodes.
        SceneGraph* sceneGraph = mDocumentExporter->getSceneGraph();
        SceneElementsList* exportNodesTree = sceneGraph->getExportNodesTree();

        // Export all/selected DAG nodes
        size_t length = exportNodesTree->size();
        for ( uint i = 0; i < length; ++i )
        {
            SceneElement* sceneElement = ( *exportNodesTree ) [i];
            exportLights ( sceneElement );
        }

        closeLibrary();
    }
Example #17
0
		virtual void *operator()( void *item )
		{
			SceneGraph *s = (SceneGraph*)item;
			ScenePlug::ScenePath path;
			s->path( path );

			try
			{
				ContextPtr context = new Context( *m_context, Context::Borrowed );
				context->set( ScenePlug::scenePathContextName, path );
				Context::Scope scopedContext( context.get() );

				if( m_update )
				{
					// we're re-traversing this location, so lets only recompute attributes where
					// their hashes change:

					IECore::MurmurHash attributesHash = m_scene->attributesPlug()->hash();
					if( attributesHash != s->m_attributesHash )
					{
						s->m_attributes = m_scene->attributesPlug()->getValue( &attributesHash );
						s->m_attributesHash = attributesHash;
					}
				}
				else
				{
					// First traversal: attributes and attribute hash should have been computed
					// by the SceneGraphBuildTasks, so we only need to compute the object/transform:

					s->m_object = m_scene->objectPlug()->getValue();
					s->m_transform = m_scene->transformPlug()->getValue();

				}
			}
			catch( const std::exception &e )
			{
				std::string name;
				ScenePlug::pathToString( path, name );

				IECore::msg( IECore::Msg::Error, "InteractiveRender::update", name + ": " + e.what() );
			}

			return s;
		}
Example #18
0
void Node::remove() 
{
	LinkedListNode<Node>::remove();

	if (isInstanceNode() == false) {
		removeRoutes();
		removeSFNodes();
		removeInstanceNodes();

		if (isBindableNode()) {
			SceneGraph *sceneGraph = getSceneGraph();
			if (sceneGraph)
				sceneGraph->setBindableNode((BindableNode *)this, false);			
		}
	}

	setParentNode(NULL);
	setSceneGraph(NULL);
}
Example #19
0
static void iterateScenePortals(SceneGraph& scene, TFunc func)
{
	scene.getSceneComponentLists().iterateComponents<PortalComponent>([&](PortalComponent& comp) {
		Portal& s = static_cast<Portal&>(comp.getSceneNode());
		if(func(s))
		{
			return;
		}
	});
}
Example #20
0
static void iterateSceneSectors(SceneGraph& scene, TFunc func)
{
	scene.getSceneComponentLists().iterateComponents<SectorComponent>([&](SectorComponent& comp) {
		Sector& s = static_cast<Sector&>(comp.getSceneNode());
		if(func(s))
		{
			return;
		}
	});
}
Example #21
0
void ProximitySensorNode::update() 
{
	if (!isEnabled())
		return;

	SceneGraph *sg = getSceneGraph();
	if (!sg)
		return;

	ViewpointNode *vpoint = sg->getViewpointNode();
	if (vpoint == NULL)
		vpoint = sg->getDefaultViewpointNode();

	float vpos[3];
	vpoint->getPosition(vpos);

	float center[3];
	getCenter(center);

	float size[3];
	getSize(size);

	if (inRegion() == false) {
		if (isRegion(vpos, center, size) == true) {
			setInRegion(true);
			double time = GetCurrentSystemTime();
			setEnterTime(time);
			sendEvent(getEventOut(enterTimeFieldString));
			setIsActive(true);
			sendEvent(getEventOut(isActiveFieldString));
		}
	}
	else {
		if (isRegion(vpos, center, size) == false) {
			setInRegion(false);
			double time = GetCurrentSystemTime();
			setExitTime(time);
			sendEvent(getEventOut(exitTimeFieldString));
			setIsActive(false);
			sendEvent(getEventOut(isActiveFieldString));
		}
	}
}
Example #22
0
Error MainRenderer::render(SceneGraph& scene)
{
	ANKI_TRACE_START_EVENT(RENDER);

	// First thing, reset the temp mem pool
	m_frameAlloc.getMemoryPool().reset();

	GrManager& gl = m_r->getGrManager();
	CommandBufferInitInfo cinf;
	cinf.m_hints = m_cbInitHints;
	CommandBufferPtr cmdb = gl.newInstance<CommandBuffer>(cinf);

	// Set some of the dynamic state
	cmdb->setPolygonOffset(0.0, 0.0);

	// Run renderer
	RenderingContext ctx(m_frameAlloc);

	if(m_rDrawToDefaultFb)
	{
		ctx.m_outFb = m_defaultFb;
		ctx.m_outFbWidth = m_width;
		ctx.m_outFbHeight = m_height;
	}

	ctx.m_commandBuffer = cmdb;
	ctx.m_frustumComponent = &scene.getActiveCamera().getComponent<FrustumComponent>();
	ANKI_CHECK(m_r->render(ctx));

	// Blit renderer's result to default FB if needed
	if(!m_rDrawToDefaultFb)
	{
		cmdb->beginRenderPass(m_defaultFb);
		cmdb->setViewport(0, 0, m_width, m_height);

		cmdb->bindPipeline(m_blitPpline);
		cmdb->bindResourceGroup(m_rcGroup, 0, nullptr);

		m_r->drawQuad(cmdb);
		cmdb->endRenderPass();
	}

	// Flush the command buffer
	cmdb->flush();

	// Set the hints
	m_cbInitHints = cmdb->computeInitHints();

	ANKI_TRACE_STOP_EVENT(RENDER);

	return ErrorCode::NONE;
}
Example #23
0
void DestroyScene()
{
	if(PXEngine)
	{
		PXEngine->ShutdownPhysX();
		PXEngine = NULL;
	}
	sceneGraph.Destroy();
	/*gMeshOpaque.Destroy();
	gMeshOpaque2.Destroy();
    gMeshAlpha.Destroy();*/
    SAFE_RELEASE(gSkyboxSRV);
}
Example #24
0
void Node::removeInstanceNodes() 
{
	SceneGraph *sg = getSceneGraph();
	if (sg && isInstanceNode() == false) {
		Node *node = sg->getNodes();
		while (node) {
			Node *nextNode = node->nextTraversal();
			if (node->isInstanceNode() == true) {
				Node *refNode = node->getReferenceNode();
				while (refNode->isInstanceNode() == true)
					refNode = refNode->getReferenceNode();
				if (refNode == this) {
					node->deleteChildNodes();
					nextNode = node->nextTraversal();
					delete node;
				}
			}
			node = nextNode;
		}
	
	}
}
    //------------------------------------------------------
    void MaterialExporter::exportMaterialsBySceneGraph ()
    {
        // Get the list with the transform nodes.
        SceneGraph* sceneGraph = mDocumentExporter->getSceneGraph();
        SceneElementsList* exportNodesTree = sceneGraph->getExportNodesTree();

        // Now go through scene graph and find all shaders, connected to the meshes.
        // So you can find the default shaders of an object.
        size_t length = exportNodesTree->size();
        for ( size_t i = 0; i < length; ++i )
        {
            SceneElement* sceneElement = ( *exportNodesTree ) [i];
            if ( !sceneElement->getIsLocal() ) continue;
            if ( !sceneElement->getIsExportNode () ) continue;

            size_t childCount = sceneElement->getChildCount();
            for ( size_t i=0; i<childCount; ++i )
            {
                SceneElement* childSceneElement = sceneElement->getChild ( i );

                exportConnectedMaterials ( childSceneElement );
            }
        }
    }
Example #26
0
int main(int argc, char **argv)
{
    if (argc < 2){
		fprintf(stderr, "Usage: %s filename\n", argv[0]);
		exit(0);
    }

	SceneGraph	sceneGraph;

	bool lodingResult = sceneGraph.load(argv[1], false);

	if (lodingResult == true) {
		sceneGraph.print();
	}
	else {
		cout << "Error(" << sceneGraph.getParserErrorLineNumber() << ") : " << sceneGraph.getParserErrorLineString() << endl;
		cout << "\t" << sceneGraph.getParserErrorMessage() << endl;
		cout << "\t" << sceneGraph.getParserErrorToken() << endl;
	}

	return 0;
}
Example #27
0
int main(int, char**) {
    TrollEngine engine;
    GLFWWindow win(1280, 720, "TrollEngine GLFW Window", true, true);
    win.setResizeCallback([] (int w, int h) { glViewport(0, 0, w, h); });
    win.showCursor(false);

    std::cout << win.context_info() << std::endl;

    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);
    glEnable(GL_BLEND);
    glBlendEquation(GL_FUNC_ADD);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glClearColor(0.2f, 0.2f, 0.2f, 1.f);
    glClearDepth(1.f);
    glDepthFunc(GL_LESS);

    ProgramBuilder pb;
    pb.vertexShader("vs.glsl")
      .fragmentShader("fs.glsl")
      .uniform("tex", ProgramBuilder::UniformType::Int)
      .uniform("modelView", ProgramBuilder::UniformType::Mat4)
      .uniform("camera", ProgramBuilder::UniformType::Mat4)
      .uniform("projection", ProgramBuilder::UniformType::Mat4);
    auto program = std::move(pb.build());

    UBO<TextOptions> opts;
    opts.data = {true, false, false, 0.1f};
    opts.upload_std140();
    auto optsIndex = program.getUniformBlockIndex("Options");
    program.uniformBlockBinding(optsIndex, 0);
    opts.bindBase(GL_UNIFORM_BUFFER, 0);

    auto texImg = GreyscaleImage::load("distanceField.png");
    auto tex = Texture::fromImage(texImg);

    glm::mat4 p = glm::perspective(glm::radians(55.f), 16.f / 9.f, 0.1f, 100.f),
              t = glm::translate(glm::mat4(1.f), glm::vec3(-6.f, 0.f, -7.f)),
              r = glm::rotate(glm::mat4(1.f), 0.f, glm::vec3(0.f, 1.f, 0.f)),
              m = t * r;

    SceneGraph scene;
    vector<glm::vec2> uvs = stringTexCoords("Hello world!");
    auto quadStrip = Mesh::quadStrip(uvs);
    auto quadStripObj = quadStrip->instantiate(m, &program, &tex);
    scene.addChild(quadStripObj);

    program.use();
    auto ubTexture = program.getUniform("tex"),
         ubModelView = program.getUniform("modelView"),
         ubProjection = program.getUniform("projection");
    auto uTexture = dynamic_cast<Uniform<int>*>(ubTexture);
    auto uModelView = dynamic_cast<Uniform<glm::mat4>*>(ubModelView);
    auto uProjection = dynamic_cast<Uniform<glm::mat4>*>(ubProjection);
    uTexture->set(0);
    uModelView->set(m);
    uProjection->set(p);

    win.registerKeyCallback('A', [&] () {
            opts.data.softenRange = min(opts.data.softenRange + 0.1f, 0.95f);
            opts.upload_std140();
        });
    win.registerKeyCallback('E', [&] () {
            opts.data.softenRange = max(opts.data.softenRange - 0.1f, 0.05f);
            opts.upload_std140();
        });

    while(!win.shouldClose()) {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        scene.render();
        win.swapBuffers();
        win.pollEvents();
    }
}
Example #28
0
void CALLBACK OnD3D11FrameRender(ID3D11Device* d3dDevice, ID3D11DeviceContext* d3dDeviceContext, double time,
                                 float elapsedTime, void* userContext)
{
	D3DXVECTOR3 cubePos;

    if (gZeroNextFrameTime) {
        elapsedTime = 0.0f;
    }
    gZeroNextFrameTime = false;

    if (gD3DSettingsDlg.IsActive()) {
        gD3DSettingsDlg.OnRender(elapsedTime);
        return;
    }

    // Lazily create the application if need be
    if (!gApp) {
        InitApp(d3dDevice);
    }

    // Lazily load scene
	/*!gMeshOpaque.IsLoaded() && !gMeshAlpha.IsLoaded() &&!gMeshOpaque2.IsLoaded()*/
    if (!sceneGraph.IsLoaded()) {
        InitScene(d3dDevice);
    }
	if(PXEngine)
	{
		for(int i = 0; i < cubeList->size(); i++)
		PXEngine->StepPhysX();
		if(cubeList)
		{
			for(int i = 0; i < cubeList->size(); i++)
			{
				if((*cubeList)[i]->id<0)
				{
					sceneGraph.SetInstancePosition(1,(*cubeList)[i]->id, (*cubeList)[i]->x, (*cubeList)[i]->y, (*cubeList)[i]->z);
				}
				else
				{
					sceneGraph.SetMeshPosition(0,(*cubeList)[i]->id, (*cubeList)[i]->x, (*cubeList)[i]->y, (*cubeList)[i]->z);
				}
			}
		}
	}

	//crosshair
	D3DRECT rec2 = {screenCenterX-20, screenCenterY, screenCenterX + 20, screenCenterY + 2};
	D3DRECT rec3 = {screenCenterX, screenCenterY - 20, screenCenterX + 2, screenCenterY + 20};

    ID3D11RenderTargetView* pRTV = DXUTGetD3D11RenderTargetView();
	
    
    D3D11_VIEWPORT viewport;
    viewport.Width    = static_cast<float>(DXUTGetDXGIBackBufferSurfaceDesc()->Width);
    viewport.Height   = static_cast<float>(DXUTGetDXGIBackBufferSurfaceDesc()->Height);
    viewport.MinDepth = 0.0f;
    viewport.MaxDepth = 1.0f;
    viewport.TopLeftX = 0.0f;
    viewport.TopLeftY = 0.0f;
	screenCenterX = viewport.Width / 2;
	screenCenterY = viewport.Height / 2;

	gViewPort.Width = viewport.Width;
	gViewPort.Height = viewport.Height;
	gViewPort.MaxZ = viewport.MaxDepth;
	gViewPort.MinZ = viewport.MinDepth;
	gViewPort.X = viewport.TopLeftX;
	gViewPort.Y = viewport.TopLeftY;


		 gApp->Render(d3dDeviceContext, pRTV, sceneGraph, gSkyboxSRV,
        gWorldMatrix, &gViewerCamera, &viewport, &gUIConstants);
	
		 
		 sceneGraph.SetMeshPosition(0,1, 100000, 100000, 100000);
    if (gDisplayUI) {
        d3dDeviceContext->RSSetViewports(1, &viewport);

        // Render HUDs in reverse order
        d3dDeviceContext->OMSetRenderTargets(1, &pRTV, 0);
        for (int i = HUD_NUM - 1; i >= 0; --i) {
            gHUD[i].OnRender(elapsedTime);
        }

        // Render text
        gTextHelper->Begin();

        gTextHelper->SetInsertionPos(2, 0);
        gTextHelper->SetForegroundColor(D3DXCOLOR(1.0f, 1.0f, 0.0f, 1.0f));
        gTextHelper->DrawTextLine(DXUTGetFrameStats(DXUTIsVsyncEnabled()));
        //gTextHelper->DrawTextLine(DXUTGetDeviceStats());

        // Output frame time
        {
            std::wostringstream oss;
            oss << 1000.0f / DXUTGetFPS() << " ms / frame";
            gTextHelper->DrawTextLine(oss.str().c_str());
        }

        // Output light info
        {
            std::wostringstream oss;
            oss << "Lights: " << gApp->GetActiveLights();
            gTextHelper->DrawTextLine(oss.str().c_str());
        }
        
        gTextHelper->End();
    }
	
}
Example #29
0
void InitScene(ID3D11Device* d3dDevice)
{
    DestroyScene();
    D3DXVECTOR3 cameraEye(0.0f, 0.0f, 0.0f);
    D3DXVECTOR3 cameraAt(0.0f, 0.0f, 0.0f);
    float sceneScaling = 1.0f;
    D3DXVECTOR3 sceneTranslation(0.0f, 0.0f, 0.0f);
    bool zAxisUp = false;

#pragma region Pick Scene
    SCENE_SELECTION scene = static_cast<SCENE_SELECTION>(PtrToUlong(gSceneSelectCombo->GetSelectedData()));
	scene = CUBES;
    switch (scene) {
		case CUBE_WORLD: {
#pragma region CUBE_WORLD
            sceneScaling = 1.0f;

			D3DXMatrixScaling(&gWorldMatrix, sceneScaling, sceneScaling, sceneScaling);
			if (zAxisUp) {
				D3DXMATRIXA16 m;
				D3DXMatrixRotationX(&m, -D3DX_PI / 2.0f);
				gWorldMatrix *= m;
			}
			{
				D3DXMATRIXA16 t;
				D3DXMatrixTranslation(&t, sceneTranslation.x, sceneTranslation.y, sceneTranslation.z);
				gWorldMatrix *= t;
			}

			sceneGraph.StartScene(gWorldMatrix,sceneScaling);

			sceneGraph.Add(d3dDevice, L"..\\media\\cube\\cube.sdkmesh",0,0,0,1,500,500);
            //gMeshOpaque.Create(d3dDevice, L"..\\media\\cube\\cube.sdkmesh");			
            LoadSkybox(d3dDevice, L"..\\media\\Skybox\\EmptySpace.dds");

            cameraEye = sceneScaling * D3DXVECTOR3(100.0f, 5.0f, 5.0f);
            cameraAt = sceneScaling * D3DXVECTOR3(0.0f, 0.0f, 0.0f);
        } break;
#pragma endregion
        case POWER_PLANT_SCENE: {
#pragma region POWER_PLANT_SCENE
            sceneScaling = 1.0f;

			D3DXMatrixScaling(&gWorldMatrix, sceneScaling, sceneScaling, sceneScaling);
			if (zAxisUp) {
				D3DXMATRIXA16 m;
				D3DXMatrixRotationX(&m, -D3DX_PI / 2.0f);
				gWorldMatrix *= m;
			}
			{
				D3DXMATRIXA16 t;
				D3DXMatrixTranslation(&t, sceneTranslation.x, sceneTranslation.y, sceneTranslation.z);
				gWorldMatrix *= t;
			}
			
			sceneGraph.StartScene(gWorldMatrix,sceneScaling);

			sceneGraph.Add(d3dDevice, L"..\\media\\powerplant\\powerplant.sdkmesh");
			//gMeshOpaque.Create(d3dDevice, L"..\\media\\powerplant\\powerplant.sdkmesh");
            LoadSkybox(d3dDevice, L"..\\media\\Skybox\\EmptySpace.dds");

            cameraEye = sceneScaling * D3DXVECTOR3(100.0f, 5.0f, 5.0f);
            cameraAt = sceneScaling * D3DXVECTOR3(0.0f, 0.0f, 0.0f);
        } break;
#pragma endregion
        case SPONZA_SCENE: {
#pragma region SPONZA_SCENE
            sceneScaling = 0.05f;

			D3DXMatrixScaling(&gWorldMatrix, sceneScaling, sceneScaling, sceneScaling);
			if (zAxisUp) {
				D3DXMATRIXA16 m;
				D3DXMatrixRotationX(&m, -D3DX_PI / 2.0f);
				gWorldMatrix *= m;
			}
			{
				D3DXMATRIXA16 t;
				D3DXMatrixTranslation(&t, sceneTranslation.x, sceneTranslation.y, sceneTranslation.z);
				gWorldMatrix *= t;
			}
			
			sceneGraph.StartScene(gWorldMatrix,sceneScaling);
			

			sceneGraph.Add(d3dDevice, L"..\\media\\Sponza\\sponza_dds.sdkmesh");
			//gMeshOpaque.Create(d3dDevice, L"..\\media\\Sponza\\sponza_dds.sdkmesh");
            LoadSkybox(d3dDevice, L"..\\media\\Skybox\\EmptySpace.dds");

            cameraEye = sceneScaling * D3DXVECTOR3(1200.0f, 200.0f, 100.0f);
            cameraAt = sceneScaling * D3DXVECTOR3(0.0f, 0.0f, 0.0f);
        } break;
#pragma endregion
		case MULTI_SCENE:{
#pragma region MULTI_SCENE
            sceneScaling = .05f;
			
			D3DXMatrixScaling(&gWorldMatrix, sceneScaling, sceneScaling, sceneScaling);
			if (zAxisUp) {
				D3DXMATRIXA16 m;
				D3DXMatrixRotationX(&m, -D3DX_PI / 2.0f);
				gWorldMatrix *= m;
			}
			{
				D3DXMATRIXA16 t;
				D3DXMatrixTranslation(&t, sceneTranslation.x, sceneTranslation.y, sceneTranslation.z);
				gWorldMatrix *= t;
			}
			
			sceneGraph.StartScene(gWorldMatrix,sceneScaling);

			sceneGraph.Add(d3dDevice, L"..\\media\\Sponza\\sponza_dds.sdkmesh");
			D3DXMATRIXA16 translate;
			D3DXMatrixTranslation(&translate,0,10,0);
			sceneGraph.Add(d3dDevice,L"..\\media\\powerplant\\powerplant.sdkmesh",translate);
			//gMeshOpaque.Create(d3dDevice, L"..\\media\\Sponza\\sponza_dds.sdkmesh");
			//gMeshOpaque2.Create(d3dDevice,L"..\\media\\powerplant\\powerplant.sdkmesh");
            LoadSkybox(d3dDevice, L"..\\media\\Skybox\\EmptySpace.dds");

            cameraEye = sceneScaling * D3DXVECTOR3(100.0f, 5.0f, 5.0f);
            cameraAt = sceneScaling * D3DXVECTOR3(0.0f, 0.0f, 0.0f);
		}break;
#pragma endregion
		case CUBES:
		{
#pragma region CUBES
			sceneScaling = 1.0f;

			D3DXMatrixScaling(&gWorldMatrix, sceneScaling, sceneScaling, sceneScaling);
			if (zAxisUp) {
				D3DXMATRIXA16 m;
				D3DXMatrixRotationX(&m, -D3DX_PI / 2.0f);
				gWorldMatrix *= m;
			}
			{
				D3DXMATRIXA16 t;
				D3DXMatrixTranslation(&t, sceneTranslation.x, sceneTranslation.y, sceneTranslation.z);
				gWorldMatrix *= t;
			}

			sceneGraph.StartScene(gWorldMatrix,sceneScaling);
			D3DXMATRIXA16 translate;
			D3DXMatrixTranslation(&translate,0,0,0);
			
			D3DXMATRIXA16 s;
			D3DXMatrixScaling(&s,100,0.01,100);
			s=s*translate;
			//sceneGraph.Add(d3dDevice, L"..\\media\\cube\\cube.sdkmesh",s);
			//sceneGraph.Add(d3dDevice, L"..\\media\\cube\\cube.sdkmesh",s);


			//Initializing PhysX
			if(!PXEngine)
				PXEngine = new PhysXEngine();
			sceneGraph.AddMeshInstance(d3dDevice, L"..\\media\\cube\\cube.sdkmesh");
			//sceneGraph.Add(d3dDevice,L"..\\media\\powerplant\\powerplant.sdkmesh",translate);
			if(PXEngine)
				PXEngine->InitializePhysX(cubeList, PhysXUnProject, PhysXProject);

			sceneGraph.Add(d3dDevice, L"..\\media\\cube\\cube.sdkmesh",0,0,0,1000,1000,1000);

			//Creating all of the cubes
			for(int i = 0; i < cubeList->size(); i++)
			{
				if(i%10==0)
				{
					sceneGraph.Add(d3dDevice, L"..\\media\\cube\\cube.sdkmesh",0,0,0,1,1,1);
				}
				else
					(*cubeList)[i]->id = sceneGraph.AddInstance(1,(*cubeList)[i]->x, (*cubeList)[i]->y, (*cubeList)[i]->z, (*cubeList)[i]->sx, (*cubeList)[i]->sy, (*cubeList)[i]->sz);
			}
/*
			for(float x =0; x<15;x+=5)
			{
				for(float y=0; y<15; y+=5)
				{
					for(float z=0; z<15; z+=5)
					{
						D3DXMatrixTranslation(&translate,x,y,z);
						sceneGraph.Add(d3dDevice, L"..\\media\\cube\\cube.sdkmesh",x,y,z,1,1,1);
					}
				}
			}
*/
			LoadSkybox(d3dDevice, L"..\\media\\Skybox\\Clouds.dds");
			cameraEye = sceneScaling * D3DXVECTOR3(100.0f, 5.0f, 5.0f);
            cameraAt = sceneScaling * D3DXVECTOR3(0.0f, 0.0f, 0.0f);

		}break;
#pragma endregion
    };
#pragma endregion
	
	cameraEye.x += 200;
    gViewerCamera.SetViewParams(&cameraEye, &cameraAt);
    gViewerCamera.SetScalers(0.01f, 100.0f);
    gViewerCamera.FrameMove(0.0f);
    
    // Zero out the elapsed time for the next frame
    gZeroNextFrameTime = true;
}
    //---------------------------------------------------------------
    void LightExporter::exportLights ( SceneElement* sceneElement )
    {
        // If we have a external reference, we don't need to export the data here.
        if ( !sceneElement->getIsLocal() ) return;
        if ( !sceneElement->getIsExportNode () ) return;

        // Check if it is a light.
        SceneElement::Type sceneElementType = sceneElement->getType();
        if ( sceneElementType == SceneElement::LIGHT )
        {
            // Get the current dag path
            MDagPath dagPath = sceneElement->getPath();

            // Check if the current scene element isn't already exported.
            SceneGraph* sceneGraph = mDocumentExporter->getSceneGraph();
            if ( sceneGraph->findExportedElement ( dagPath ) ) return;

            // Check if the current element is an instance. 
            // We don't need to export instances, because we export the original instanced element.
            bool isInstance = ( dagPath.isInstanced() && dagPath.instanceNumber() > 0 );

            // If the original instanced element isn't already exported, we have to export it now.
            if ( isInstance )
            {
                // Get the original instanced element.
                MDagPath instancedPath;
                dagPath.getPath ( instancedPath, 0 );

                // Check if the original instanced element is already exported.
                SceneGraph* sceneGraph = mDocumentExporter->getSceneGraph();
                SceneElement* exportedElement = sceneGraph->findExportedElement ( instancedPath );
				if (exportedElement == 0)
				{
					// Export the original instanced element and push it in the exported scene graph. 
					if (exportLight(instancedPath))
					{
						SceneElement* instancedSceneElement = sceneGraph->findElement(instancedPath);
						SceneGraph* sceneGraph = mDocumentExporter->getSceneGraph();
						sceneGraph->addExportedElement(instancedSceneElement);
					}
				}
            }
            else
            {
                // Export the element and push it in the exported scene graph. 
                if ( exportLight ( dagPath ) )
                {
                    SceneGraph* sceneGraph = mDocumentExporter->getSceneGraph();
                    sceneGraph->addExportedElement( sceneElement );
                }
            }
        }


        // Recursive call for all the child elements
        for ( uint i=0; i<sceneElement->getChildCount(); ++i )
        {
            SceneElement* childElement = sceneElement->getChild ( i );
            exportLights ( childElement );
        }
    }