コード例 #1
0
void CCCameraBase::update()
{
#if defined PROFILEON
    CCProfiler profile( "CCCameraBase::update()" );
#endif
    
    if( updatedPosition )
    {
        updatedPosition = false;
    }
    
    if( updateFOV )
    {
        updateFOV = false;
        scanFOVBounds();
    }
    
	CCMatrixLoadIdentity( modelViewMatrix );
    if( frameBufferID == -1 )
    {
        CCMatrixRotate( modelViewMatrix, CCAppManager::GetOrientation().current, 0.0f, 0.0f, 1.0f );
    }
    GluLookAt( modelViewMatrix,
			   rotatedPosition.x, rotatedPosition.y, rotatedPosition.z,	// Position
			   lookAt.x, lookAt.y, lookAt.z,                            // Looking At
			   0.0f, 1.0f, 0.0f );										// Up
	
    GLSetPushMatrix( modelViewMatrix );
	
    ExtractFrustum();
	
    updateVisibleObjects();
}
コード例 #2
0
void CCCameraBase::update()
{
#if defined PROFILEON
    CCProfiler profile( "CCCameraBase::update()" );
#endif
    
    if( updatedPosition )
    {
        updatedPosition = false;
    }
    
    if( updateFOV )
    {
        updateFOV = false;
        scanFOVBounds();
    }
    
	CCMatrixLoadIdentity( modelViewMatrix );
    CCMatrixRotate( modelViewMatrix, gEngine->renderer->orientation.current, 0.0f, 0.0f, 1.0f );
    GluLookAt( modelViewMatrix,
			   rotatedPosition.x, rotatedPosition.y, rotatedPosition.z,	// Position
			   lookAt.x, lookAt.y, lookAt.z,                            // Looking At
			   0.0f, 1.0f, 0.0f );										// Up
	
    GLSetPushMatrix( modelViewMatrix );
	
    ExtractFrustum();
	
    updateVisibleObjects();
}
コード例 #3
0
void CCCameraBase::scanFOVBounds()
{	
    for( uint i=0; i<max_fov_scans; ++i )
    {
        if( i == scan_flat )
        {
            CCMatrixLoadIdentity( modelViewMatrix );
            CCMatrixRotate( modelViewMatrix, CCAppManager::GetOrientation().current, 0.0f, 0.0f, 1.0f );
            GluLookAt( modelViewMatrix,
                       position.x, position.y, position.z,	// Position
                       lookAt.x, lookAt.y, lookAt.z,		// Looking At
                       0.0f, 1.0f, 0.0f );					// Up
        }
        
        static CCVector3 minPlane, maxPlane;
        project3DZ( &minPlane, 0.0f, 1.0f );
        project3DZ( &maxPlane, 1.0f, 0.0f );
        
        FOVBounds &bounds = fovBounds[i];
        bounds.size.x = fabsf( maxPlane.x - minPlane.x );
        bounds.size.y = fabsf( maxPlane.y - minPlane.y );
        bounds.min.x = minPlane.x;
        bounds.min.y = minPlane.y;
        bounds.max.x = maxPlane.x;
        bounds.max.y = maxPlane.y;
    }
}
コード例 #4
0
void CCCameraBase::scanFOVBounds()
{	
    for( uint i=0; i<max_fov_scans; ++i )
    {
        if( i == scan_flat )
        {
            CCMatrixLoadIdentity( modelViewMatrix );
            CCMatrixRotate( modelViewMatrix, gEngine->renderer->orientation.current, 0.0f, 0.0f, 1.0f );
            GluLookAt( modelViewMatrix,
                       position.x, position.y, position.z,	// Position
                       lookAt.x, lookAt.y, lookAt.z,		// Looking At
                       0.0f, 1.0f, 0.0f );					// Up
        }
        
        static CCVector3 minPlane, maxPlane;
        project3DZ( &minPlane, 0.0f, 1.0f );
        project3DZ( &maxPlane, 1.0f, 0.0f );
        
        FOVScan &fovScan = fovScans[i];
        fovScan.size.x = fabsf( maxPlane.x - minPlane.x );
        fovScan.size.y = fabsf( maxPlane.y - minPlane.y );
        fovScan.min.x = minPlane.x;
        fovScan.min.y = minPlane.y;
        fovScan.max.x = maxPlane.x;
        fovScan.max.y = maxPlane.y;
    }
}