@@ -50,7 +50,7 @@ void VRGeneric::setup(GLView* glview)
5050{
5151// CC_UNUSED(glview);
5252
53- // rebase default viewport in case origin is not 0,0
53+ // set origin to 0,0 in case origin is not 0,0
5454 auto vp = Camera::getDefaultViewport ();
5555 _vrViewSize.width = vp._width /2 + vp._left ;
5656 _vrViewSize.height = vp._height /2 + vp._bottom ;
@@ -75,21 +75,38 @@ void VRGeneric::setup(GLView* glview)
7575 _rightFB->attachDepthStencilTarget (rightDS);
7676 _rightFB->setClearColor (Color4F (0 ,0 ,1 ,1 ));
7777
78+ Size scaledTex = Size (vp._width /2 , vp._height /2 );
79+ V3F_C4B_T2F_Quad quad;
80+ quad.bl .colors = Color4B::WHITE;
81+ quad.bl .texCoords = Tex2F (0 ,0 );
82+ quad.bl .vertices = Vec3 (0 ,0 ,0 );
83+
84+ quad.tl .colors = Color4B::WHITE;
85+ quad.tl .texCoords = Tex2F (0 ,1 );
86+ quad.tl .vertices = Vec3 (0 ,scaledTex.height ,0 );
87+
88+ quad.br .colors = Color4B::WHITE;
89+ quad.br .texCoords = Tex2F (1 ,0 );
90+ quad.br .vertices = Vec3 (scaledTex.width ,0 ,0 );
91+
92+ quad.tr .colors = Color4B::WHITE;
93+ quad.tr .texCoords = Tex2F (1 ,1 );
94+ quad.tr .vertices = Vec3 (scaledTex.width ,scaledTex.height ,0 );
95+
96+ PolygonInfo polyInfo;
97+ polyInfo.setQuad (&quad);
98+
7899 _leftSprite = Sprite::createWithTexture (_leftFB->getRenderTarget ()->getTexture ());
79100 _leftSprite->retain ();
80101 _leftSprite->setPosition (Vec2 (0 ,0 ));
81- _leftSprite->setAnchorPoint (Vec2::ANCHOR_TOP_LEFT);
82- _leftSprite->setScaleY (-1 /CC_CONTENT_SCALE_FACTOR ());
83- _leftSprite->setScaleX (1 /CC_CONTENT_SCALE_FACTOR ());
84- // _leftSprite->setPolygonInfo(polyinfo);
102+ _leftSprite->setAnchorPoint (Vec2::ANCHOR_BOTTOM_LEFT);
103+ _leftSprite->setPolygonInfo (polyInfo);
85104
86105 _rightSprite = Sprite::createWithTexture (_rightFB->getRenderTarget ()->getTexture ());
87106 _rightSprite->retain ();
88107 _rightSprite->setPosition (Vec2 (0 ,0 ));
89- _rightSprite->setAnchorPoint (Vec2::ANCHOR_TOP_LEFT);
90- _rightSprite->setScaleY (-1 /CC_CONTENT_SCALE_FACTOR ());
91- _rightSprite->setScaleX (1 /CC_CONTENT_SCALE_FACTOR ());
92- // _rightSprite->setPolygonInfo(polyinfo);
108+ _rightSprite->setAnchorPoint (Vec2::ANCHOR_BOTTOM_LEFT);
109+ _rightSprite->setPolygonInfo (polyInfo);
93110}
94111
95112void VRGeneric::cleanup ()
@@ -98,17 +115,29 @@ void VRGeneric::cleanup()
98115
99116void VRGeneric::render (Scene* scene, Renderer* renderer)
100117{
118+ auto director = Director::getInstance ();
119+
120+ // FIXME: Use correct eye displacement
121+ const float eyeOffset = 1 ;
101122 _leftFB->applyFBO ();
102- scene->render (renderer, Vec3 (-5 ,0 ,0 ));
123+ scene->render (renderer, Vec3 (-eyeOffset ,0 ,0 ));
103124 _leftFB->restoreFBO ();
104125
105126 _rightFB->applyFBO ();
106- scene->render (renderer, Vec3 (5 ,0 ,0 ));
127+ scene->render (renderer, Vec3 (eyeOffset ,0 ,0 ));
107128 _rightFB->restoreFBO ();
108129
109130 GLint viewport[4 ];
110131 glGetIntegerv (GL_VIEWPORT, viewport);
111132
133+ Mat4 proj2D;
134+ Mat4::createOrthographic (_texSize.width , _texSize.height , -1 , 1 , &proj2D);
135+ proj2D.translate (-_texSize.width /2 , -_texSize.height /2 , 0 );
136+ proj2D.scale (2 );
137+ director->pushMatrix (MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
138+ director->loadMatrix (MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, proj2D);
139+
140+
112141 glViewport (0 , _vrViewSize.height /2 , _vrViewSize.width , _vrViewSize.height );
113142 _leftSprite->visit (renderer, Mat4::IDENTITY, 0 );
114143 renderer->render ();
@@ -117,6 +146,8 @@ void VRGeneric::render(Scene* scene, Renderer* renderer)
117146 _rightSprite->visit (renderer, Mat4::IDENTITY, 0 );
118147 renderer->render ();
119148
149+ director->popMatrix (MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
150+
120151 glViewport (viewport[0 ], viewport[1 ], viewport[2 ], viewport[3 ]);
121152}
122153
0 commit comments