//===================================================================================== // geCamera_Create //===================================================================================== GENESISAPI geCamera *GENESISCC geCamera_Create(geFloat Fov, const geRect *Rect) { geCamera *Camera; assert( Rect != NULL ); Camera = GE_RAM_ALLOCATE_STRUCT(geCamera); if (Camera == NULL) { geErrorLog_Add(-1, NULL); //FIXME return NULL; } memset(Camera, 0, sizeof(geCamera)); Camera->ZScale = 0.5f; #if 0 Camera->ZFar = 1000.0f; Camera->ZFarEnable = GE_TRUE; #endif geCamera_SetAttributes(Camera,Fov,Rect); return Camera; }
/* ------------------------------------------------------------------------------------ */ int CCameraManager::RenderView() { geXForm3d theViewPoint; // changed QD 12/15/05 //geXForm3d_SetIdentity(&theViewPoint); // Clear the matrix //geXForm3d_RotateZ(&theViewPoint, Rotation.Z); // Rotate then translate geXForm3d_SetZRotation(&theViewPoint, Rotation.Z); // end change geXForm3d_RotateX(&theViewPoint, Rotation.X); geXForm3d_RotateY(&theViewPoint, Rotation.Y); geXForm3d_Translate(&theViewPoint, Translation.X+shakex, Translation.Y+shakey, Translation.Z); // changed RF063 GE_Contents ZoneContents; geExtBox ExtBox; geVec3d Direction, Pos; GE_LVertex Vertex; ExtBox.Min.X = ExtBox.Min.Z = -1.0f; ExtBox.Min.Y = 0.0f; ExtBox.Max.Y = 1.0f; ExtBox.Max.X = ExtBox.Max.Z = 1.0f; if(CCD->Collision()->GetContentsOf(Translation, &ExtBox, &ZoneContents) == RGF_SUCCESS) //if(geWorld_GetContents(CCD->World(), &Translation, &ExtBox.Min, //&ExtBox.Max, GE_COLLIDE_MODELS, 0, NULL, NULL, &ZoneContents) == GE_TRUE) { Liquid * LQ = CCD->Liquids()->IsLiquid(ZoneContents.Model); if(LQ) { geXForm3d_GetIn(&theViewPoint, &Direction); geVec3d_AddScaled(&Translation, &Direction, OverlayDist, &Pos); Vertex.r = LQ->TintColor.r; Vertex.g = LQ->TintColor.g; Vertex.b = LQ->TintColor.b; Vertex.a = LQ->Transparency; Vertex.u = 0.0f; Vertex.v = 0.0f; Vertex.X = Pos.X; Vertex.Y = Pos.Y; Vertex.Z = Pos.Z; geWorld_AddPolyOnce(CCD->World(), &Vertex, 1, LQ->Texture, GE_TEXTURED_POINT , GE_RENDER_DO_NOT_OCCLUDE_SELF, 2.0f ); } // changed RF064 else { Overlay * OL = CCD->Overlays()->IsOverlay(ZoneContents.Model); if(OL) { geXForm3d_GetIn(&theViewPoint, &Direction); geVec3d_AddScaled(&Translation, &Direction, OverlayDist, &Pos); Vertex.r = OL->TintColor.r; Vertex.g = OL->TintColor.g; Vertex.b = OL->TintColor.b; Vertex.a = OL->Transparency; Vertex.u = 0.0f; Vertex.v = 0.0f; Vertex.X = Pos.X; Vertex.Y = Pos.Y; Vertex.Z = Pos.Z; geWorld_AddPolyOnce(CCD->World(), &Vertex, 1, OL->Texture, GE_TEXTURED_POINT , GE_RENDER_DO_NOT_OCCLUDE_SELF, 2.0f); } } // end change RF064 } if(jerk) { geVec3d Direction; geXForm3d_GetIn(&theViewPoint, &Direction); geVec3d_AddScaled(&theViewPoint.Translation, &Direction, -jerkamt, &theViewPoint.Translation); } // end change RF063 // Set up camera attributes just prior to rendering the world. geRect Rect; geCamera_SetWorldSpaceXForm(EngineCamera, &theViewPoint); geCamera_GetClippingRect(EngineCamera, &Rect); geCamera_SetAttributes(EngineCamera, FOV, &Rect); // changed RF064 geVec3d_Subtract(&m_OldXForm.Translation, &theViewPoint.Translation, &m_vMoveDif ); m_bPositionMoved = !geVec3d_IsZero(&m_vMoveDif); if( m_bPositionMoved || m_OldXForm.AX != theViewPoint.AX || m_OldXForm.AY != theViewPoint.AY || m_OldXForm.AZ != theViewPoint.AZ || m_OldXForm.BX != theViewPoint.BX || m_OldXForm.BY != theViewPoint.BY || m_OldXForm.BZ != theViewPoint.BZ || m_OldXForm.CX != theViewPoint.CX || m_OldXForm.CY != theViewPoint.CY || m_OldXForm.CZ != theViewPoint.CZ) { m_bViewChanged = true; m_OldXForm = theViewPoint; } // end change RF064 return RGF_SUCCESS; }