void blendResetToCache() { glBlendEquation(GL_FUNC_ADD); #if CC_ENABLE_GL_STATE_CACHE SetBlending(s_blendingSource, s_blendingDest); #else SetBlending(CC_BLEND_SRC, CC_BLEND_DST); #endif // CC_ENABLE_GL_STATE_CACHE }
bool OGL2_Renderer::Init() { if( glewInit() != GLEW_OK ) { PRINTF( "Failed to initialize GLEW\n" ); return false; } glEnable( GL_CULL_FACE ); glEnable( GL_ALPHA_TEST ); glEnable( GL_TEXTURE_2D ); memset( &rconf, 1, sizeof( rconf ) ); currentTexture = 123123; rconf.flags = 0; rconf.blendEnabled = true; // just to turn it off SetCulling( 0 ); SetCulling( CULL_FRONT ); SetDepthTest( DEPTH_DISABLED ); SetDepthTest( DEPTH_LESS_EQUAL ); SetAlphaTest( 0 ); SetAlphaTest( 1 ); SetAlphaTest( 0 ); SetBlending( 0, 0 ); SetBlending( BLEND_ONE, BLEND_ONE ); SetBlending( 0, 0 ); // glEnable( GL_DEPTH_TEST ); // glDepthFunc( GL_LEQUAL ); p_MainShader = PrecacheShader( "main" ); p_MenuBgShader = PrecacheShader( "menubg" ); PrecacheImage( "bear", 1024, 512, false ); PrecacheImage( "pipe", 256, 128, false ); PrecacheImage( "grass", 1024, 512, false ); PrecacheImage( "dirt", 512, 512, false ); PrecacheImage( "finish", 512, 256, false ); PrecacheModel( "pipe_1" ); PrecacheModel( "pipe_2" ); PrecacheModel( "pipe_3" ); PrecacheModel( "pipe_4" ); PrecacheModel( "pipe_5" ); PrecacheModel( "pipe_6" ); PrecacheModel( "finish" ); PrecacheModel( "bear" ); PrecacheModel( "terrain" ); p_Ortho->Init(); return true; }
void blendFunc(GLenum sfactor, GLenum dfactor) { #if CC_ENABLE_GL_STATE_CACHE if (sfactor != s_blendingSource || dfactor != s_blendingDest) { s_blendingSource = sfactor; s_blendingDest = dfactor; SetBlending(sfactor, dfactor); } #else SetBlending( sfactor, dfactor ); #endif // CC_ENABLE_GL_STATE_CACHE }
//========================================================= // BarneyFirePistol - shoots one round from the pistol at // the enemy barney is facing. //========================================================= void CBarney :: BarneyFirePistol ( void ) { Vector vecShootOrigin; UTIL_MakeVectors(pev->angles); vecShootOrigin = pev->origin + Vector( 0, 0, 55 ); Vector vecShootDir = ShootAtEnemy( vecShootOrigin ); Vector angDir = UTIL_VecToAngles( vecShootDir ); SetBlending( 0, angDir.x ); pev->effects = EF_MUZZLEFLASH; FireBullets(1, vecShootOrigin, vecShootDir, VECTOR_CONE_2DEGREES, 1024, BULLET_MONSTER_9MM ); int pitchShift = RANDOM_LONG( 0, 20 ); // Only shift about half the time if ( pitchShift > 10 ) pitchShift = 0; else pitchShift -= 5; EMIT_SOUND_DYN( ENT(pev), CHAN_WEAPON, "barney/ba_attack2.wav", 1, ATTN_NORM, 0, 100 + pitchShift ); CSoundEnt::InsertSound ( bits_SOUND_COMBAT, pev->origin, 384, 0.3 ); // UNDONE: Reload? m_cAmmoLoaded--;// take away a bullet! }
//========================================================= // BarneyFirePistol - shoots one round from the pistol at // the enemy barney is facing. //========================================================= void CFriend :: BarneyFirePistol ( void ) { Vector vecShootOrigin; UTIL_MakeVectors(pev->angles); vecShootOrigin = pev->origin + Vector( 0, 0, 55 ); Vector vecShootDir = ShootAtEnemy( vecShootOrigin ); Vector angDir = UTIL_VecToAngles( vecShootDir ); SetBlending( 0, angDir.x ); pev->effects = EF_MUZZLEFLASH; if (pev->frags) { FireBullets(8, vecShootOrigin, vecShootDir, VECTOR_CONE_10DEGREES, 1024, BULLET_PLAYER_BUCKSHOT);//357 EMIT_SOUND( ENT(pev), CHAN_WEAPON, "weapons/shotgun/sbarrel1.wav", 1, ATTN_NORM ); } else { FireBullets(1, vecShootOrigin, vecShootDir, VECTOR_CONE_2DEGREES, 1024, BULLET_MONSTER_9MM ); int pitchShift = RANDOM_LONG( 0, 20 ); // Only shift about half the time if ( pitchShift > 10 ) pitchShift = 0; else pitchShift -= 5; EMIT_SOUND( ENT(pev), CHAN_WEAPON, "weapons/m16/m16_fire-1.wav", 1, ATTN_NORM ); } CSoundEnt::InsertSound ( bits_SOUND_COMBAT, pev->origin, 384, 0.3 ); // UNDONE: Reload? m_cAmmoLoaded--;// take away a bullet! // Teh_Freak: World Lighting! MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_DLIGHT ); WRITE_COORD( vecShootOrigin.x ); // origin WRITE_COORD( vecShootOrigin.y ); WRITE_COORD( vecShootOrigin.z ); WRITE_BYTE( 16 ); // radius WRITE_BYTE( 255 ); // R WRITE_BYTE( 255 ); // G WRITE_BYTE( 128 ); // B WRITE_BYTE( 0 ); // life * 10 WRITE_BYTE( 0 ); // decay MESSAGE_END(); // Teh_Freak: World Lighting! CBaseEntity *pPlayer = UTIL_PlayerByIndex( 1 ); if (pPlayer->m_fSlowMotionOn) CBullet::Shoot( pev, vecShootOrigin, vecShootDir * 500 ); }
void CreatureManager::SetAutoBlending(bool flag_in) { do_auto_blending = flag_in; SetBlending(flag_in); if(do_auto_blending) { AutoBlendTo(active_animation_name, 0.1f); } }
// ========================================================= // TORCH SUPPORT // ========================================================= void CGenericMonster :: Torch ( void ) { Vector vecGunPos; Vector vecGunAngles; Vector vecShootDir; GetAttachment( 4, vecGunPos, vecGunAngles ); pev->effects |= EF_MUZZLEFLASH; Vector angDir = UTIL_VecToAngles( vecShootDir ); SetBlending( 0, angDir.x ); }
//========================================================= // Shoot //========================================================= void CHAssassin :: Shoot ( void ) { if (m_hEnemy == NULL) { return; } Vector vecShootOrigin = GetGunPosition(); Vector vecShootDir = ShootAtEnemy( vecShootOrigin ); if (m_flLastShot + 2 < gpGlobals->time) { m_flDiviation = 0.10; } else { m_flDiviation -= 0.01; if (m_flDiviation < 0.02) m_flDiviation = 0.02; } m_flLastShot = gpGlobals->time; UTIL_MakeVectors ( pev->angles ); Vector vecShellVelocity = gpGlobals->v_right * RANDOM_FLOAT(40,90) + gpGlobals->v_up * RANDOM_FLOAT(75,200) + gpGlobals->v_forward * RANDOM_FLOAT(-40, 40); EjectBrass ( pev->origin + gpGlobals->v_up * 32 + gpGlobals->v_forward * 12, vecShellVelocity, pev->angles.y, m_iShell, TE_BOUNCE_SHELL); FireBullets(1, vecShootOrigin, vecShootDir, Vector( m_flDiviation, m_flDiviation, m_flDiviation ), 2048, BULLET_MONSTER_9MM ); // shoot +-8 degrees switch(RANDOM_LONG(0,1)) { case 0: EMIT_SOUND(ENT(pev), CHAN_WEAPON, "weapons/pl_gun1.wav", RANDOM_FLOAT(0.6, 0.8), ATTN_NORM); break; case 1: EMIT_SOUND(ENT(pev), CHAN_WEAPON, "weapons/pl_gun2.wav", RANDOM_FLOAT(0.6, 0.8), ATTN_NORM); break; } pev->effects |= EF_MUZZLEFLASH; Vector angDir = UTIL_VecToAngles( vecShootDir ); SetBlending( 0, angDir.x ); m_cAmmoLoaded--; }
// // TentacleThink // void CTentacle :: Cycle( void ) { // ALERT( at_console, "%s %.2f %d %d\n", STRING( pev->targetname ), pev->origin.z, m_MonsterState, m_IdealMonsterState ); pev->nextthink = gpGlobals-> time + 0.1; // ALERT( at_console, "%s %d %d %d %f %f\n", STRING( pev->targetname ), pev->sequence, m_iGoalAnim, m_iDir, pev->framerate, pev->health ); if (m_MonsterState == MONSTERSTATE_SCRIPT || m_IdealMonsterState == MONSTERSTATE_SCRIPT) { pev->angles.y = m_flInitialYaw; pev->ideal_yaw = m_flInitialYaw; ClearConditions( IgnoreConditions() ); MonsterThink( ); m_iGoalAnim = TENTACLE_ANIM_Pit_Idle; return; } DispatchAnimEvents( ); StudioFrameAdvance( ); ChangeYaw( pev->yaw_speed ); CSound *pSound; Listen( ); // Listen will set this if there's something in my sound list if ( HasConditions( bits_COND_HEAR_SOUND ) ) pSound = PBestSound(); else pSound = NULL; if ( pSound ) { Vector vecDir; if (gpGlobals->time - m_flPrevSoundTime < 0.5) { float dt = gpGlobals->time - m_flPrevSoundTime; vecDir = pSound->m_vecOrigin + (pSound->m_vecOrigin - m_vecPrevSound) / dt - pev->origin; } else { vecDir = pSound->m_vecOrigin - pev->origin; } m_flPrevSoundTime = gpGlobals->time; m_vecPrevSound = pSound->m_vecOrigin; m_flSoundYaw = UTIL_VecToYaw ( vecDir ) - m_flInitialYaw; m_iSoundLevel = Level( vecDir.z ); if (m_flSoundYaw < -180) m_flSoundYaw += 360; if (m_flSoundYaw > 180) m_flSoundYaw -= 360; // ALERT( at_console, "sound %d %.0f\n", m_iSoundLevel, m_flSoundYaw ); if (m_flSoundTime < gpGlobals->time) { // play "I hear new something" sound char *sound; switch( RANDOM_LONG(0,1) ) { case 0: sound = "tentacle/te_alert1.wav"; break; case 1: sound = "tentacle/te_alert2.wav"; break; } // UTIL_EmitAmbientSound(ENT(pev), pev->origin + Vector( 0, 0, MyHeight()), sound, 1.0, ATTN_NORM, 0, 100); } m_flSoundTime = gpGlobals->time + RANDOM_FLOAT( 5.0, 10.0 ); } // clip ideal_yaw float dy = m_flSoundYaw; switch( pev->sequence ) { case TENTACLE_ANIM_Floor_Rear: case TENTACLE_ANIM_Floor_Rear_Idle: case TENTACLE_ANIM_Lev1_Rear: case TENTACLE_ANIM_Lev1_Rear_Idle: case TENTACLE_ANIM_Lev2_Rear: case TENTACLE_ANIM_Lev2_Rear_Idle: case TENTACLE_ANIM_Lev3_Rear: case TENTACLE_ANIM_Lev3_Rear_Idle: if (dy < 0 && dy > -m_flMaxYaw) dy = -m_flMaxYaw; if (dy > 0 && dy < m_flMaxYaw) dy = m_flMaxYaw; break; default: if (dy < -m_flMaxYaw) dy = -m_flMaxYaw; if (dy > m_flMaxYaw) dy = m_flMaxYaw; } pev->ideal_yaw = m_flInitialYaw + dy; if (m_fSequenceFinished) { // ALERT( at_console, "%s done %d %d\n", STRING( pev->targetname ), pev->sequence, m_iGoalAnim ); if (pev->health <= 1) { m_iGoalAnim = TENTACLE_ANIM_Pit_Idle; if (pev->sequence == TENTACLE_ANIM_Pit_Idle) { pev->health = 75; } } else if ( m_flSoundTime > gpGlobals->time ) { if (m_flSoundYaw >= -(m_flMaxYaw + 30) && m_flSoundYaw <= (m_flMaxYaw + 30)) { // strike m_iGoalAnim = LookupActivity( ACT_T_STRIKE + m_iSoundLevel ); } else if (m_flSoundYaw >= -m_flMaxYaw * 2 && m_flSoundYaw <= m_flMaxYaw * 2) { // tap m_iGoalAnim = LookupActivity( ACT_T_TAP + m_iSoundLevel ); } else { // go into rear idle m_iGoalAnim = LookupActivity( ACT_T_REARIDLE + m_iSoundLevel ); } } else if (pev->sequence == TENTACLE_ANIM_Pit_Idle) { // stay in pit until hear noise m_iGoalAnim = TENTACLE_ANIM_Pit_Idle; } else if (pev->sequence == m_iGoalAnim) { if (MyLevel() >= 0 && gpGlobals->time < m_flSoundTime) { if (RANDOM_LONG(0,9) < m_flSoundTime - gpGlobals->time) { // continue stike m_iGoalAnim = LookupActivity( ACT_T_STRIKE + m_iSoundLevel ); } else { // tap m_iGoalAnim = LookupActivity( ACT_T_TAP + m_iSoundLevel ); } } else if (MyLevel( ) < 0) { m_iGoalAnim = LookupActivity( ACT_T_IDLE + 0 ); } else { if (m_flNextSong < gpGlobals->time) { // play "I hear new something" sound char *sound; switch( RANDOM_LONG(0,1) ) { case 0: sound = "tentacle/te_sing1.wav"; break; case 1: sound = "tentacle/te_sing2.wav"; break; } EMIT_SOUND(ENT(pev), CHAN_VOICE, sound, 1.0, ATTN_NORM); m_flNextSong = gpGlobals->time + RANDOM_FLOAT( 10, 20 ); } if (RANDOM_LONG(0,15) == 0) { // idle on new level m_iGoalAnim = LookupActivity( ACT_T_IDLE + RANDOM_LONG(0,3) ); } else if (RANDOM_LONG(0,3) == 0) { // tap m_iGoalAnim = LookupActivity( ACT_T_TAP + MyLevel( ) ); } else { // idle m_iGoalAnim = LookupActivity( ACT_T_IDLE + MyLevel( ) ); } } if (m_flSoundYaw < 0) m_flSoundYaw += RANDOM_FLOAT( 2, 8 ); else m_flSoundYaw -= RANDOM_FLOAT( 2, 8 ); } pev->sequence = FindTransition( pev->sequence, m_iGoalAnim, &m_iDir ); if (m_iDir > 0) { pev->frame = 0; } else { m_iDir = -1; // just to safe pev->frame = 255; } ResetSequenceInfo( ); m_flFramerateAdj = RANDOM_FLOAT( -0.2, 0.2 ); pev->framerate = m_iDir * 1.0 + m_flFramerateAdj; switch( pev->sequence) { case TENTACLE_ANIM_Floor_Tap: case TENTACLE_ANIM_Lev1_Tap: case TENTACLE_ANIM_Lev2_Tap: case TENTACLE_ANIM_Lev3_Tap: { Vector vecSrc; UTIL_MakeVectors( pev->angles ); TraceResult tr1, tr2; vecSrc = pev->origin + Vector( 0, 0, MyHeight() - 4); UTIL_TraceLine( vecSrc, vecSrc + gpGlobals->v_forward * 512, ignore_monsters, ENT( pev ), &tr1 ); vecSrc = pev->origin + Vector( 0, 0, MyHeight() + 8); UTIL_TraceLine( vecSrc, vecSrc + gpGlobals->v_forward * 512, ignore_monsters, ENT( pev ), &tr2 ); // ALERT( at_console, "%f %f\n", tr1.flFraction * 512, tr2.flFraction * 512 ); m_flTapRadius = SetBlending( 0, RANDOM_FLOAT( tr1.flFraction * 512, tr2.flFraction * 512 ) ); } break; default: m_flTapRadius = 336; // 400 - 64 break; } pev->view_ofs.z = MyHeight( ); // ALERT( at_console, "seq %d\n", pev->sequence ); } if (m_flPrevSoundTime + 2.0 > gpGlobals->time) { // 1.5 normal speed if hears sounds pev->framerate = m_iDir * 1.5 + m_flFramerateAdj; } else if (m_flPrevSoundTime + 5.0 > gpGlobals->time) { // slowdown to normal pev->framerate = m_iDir + m_iDir * (5 - (gpGlobals->time - m_flPrevSoundTime)) / 2 + m_flFramerateAdj; } }
//========================================================= // HandleAnimEvent - catches the monster-specific messages // that occur when tagged animation frames are played. // // Returns number of events handled, 0 if none. //========================================================= void CAGrunt :: HandleAnimEvent( MonsterEvent_t *pEvent ) { switch( pEvent->event ) { case AGRUNT_AE_HORNET1: case AGRUNT_AE_HORNET2: case AGRUNT_AE_HORNET3: case AGRUNT_AE_HORNET4: case AGRUNT_AE_HORNET5: { // m_vecEnemyLKP should be center of enemy body Vector vecArmPos, vecArmDir; Vector vecDirToEnemy; Vector angDir; if (HasConditions( bits_COND_SEE_ENEMY)) { vecDirToEnemy = ( ( m_vecEnemyLKP ) - pev->origin ); angDir = UTIL_VecToAngles( vecDirToEnemy ); vecDirToEnemy = vecDirToEnemy.Normalize(); } else { angDir = pev->angles; UTIL_MakeAimVectors( angDir ); vecDirToEnemy = gpGlobals->v_forward; } pev->effects = EF_MUZZLEFLASH; // make angles +-180 if (angDir.x > 180) { angDir.x = angDir.x - 360; } SetBlending( 0, angDir.x ); GetAttachment( 0, vecArmPos, vecArmDir ); vecArmPos = vecArmPos + vecDirToEnemy * 32; MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, vecArmPos ); WRITE_BYTE( TE_SPRITE ); WRITE_COORD( vecArmPos.x ); // pos WRITE_COORD( vecArmPos.y ); WRITE_COORD( vecArmPos.z ); WRITE_SHORT( iAgruntMuzzleFlash ); // model WRITE_BYTE( 6 ); // size * 10 WRITE_BYTE( 128 ); // brightness MESSAGE_END(); CBaseEntity *pHornet = CBaseEntity::Create( "hornet", vecArmPos, UTIL_VecToAngles( vecDirToEnemy ), edict() ); UTIL_MakeVectors ( pHornet->pev->angles ); pHornet->pev->velocity = gpGlobals->v_forward * 300; switch ( RANDOM_LONG ( 0 , 2 ) ) { case 0: EMIT_SOUND_DYN ( ENT(pev), CHAN_WEAPON, "agrunt/ag_fire1.wav", 1.0, ATTN_NORM, 0, 100 ); break; case 1: EMIT_SOUND_DYN ( ENT(pev), CHAN_WEAPON, "agrunt/ag_fire2.wav", 1.0, ATTN_NORM, 0, 100 ); break; case 2: EMIT_SOUND_DYN ( ENT(pev), CHAN_WEAPON, "agrunt/ag_fire3.wav", 1.0, ATTN_NORM, 0, 100 ); break; } CBaseMonster *pHornetMonster = pHornet->MyMonsterPointer(); if ( pHornetMonster ) { pHornetMonster->m_hEnemy = m_hEnemy; } } break; case AGRUNT_AE_LEFT_FOOT: switch (RANDOM_LONG(0,1)) { // left foot case 0: EMIT_SOUND_DYN ( ENT(pev), CHAN_BODY, "player/pl_ladder2.wav", 1, ATTN_NORM, 0, 70 ); break; case 1: EMIT_SOUND_DYN ( ENT(pev), CHAN_BODY, "player/pl_ladder4.wav", 1, ATTN_NORM, 0, 70 ); break; } break; case AGRUNT_AE_RIGHT_FOOT: // right foot switch (RANDOM_LONG(0,1)) { case 0: EMIT_SOUND_DYN ( ENT(pev), CHAN_BODY, "player/pl_ladder1.wav", 1, ATTN_NORM, 0, 70 ); break; case 1: EMIT_SOUND_DYN ( ENT(pev), CHAN_BODY, "player/pl_ladder3.wav", 1, ATTN_NORM, 0 ,70); break; } break; case AGRUNT_AE_LEFT_PUNCH: { CBaseEntity *pHurt = CheckTraceHullAttack( AGRUNT_MELEE_DIST, gSkillData.agruntDmgPunch, DMG_CLUB ); if ( pHurt ) { pHurt->pev->punchangle.y = -25; pHurt->pev->punchangle.x = 8; // OK to use gpGlobals without calling MakeVectors, cause CheckTraceHullAttack called it above. if ( pHurt->IsPlayer() ) { // this is a player. Knock him around. pHurt->pev->velocity = pHurt->pev->velocity + gpGlobals->v_right * 250; } EMIT_SOUND_DYN ( ENT(pev), CHAN_WEAPON, pAttackHitSounds[ RANDOM_LONG(0,ARRAYSIZE(pAttackHitSounds)-1) ], 1.0, ATTN_NORM, 0, 100 + RANDOM_LONG(-5,5) ); Vector vecArmPos, vecArmAng; GetAttachment( 0, vecArmPos, vecArmAng ); SpawnBlood(vecArmPos, pHurt->BloodColor(), 25);// a little surface blood. } else { // Play a random attack miss sound EMIT_SOUND_DYN ( ENT(pev), CHAN_WEAPON, pAttackMissSounds[ RANDOM_LONG(0,ARRAYSIZE(pAttackMissSounds)-1) ], 1.0, ATTN_NORM, 0, 100 + RANDOM_LONG(-5,5) ); } } break; case AGRUNT_AE_RIGHT_PUNCH: { CBaseEntity *pHurt = CheckTraceHullAttack( AGRUNT_MELEE_DIST, gSkillData.agruntDmgPunch, DMG_CLUB ); if ( pHurt ) { pHurt->pev->punchangle.y = 25; pHurt->pev->punchangle.x = 8; // OK to use gpGlobals without calling MakeVectors, cause CheckTraceHullAttack called it above. if ( pHurt->IsPlayer() ) { // this is a player. Knock him around. pHurt->pev->velocity = pHurt->pev->velocity + gpGlobals->v_right * -250; } EMIT_SOUND_DYN ( ENT(pev), CHAN_WEAPON, pAttackHitSounds[ RANDOM_LONG(0,ARRAYSIZE(pAttackHitSounds)-1) ], 1.0, ATTN_NORM, 0, 100 + RANDOM_LONG(-5,5) ); Vector vecArmPos, vecArmAng; GetAttachment( 0, vecArmPos, vecArmAng ); SpawnBlood(vecArmPos, pHurt->BloodColor(), 25);// a little surface blood. } else { // Play a random attack miss sound EMIT_SOUND_DYN ( ENT(pev), CHAN_WEAPON, pAttackMissSounds[ RANDOM_LONG(0,ARRAYSIZE(pAttackMissSounds)-1) ], 1.0, ATTN_NORM, 0, 100 + RANDOM_LONG(-5,5) ); } } break; default: CSquadMonster::HandleAnimEvent( pEvent ); break; } }
void moEffectSampleTest::Draw( moTempo* tempogral, moEffectState* parentstate ) { MOint indeximage; MOdouble PosTextX0, PosTextX1, PosTextY0, PosTextY1; int ancho,alto; int w = m_pResourceManager->GetRenderMan()->ScreenWidth(); int h = m_pResourceManager->GetRenderMan()->ScreenHeight(); PreDraw( tempogral, parentstate); // Guardar y resetar la matriz de vista del modelo // glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glLoadIdentity(); // Reset The View // Cambiar la proyeccion para una vista ortogonal // glDisable(GL_DEPTH_TEST); // Disables Depth Testing glMatrixMode(GL_PROJECTION); // Select The Projection Matrix glLoadIdentity(); // Reset The Projection Matrix glOrtho(0,w,0,h,-1,1); // Set Up An Ortho Screen // Funcion de blending y de alpha channel // glEnable(GL_BLEND); glDisable(GL_ALPHA); // Draw // glTranslatef( ( m_Config[moR(SAMPLETEST_TRANSLATEX)].GetData()->Fun()->Eval(m_EffectState.tempo.ang)+Tx )*w, ( m_Config[moR(SAMPLETEST_TRANSLATEY)].GetData()->Fun()->Eval(m_EffectState.tempo.ang)+Ty )*h, m_Config[moR(SAMPLETEST_TRANSLATEZ)].GetData()->Fun()->Eval(m_EffectState.tempo.ang)+Tz); glRotatef( m_Config[moR(SAMPLETEST_ROTATEX)].GetData()->Fun()->Eval(m_EffectState.tempo.ang), 1.0, 0.0, 0.0 ); glRotatef( m_Config[moR(SAMPLETEST_ROTATEY)].GetData()->Fun()->Eval(m_EffectState.tempo.ang), 0.0, 1.0, 0.0 ); glRotatef( m_Config[moR(SAMPLETEST_ROTATEZ)].GetData()->Fun()->Eval(m_EffectState.tempo.ang), 0.0, 0.0, 1.0 ); glScalef( m_Config[moR(SAMPLETEST_SCALEX)].GetData()->Fun()->Eval(m_EffectState.tempo.ang)*Sx, m_Config[moR(SAMPLETEST_SCALEY)].GetData()->Fun()->Eval(m_EffectState.tempo.ang)*Sy, m_Config[moR(SAMPLETEST_SCALEZ)].GetData()->Fun()->Eval(m_EffectState.tempo.ang)*Sz); SetColor( m_Config[moR(SAMPLETEST_COLOR)][MO_SELECTED], m_Config[moR(SAMPLETEST_ALPHA)][MO_SELECTED], m_EffectState ); SetBlending( (moBlendingModes) m_Config[moR(SAMPLETEST_BLENDING)][MO_SELECTED][0].Int() ); moTexture* pImage = (moTexture*) m_Config[moR(SAMPLETEST_TEXTURE)].GetData()->Pointer(); glBindTexture( GL_TEXTURE_2D, m_Config[moR(SAMPLETEST_TEXTURE)].GetData()->GetGLId(&m_EffectState.tempo) ); PosTextX0 = 0.0; PosTextX1 = 1.0 * ( pImage!=NULL ? pImage->GetMaxCoordS() : 1.0 ); PosTextY0 = 0.0; PosTextY1 = 1.0 * ( pImage!=NULL ? pImage->GetMaxCoordT() : 1.0 ); //ancho = (int)m_Config[ moR(SAMPLETEST_WIDTH) ].GetData()->Fun()->Eval(m_EffectState.tempo.ang)* (float)(w/800.0); //alto = (int)m_Config[ moR(SAMPLETEST_HEIGHT) ].GetData()->Fun()->Eval(m_EffectState.tempo.ang)* (float)(h/600.0); glBegin(GL_QUADS); glTexCoord2f( PosTextX0, PosTextY1); glVertex2f( -0.5*w, -0.5*h); glTexCoord2f( PosTextX1, PosTextY1); glVertex2f( 0.5*w, -0.5*h); glTexCoord2f( PosTextX1, PosTextY0); glVertex2f( 0.5*w, 0.5*h); glTexCoord2f( PosTextX0, PosTextY0); glVertex2f( -0.5*w, 0.5*h); glEnd(); moTrackerSystemData* m_pTrackerData = NULL; bool m_bTrackerInit = false; //Procesar Inlets for(int i=0; i<m_Inlets.Count(); i++) { moInlet* pInlet = m_Inlets[i]; if (pInlet->Updated() && ( pInlet->GetConnectorLabelName()==moText("TRACKERKLT") || pInlet->GetConnectorLabelName()==moText("TRACKERGPUKLT") || pInlet->GetConnectorLabelName()==moText("TRACKERGPUKLT2")) ) { m_pTrackerData = (moTrackerSystemData *)pInlet->GetData()->Pointer(); if (m_pTrackerData && !m_bTrackerInit) { m_bTrackerInit = true; //SelectScriptFunction("Reset"); //RunSelectedFunction(); //MODebug2->Push(IntToStr(TrackerId)); //MODebug2->Push(moText("Receiving:") + IntToStr(m_pTrackerData->GetFeaturesCount()) ); if (m_pTrackerData->GetFeaturesCount()>0) { int tw = m_pTrackerData->GetVideoFormat().m_Width; int th = m_pTrackerData->GetVideoFormat().m_Height; //MODebug2->Push(moText("vformat:")+IntToStr(tw)+moText("th")+IntToStr(th)); for (i = 0; i < m_pTrackerData->GetFeaturesCount(); i++) { moTrackerFeature* pF = m_pTrackerData->GetFeature(i); //if (pF && pF->valid) { float x = (pF->x / (float)tw) - 0.5; float y = -(pF->y / (float)th) + 0.5; float tr_x = (pF->tr_x / (float)tw) - 0.5; float tr_y = -(pF->tr_y / (float)th) + 0.5; float v_x = (pF->v_x / (float)tw); float v_y = -(pF->v_y / (float)th); float vel = sqrtf( v_x*v_x+v_y*v_y ); int v = pF->val; //MODebug2->Log(moText(" x:")+FloatToStr(pF->x) + moText(" y:")+FloatToStr(pF->y) ); glBindTexture(GL_TEXTURE_2D,0); glColor4f(1.0, 0.0, 0.0, 1.0); if (v >= KLT_TRACKED) glColor4f(0.0, 1.0, 0.0, 1.0); else if (v == KLT_NOT_FOUND) glColor4f(1.0, 0.0, 1.0, 1.0); else if (v == KLT_SMALL_DET) glColor4f(1.0, 0.0, 1.0, 1.0); else if (v == KLT_MAX_ITERATIONS) glColor4f(1.0, 0.0, 1.0, 1.0); else if (v == KLT_OOB) glColor4f(1.0, 0.0, 1.0, 1.0); else if (v == KLT_LARGE_RESIDUE) glColor4f(1.0, 0.0, 1.0, 1.0); if ( pF->valid ) { glBegin(GL_QUADS); glVertex2f((tr_x - 0.008)*w, (tr_y - 0.008)*h); glVertex2f((tr_x - 0.008)*w, (tr_y + 0.008)*h); glVertex2f((tr_x + 0.008)*w, (tr_y + 0.008)*h); glVertex2f((tr_x + 0.008)*w, (tr_y - 0.008)*h); glEnd(); glBegin(GL_QUADS); glVertex2f((x - 0.008)*w, (y - 0.008)*h); glVertex2f((x - 0.008)*w, (y + 0.008)*h); glVertex2f((x + 0.008)*w, (y + 0.008)*h); glVertex2f((x + 0.008)*w, (y - 0.008)*h); glEnd(); glDisable(GL_TEXTURE_2D); glColor4f(1.0, 1.0, 1.0, 1.0); glBegin(GL_LINES); glVertex2f( x*w, y*h); glVertex2f( tr_x*w, tr_y*h); glEnd(); if ( vel > 0.001 ) { glDisable(GL_TEXTURE_2D); glColor4f(0.0, 0.0, 1.0, 1.0); //glPointSize((GLfloat)10); glLineWidth((GLfloat)10.0); glBegin(GL_LINES); glVertex2f( x*w, y*h); glVertex2f( x*w+v_x*w, y*h+v_y*h); glEnd(); } } } } } } } }
void GlRasterStateInterface::BindRasterState( SRasterState const &newstate, bool bForce ) { bForce = true; bool bAlphaTestChanged = (newstate.GetAlphaTest() != mLastState.GetAlphaTest() ); // bool bTextureModeChanged = (newstate.GetTextureMode() != rLast.GetTextureMode() ); // bool bTextureActiveChanged =(newstate.GetTextureActive()!= rLast.GetTextureActive() ); bool bBlendingChanged = (newstate.GetBlending() != mLastState.GetBlending() ); bool bDepthTestChanged = (newstate.GetDepthTest() != mLastState.GetDepthTest() ); //bool bStencilModeChanged =(newstate.GetStencilID() != rLast.GetStencilID() ); bool bShadeModelChanged = (newstate.GetShadeModel() != mLastState.GetShadeModel() ); bool bCullTestChanged = (newstate.GetCullTest() != mLastState.GetCullTest() ); bool bScissorTestChanged = (newstate.GetScissorTest() != mLastState.GetScissorTest() ); GL_ERRORCHECK(); if( bCullTestChanged || bForce ) { SetCullTest( newstate.GetCullTest() ); } ///////////////////////////////////////////////// SetZWriteMask( newstate.GetZWriteMask() ); SetRGBAWriteMask( newstate.GetRGBWriteMask(), newstate.GetAWriteMask() ); ///////////////////////////////////////////////// if( true ) { glDisable( GL_STENCIL_TEST ); } ///////////////////////////////////////////////// // Win32 GL Alpha if( false ) { // glDisable( GL_ALPHA_TEST ); } else if( bAlphaTestChanged || bForce ) { static const F32 frecip = 1.0f / 15.0f; F32 fAlphaRef = frecip * (F32) newstate.muAlphaRef; switch( newstate.muAlphaTest ) { case EALPHATEST_OFF: //glDisable( GL_ALPHA_TEST ); GL_ERRORCHECK(); break; case EALPHATEST_GREATER: //glEnable( GL_ALPHA_TEST ); //glAlphaFunc( GL_GREATER, fAlphaRef ); GL_ERRORCHECK(); break; case EALPHATEST_LESS: //glEnable( GL_ALPHA_TEST ); //glAlphaFunc( GL_LESS, fAlphaRef ); GL_ERRORCHECK(); break; } } ///////////////////////////////////////////////// // Win32 GL Depth if(1)// bDepthTestChanged || bForce ) SetDepthTest( newstate.GetDepthTest() ); ///////////////////////////////////////////////// if( bScissorTestChanged || bForce ) { SetScissorTest( newstate.GetScissorTest() ); } ///////////////////////////////////////////////// if( bBlendingChanged || bForce ) { SetBlending( newstate.GetBlending() ); } GL_ERRORCHECK(); if( false ) { //glShadeModel( GL_FLAT ); } else if( bShadeModelChanged || bForce ) { switch( newstate.GetShadeModel() ) { case ESHADEMODEL_FLAT: //glShadeModel( GL_FLAT ); break; case ESHADEMODEL_SMOOTH: //glShadeModel( GL_SMOOTH ); break; default: break; } } GL_ERRORCHECK(); }