+ auto cameraActor = CameraActor::DownCast(camera);
+ mCamera3D = cameraActor;
+
+ auto cameraRefActor = CameraActor::DownCast(cameraRef);
+ cameraRefActor.SetProperty(DevelCameraActor::Property::REFLECTION_PLANE, Vector4(0.0f, -1.0f, 0.0f, 0.0f));
+ mReflectionCamera3D = cameraRefActor;
+
+ auto task3D = window.GetRenderTaskList().CreateTask();
+ task3D.SetSourceActor(mLayer3D);
+ task3D.SetViewport(Rect<int>(0, 0, windowWidth, windowHeight));
+ task3D.SetCameraActor(cameraActor);
+ task3D.SetClearColor(Color::BLACK);
+ task3D.SetClearEnabled(true);
+ task3D.SetExclusive(false);
+ task3D.SetCameraActor(cameraActor);
+
+ /**
+ * Change shader to textured
+ */
+ Shader texShader = CreateShader(VERTEX_SHADER, TEX_FRAGMENT_SHADER);
+ planeActor.RegisterProperty("uScreenSize", Vector2(windowWidth, windowHeight));
+ auto renderer = planeActor.GetRendererAt(0);
+ auto textureSet = renderer.GetTextures();
+ renderer.SetShader(texShader);
+
+ Texture fbTexture = Texture::New(TextureType::TEXTURE_2D, Pixel::Format::RGBA8888, windowWidth, windowHeight);
+ textureSet.SetTexture(1u, fbTexture);
+
+ auto fb = FrameBuffer::New(windowWidth, windowHeight, FrameBuffer::Attachment::DEPTH);
+
+ fb.AttachColorTexture(fbTexture);
+
+ auto renderTask = window.GetRenderTaskList().CreateTask();
+ renderTask.SetFrameBuffer(fb);
+ renderTask.SetSourceActor(renderTaskSourceActor);
+ renderTask.SetViewport(Rect<int>(0, 0, windowWidth, windowHeight));
+ renderTask.SetCameraActor(cameraRefActor);
+ renderTask.SetClearColor(Color::BLACK);
+ renderTask.SetClearEnabled(true);
+ renderTask.SetExclusive(false);
+
+ mAnimation = Animation::New(30.0f);
+ mAnimation.AnimateBy(Property(solarActor, Actor::Property::ORIENTATION),
+ Quaternion(Degree(359), Vector3(0.0, 1.0, 0.0)));
+ mAnimation.AnimateBy(Property(milkyway, Actor::Property::ORIENTATION),
+ Quaternion(Degree(-359), Vector3(0.0, 1.0, 0.0)));
+ mAnimation.SetLooping(true);
+ mAnimation.Play();
+
+ Actor panScreen = Actor::New();
+ Vector2 windowSize = window.GetSize();
+ panScreen.SetProperty(Actor::Property::SIZE, windowSize);
+ panScreen.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+ panScreen.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+ auto camera2d = window.GetRenderTaskList().GetTask(0).GetCameraActor();
+ panScreen.SetProperty(Actor::Property::POSITION, Vector3(0, 0, camera2d.GetNearClippingPlane()));
+ camera2d.Add(panScreen);
+ camera2d.RotateBy(Degree(180.0f), Vector3(0.0, 1.0, 0.0));
+ mPanGestureDetector = PanGestureDetector::New();
+ mPanGestureDetector.Attach(panScreen);
+ mPanGestureDetector.DetectedSignal().Connect(this, &ReflectionExample::OnPan);
+
+ // Respond to key events
+ window.KeyEventSignal().Connect(this, &ReflectionExample::OnKeyEvent);
+
+ mTickTimer.Start();