void pl_Cam::Begin(LICE_IBitmap *fb, bool want_zbclear, pl_ZBuffer zbclear) { if (frameBuffer||!fb) return; if (WantZBuffer) { int zbsz=fb->getWidth()*fb->getHeight(); pl_ZBuffer *zb=zBuffer.Resize(zbsz); if (want_zbclear) { if (!zbclear) memset(zb,0,zbsz*sizeof(pl_ZBuffer)); else { int i=zbsz; while(i--) *zb++=zbclear; } } } else zBuffer.Resize(0); pl_Float tempMatrix[16]; _numlights = 0; _numfaces = _numfaces_sorted = 0; frameBuffer = fb; plMatrixRotate(_cMatrix,2,-Pan); plMatrixRotate(tempMatrix,1,-Pitch); plMatrixMultiply(_cMatrix,tempMatrix); plMatrixRotate(tempMatrix,3,-Roll); plMatrixMultiply(_cMatrix,tempMatrix); RecalcFrustum(); RenderTrisIn=RenderTrisCulled=RenderTrisOut=0; RenderPixelsOut=0.0; }
void Camera::ApplyFrustum() { if (flags & REQUIRE_REBUILD_PROJECTION) { RecalcFrustum(); } RenderManager::Instance()->SetMatrix(RenderManager::MATRIX_PROJECTION, projMatrix); /* Boroda: Matrix Extract Snippet float32 proj[16]; glGetFloatv(GL_PROJECTION_MATRIX, proj); Matrix4 frustumMatrix; frustumMatrix.glFrustum(xmin, xmax, ymin, ymax, znear, zfar); glLoadMatrixf(frustumMatrix.data); for (int32 k = 0; k < 16; ++k) { printf("k:%d - %0.3f = %0.3f\n", k, proj[k], frustumMatrix.data[k]); } */ // glMatrixMode(GL_PROJECTION); // glLoadIdentity(); //#ifdef __DAVAENGINE_IPHONE__ // if (!ortho) // { // glFrustumf(xmin, xmax, ymin, ymax, znear, zfar); // } // else // { // glOrthof(xmin, xmax, ymin, ymax, znear, zfar); // } //#else // if (!ortho) // { // glFrustum(xmin, xmax, ymin, ymax, znear, zfar); // } // else // { // glOrtho(xmin, xmax, ymin, ymax, znear, zfar); // } //#endif }
const Matrix4 &Camera::GetUniformProjModelMatrix() { if (flags & REQUIRE_REBUILD) { RebuildCameraFromValues(); } if (flags & REQUIRE_REBUILD_PROJECTION) { RecalcFrustum(); } if (flags & REQUIRE_REBUILD_MODEL) { RecalcTransform(); } if (flags & REQUIRE_REBUILD_UNIFORM_PROJ_MODEL) { uniformProjModelMatrix = modelMatrix * projMatrix; flags &= ~REQUIRE_REBUILD_UNIFORM_PROJ_MODEL; } return uniformProjModelMatrix; }