Skip to content

Commit f88b834

Browse files
fix: proj fixes. works ok in any resolution
1 parent f980a61 commit f88b834

File tree

2 files changed

+46
-20
lines changed

2 files changed

+46
-20
lines changed

cocos/base/CCDirector.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -604,11 +604,9 @@ void Director::setProjection(Projection projection)
604604
{
605605
case Projection::_2D:
606606
{
607-
loadIdentityMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
608-
609607
Mat4 orthoMatrix;
610608
Mat4::createOrthographicOffCenter(0, size.width, 0, size.height, -1024, 1024, &orthoMatrix);
611-
multiplyMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, orthoMatrix);
609+
loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, orthoMatrix);
612610
loadIdentityMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
613611
break;
614612
}
@@ -619,17 +617,14 @@ void Director::setProjection(Projection projection)
619617

620618
Mat4 matrixPerspective, matrixLookup;
621619

622-
loadIdentityMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
623-
624620
// issue #1334
625621
Mat4::createPerspective(60, (GLfloat)size.width/size.height, 10, zeye+size.height/2, &matrixPerspective);
626622

627-
multiplyMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, matrixPerspective);
628-
629623
Vec3 eye(size.width/2, size.height/2, zeye), center(size.width/2, size.height/2, 0.0f), up(0.0f, 1.0f, 0.0f);
630624
Mat4::createLookAt(eye, center, up, &matrixLookup);
631-
multiplyMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, matrixLookup);
632-
625+
Mat4 proj3d = matrixPerspective * matrixLookup;
626+
627+
loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, proj3d);
633628
loadIdentityMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
634629
break;
635630
}

cocos/vr/CCVRGeneric.cpp

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

95112
void VRGeneric::cleanup()
@@ -98,17 +115,29 @@ void VRGeneric::cleanup()
98115

99116
void 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

Comments
 (0)