本文整理汇总了C++中idVec3函数 的典型用法代码示例。如果您正苦于以下问题:C++ idVec3函数的具体用法?C++ idVec3怎么用?C++ idVec3使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了idVec3函数 的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: va
bool idMoveable::Collide( const trace_t &collision, const idVec3 &velocity ) {
// greebo: Check whether we are colliding with the nearly exact same point again
bool sameCollisionAgain = ( lastCollision.fraction != -1 && lastCollision.c.point.Compare( collision.c.point, 0.05f ) );
// greebo: Save the collision info for the next call
lastCollision = collision;
float v = -( velocity * collision.c.normal );
if( !sameCollisionAgain ) {
float bounceSoundMinVelocity = cv_bounce_sound_min_vel.GetFloat();
float bounceSoundMaxVelocity = cv_bounce_sound_max_vel.GetFloat();
if( ( v > bounceSoundMinVelocity ) && ( gameLocal.time > nextSoundTime ) ) {
// grayman #3331 - some moveables should not bother with bouncing sounds
if( !spawnArgs.GetBool( "no_bounce_sound", "0" ) ) {
const idMaterial *material = collision.c.material;
idStr sndNameLocal;
idStr surfaceName; // "tile", "glass", etc.
if( material != NULL ) {
surfaceName = g_Global.GetSurfName( material );
// Prepend the snd_bounce_ prefix to check for a surface-specific sound
idStr sndNameWithSurface = "snd_bounce_" + surfaceName;
if( spawnArgs.FindKey( sndNameWithSurface ) != NULL ) {
sndNameLocal = sndNameWithSurface;
} else {
sndNameLocal = "snd_bounce";
}
}
const char *sound = spawnArgs.GetString( sndNameLocal );
const idSoundShader *sndShader = declManager->FindSound( sound );
//f = v > BOUNCE_SOUND_MAX_VELOCITY ? 1.0f : idMath::Sqrt( v - BOUNCE_SOUND_MIN_VELOCITY ) * ( 1.0f / idMath::Sqrt( BOUNCE_SOUND_MAX_VELOCITY - BOUNCE_SOUND_MIN_VELOCITY ) );
// angua: modify the volume set in the def instead of setting a fixed value.
// At minimum velocity, the volume should be "min_velocity_volume_decrease" lower (in db) than the one specified in the def
float f = ( v > bounceSoundMaxVelocity ) ? 0.0f : spawnArgs.GetFloat( "min_velocity_volume_decrease", "0" ) * ( idMath::Sqrt( v - bounceSoundMinVelocity ) * ( 1.0f / idMath::Sqrt( bounceSoundMaxVelocity - bounceSoundMinVelocity ) ) - 1 );
float volume = sndShader->GetParms()->volume + f;
if( cv_moveable_collision.GetBool() ) {
gameRenderWorld->DrawText( va( "Velocity: %f", v ), ( physicsObj.GetOrigin() + idVec3( 0, 0, 20 ) ), 0.25f, colorGreen, gameLocal.GetLocalPlayer()->viewAngles.ToMat3(), 1, 100 * gameLocal.msec );
gameRenderWorld->DrawText( va( "Volume: %f", volume ), ( physicsObj.GetOrigin() + idVec3( 0, 0, 10 ) ), 0.25f, colorGreen, gameLocal.GetLocalPlayer()->viewAngles.ToMat3(), 1, 100 * gameLocal.msec );
gameRenderWorld->DebugArrow( colorMagenta, collision.c.point, ( collision.c.point + 30 * collision.c.normal ), 4.0f, 1 );
}
SetSoundVolume( volume );
// greebo: We don't use StartSound() here, we want to do the sound propagation call manually
StartSoundShader( sndShader, SND_CHANNEL_ANY, 0, false, NULL );
// grayman #2603 - don't propagate a sound if this is a doused torch dropped by an AI
if( !spawnArgs.GetBool( "is_torch", "0" ) ) {
idStr sndPropName = GetSoundPropNameForMaterial( surfaceName );
// Propagate a suspicious sound, using the "group" convention (soft, hard, small, med, etc.)
PropSoundS( NULL, sndPropName, f, 0 ); // grayman #3355
}
SetSoundVolume( 0.0f );
nextSoundTime = gameLocal.time + 500;
}
}
// tels:
//DM_LOG(LC_ENTITY, LT_INFO)LOGSTRING("Moveable %s might call script_collide %s because m_collideScriptCounter = %i and v = %f and time (%d) > m_nextCollideScriptTime (%d)\r",
// name.c_str(), m_scriptCollide.c_str(), m_collideScriptCounter, v, gameLocal.time, m_nextCollideScriptTime );
if( ( m_collideScriptCounter != 0 ) && ( v > m_minScriptVelocity ) && ( gameLocal.time > m_nextCollideScriptTime ) ) {
if( m_collideScriptCounter > 0 ) {
// if positive, decrement it, so -1 stays as it is (for 0, we never come here)
m_collideScriptCounter --;
}
// call the script
const function_t *pScriptFun = scriptObject.GetFunction( m_scriptCollide.c_str() );
if( pScriptFun == NULL ) {
// Local function not found, check in global namespace
pScriptFun = gameLocal.program.FindFunction( m_scriptCollide.c_str() );
}
if( pScriptFun != NULL ) {
DM_LOG( LC_ENTITY, LT_INFO )LOGSTRING( "Moveable %s calling script_collide %s.\r",
name.c_str(), m_scriptCollide.c_str() );
idThread *pThread = new idThread( pScriptFun );
pThread->CallFunctionArgs( pScriptFun, true, "e", this );
pThread->DelayedStart( 0 );
} else {
// script function not found!
DM_LOG( LC_ENTITY, LT_ERROR )LOGSTRING( "Moveable %s could not find script_collide %s.\r",
name.c_str(), m_scriptCollide.c_str() );
m_collideScriptCounter = 0;
}
m_nextCollideScriptTime = gameLocal.time + 300;
}
}
idEntity *ent = gameLocal.entities[ collision.c.entityNum ];
trace_t newCollision = collision; // grayman #2816 - in case we need to modify collision
// grayman #2816 - if we hit the world, skip all the damage work
if( ent && ( ent != gameLocal.world ) ) {
idActor *entActor = NULL;
if( ent->IsType( idActor::Type ) ) {
entActor = static_cast<idActor *>( ent ); // the object hit an actor directly
} else if( ent->IsType( idAFAttachment::Type ) ) {
newCollision.c.id = JOINT_HANDLE_TO_CLIPMODEL_ID( static_cast<idAFAttachment *>( ent )->GetAttachJoint() );
}
// go up the bindMaster chain to see if an Actor is lurking
if( entActor == NULL ) { // no actor yet, so ent is an attachment or an attached moveable
idEntity *bindMaster = ent->GetBindMaster();
while( bindMaster != NULL ) {
if( bindMaster->IsType( idActor::Type ) ) {
entActor = static_cast<idActor *>( bindMaster ); // the object hit something attached to an actor
// If ent is an idAFAttachment, we can leave ent alone
// and pass the damage to it. It will, in turn, pass the
// damage to the actor it's attached to. (helmets)
// If ent is NOT an attachment, we have to change it to
// be the actor we just found. Inventor goggles are an
//.........这里部分代码省略.........
开发者ID:SL987654, 项目名称:The-Darkmod-Experimental, 代码行数:101, 代码来源:Moveable.cpp
示例2: v4to3
idVec3 v4to3( const idVec4 &v ) {
return idVec3( v.x / v.w, v.y / v.w, v.z / v.w );
}
开发者ID:SL987654, 项目名称:The-Darkmod-Experimental, 代码行数:3, 代码来源:tr_shadowbounds.cpp
示例3: idVec3
/*
================
idIK_Walk::Init
================
*/
bool idIK_Walk::Init( idEntity *self, const char *anim, const idVec3 &modelOffset ) {
int i;
float footSize;
idVec3 verts[4];
idTraceModel trm;
const char *jointName;
idVec3 dir, ankleOrigin, kneeOrigin, hipOrigin, dirOrigin;
idMat3 axis, ankleAxis, kneeAxis, hipAxis;
static idVec3 footWinding[4] = {
idVec3( 1.0f, 1.0f, 0.0f ),
idVec3( -1.0f, 1.0f, 0.0f ),
idVec3( -1.0f, -1.0f, 0.0f ),
idVec3( 1.0f, -1.0f, 0.0f )
};
if ( !self ) {
return false;
}
numLegs = Min( self->spawnArgs.GetInt( "ik_numLegs", "0" ), MAX_LEGS );
if ( numLegs == 0 ) {
return true;
}
if ( !idIK::Init( self, anim, modelOffset ) ) {
return false;
}
int numJoints = animator->NumJoints();
idJointMat *joints = ( idJointMat * )_alloca16( numJoints * sizeof( joints[0] ) );
// create the animation frame used to setup the IK
gameEdit->ANIM_CreateAnimFrame( animator->ModelHandle(), animator->GetAnim( modifiedAnim )->MD5Anim( 0 ), numJoints, joints, 1, animator->ModelDef()->GetVisualOffset() + modelOffset, animator->RemoveOrigin() );
enabledLegs = 0;
// get all the joints
for ( i = 0; i < numLegs; i++ ) {
jointName = self->spawnArgs.GetString( va( "ik_foot%d", i+1 ) );
footJoints[i] = animator->GetJointHandle( jointName );
if ( footJoints[i] == INVALID_JOINT ) {
gameLocal.Error( "idIK_Walk::Init: invalid foot joint '%s'", jointName );
}
jointName = self->spawnArgs.GetString( va( "ik_ankle%d", i+1 ) );
ankleJoints[i] = animator->GetJointHandle( jointName );
if ( ankleJoints[i] == INVALID_JOINT ) {
gameLocal.Error( "idIK_Walk::Init: invalid ankle joint '%s'", jointName );
}
jointName = self->spawnArgs.GetString( va( "ik_knee%d", i+1 ) );
kneeJoints[i] = animator->GetJointHandle( jointName );
if ( kneeJoints[i] == INVALID_JOINT ) {
gameLocal.Error( "idIK_Walk::Init: invalid knee joint '%s'\n", jointName );
}
jointName = self->spawnArgs.GetString( va( "ik_hip%d", i+1 ) );
hipJoints[i] = animator->GetJointHandle( jointName );
if ( hipJoints[i] == INVALID_JOINT ) {
gameLocal.Error( "idIK_Walk::Init: invalid hip joint '%s'\n", jointName );
}
jointName = self->spawnArgs.GetString( va( "ik_dir%d", i+1 ) );
dirJoints[i] = animator->GetJointHandle( jointName );
enabledLegs |= 1 << i;
}
jointName = self->spawnArgs.GetString( "ik_waist" );
waistJoint = animator->GetJointHandle( jointName );
if ( waistJoint == INVALID_JOINT ) {
gameLocal.Error( "idIK_Walk::Init: invalid waist joint '%s'\n", jointName );
}
// get the leg bone lengths and rotation matrices
for ( i = 0; i < numLegs; i++ ) {
oldAnkleHeights[i] = 0.0f;
ankleAxis = joints[ ankleJoints[ i ] ].ToMat3();
ankleOrigin = joints[ ankleJoints[ i ] ].ToVec3();
kneeAxis = joints[ kneeJoints[ i ] ].ToMat3();
kneeOrigin = joints[ kneeJoints[ i ] ].ToVec3();
hipAxis = joints[ hipJoints[ i ] ].ToMat3();
hipOrigin = joints[ hipJoints[ i ] ].ToVec3();
// get the IK direction
if ( dirJoints[i] != INVALID_JOINT ) {
dirOrigin = joints[ dirJoints[ i ] ].ToVec3();
dir = dirOrigin - kneeOrigin;
} else {
dir.Set( 1.0f, 0.0f, 0.0f );
//.........这里部分代码省略.........
开发者ID:469486139, 项目名称:DOOM-3-BFG, 代码行数:101, 代码来源:IK.cpp
示例4: Gib
/*
============
idMoveableItem::Event_Gib
============
*/
void idMoveableItem::Event_Gib(const char *damageDefName)
{
Gib(idVec3(0, 0, 1), damageDefName);
}
开发者ID:AreaScout, 项目名称:dante-doom3-odroid, 代码行数:9, 代码来源:Item.cpp
示例5: idVec3
/*
============
idAI::PredictPath
Can also be used when there is no AAS file available however ledges are not detected.
============
*/
bool idAI::PredictPath( const idEntity *ent, const idAAS *aas, const idVec3 &start, const idVec3 &velocity, int totalTime, int frameTime, int stopEvent, predictedPath_t &path ) {
int i, j, step, numFrames, curFrameTime;
idVec3 delta, curStart, curEnd, curVelocity, lastEnd, stepUp, tmpStart;
idVec3 gravity, gravityDir, invGravityDir;
float maxStepHeight, minFloorCos;
pathTrace_t trace;
if ( aas && aas->GetSettings() ) {
gravity = aas->GetSettings()->gravity;
gravityDir = aas->GetSettings()->gravityDir;
invGravityDir = aas->GetSettings()->invGravityDir;
maxStepHeight = aas->GetSettings()->maxStepHeight;
minFloorCos = aas->GetSettings()->minFloorCos;
} else {
gravity = DEFAULT_GRAVITY_VEC3;
gravityDir = idVec3( 0, 0, -1 );
invGravityDir = idVec3( 0, 0, 1 );
maxStepHeight = 14.0f;
minFloorCos = 0.7f;
}
path.endPos = start;
path.endVelocity = velocity;
path.endNormal.Zero();
path.endEvent = 0;
path.endTime = 0;
path.blockingEntity = NULL;
curStart = start;
curVelocity = velocity;
numFrames = ( totalTime + frameTime - 1 ) / frameTime;
curFrameTime = frameTime;
for ( i = 0; i < numFrames; i++ ) {
if ( i == numFrames-1 ) {
curFrameTime = totalTime - i * curFrameTime;
}
delta = curVelocity * curFrameTime * 0.001f;
path.endVelocity = curVelocity;
path.endTime = i * frameTime;
// allow sliding along a few surfaces per frame
for ( j = 0; j < MAX_FRAME_SLIDE; j++ ) {
idVec3 lineStart = curStart;
// allow stepping up three times per frame
for ( step = 0; step < 3; step++ ) {
curEnd = curStart + delta;
if ( PathTrace( ent, aas, curStart, curEnd, stopEvent, trace, path ) ) {
return true;
}
if ( step ) {
// step down at end point
tmpStart = trace.endPos;
curEnd = tmpStart - stepUp;
if ( PathTrace( ent, aas, tmpStart, curEnd, stopEvent, trace, path ) ) {
return true;
}
// if not moved any further than without stepping up, or if not on a floor surface
if ( (lastEnd - start).LengthSqr() > (trace.endPos - start).LengthSqr() - 0.1f ||
( trace.normal * invGravityDir ) < minFloorCos ) {
if ( stopEvent & SE_BLOCKED ) {
path.endPos = lastEnd;
path.endEvent = SE_BLOCKED;
if ( ai_debugMove.GetBool() ) {
gameRenderWorld->DebugLine( colorRed, lineStart, lastEnd );
}
return true;
}
curStart = lastEnd;
break;
}
}
path.endNormal = trace.normal;
path.blockingEntity = trace.blockingEntity;
// if the trace is not blocked or blocked by a floor surface
if ( trace.fraction >= 1.0f || ( trace.normal * invGravityDir ) > minFloorCos ) {
curStart = trace.endPos;
break;
}
//.........这里部分代码省略.........
开发者ID:bagobor, 项目名称:doom3.gpl, 代码行数:101, 代码来源:AI_pathing.cpp
示例6: viewTextBounds
END_CLASS
/*
================
idTrigger::DrawDebugInfo
================
*/
void idTrigger::DrawDebugInfo()
{
idMat3 axis = gameLocal.GetLocalPlayer()->viewAngles.ToMat3();
idVec3 up = axis[ 2 ] * 5.0f;
idBounds viewTextBounds( gameLocal.GetLocalPlayer()->GetPhysics()->GetOrigin() );
idBounds viewBounds( gameLocal.GetLocalPlayer()->GetPhysics()->GetOrigin() );
idBounds box( idVec3( -4.0f, -4.0f, -4.0f ), idVec3( 4.0f, 4.0f, 4.0f ) );
idEntity* ent;
idEntity* target;
int i;
bool show;
const function_t* func;
viewTextBounds.ExpandSelf( 128.0f );
viewBounds.ExpandSelf( 512.0f );
for( ent = gameLocal.spawnedEntities.Next(); ent != NULL; ent = ent->spawnNode.Next() )
{
if( ent->GetPhysics()->GetContents() & ( CONTENTS_TRIGGER | CONTENTS_FLASHLIGHT_TRIGGER ) )
{
show = viewBounds.IntersectsBounds( ent->GetPhysics()->GetAbsBounds() );
if( !show )
{
for( i = 0; i < ent->targets.Num(); i++ )
{
target = ent->targets[ i ].GetEntity();
if( target != NULL && viewBounds.IntersectsBounds( target->GetPhysics()->GetAbsBounds() ) )
{
show = true;
break;
}
}
}
if( !show )
{
continue;
}
gameRenderWorld->DebugBounds( colorOrange, ent->GetPhysics()->GetAbsBounds() );
if( viewTextBounds.IntersectsBounds( ent->GetPhysics()->GetAbsBounds() ) )
{
gameRenderWorld->DrawText( ent->name.c_str(), ent->GetPhysics()->GetAbsBounds().GetCenter(), 0.1f, colorWhite, axis, 1 );
gameRenderWorld->DrawText( ent->GetEntityDefName(), ent->GetPhysics()->GetAbsBounds().GetCenter() + up, 0.1f, colorWhite, axis, 1 );
if( ent->IsType( idTrigger::Type ) )
{
func = static_cast<idTrigger*>( ent )->GetScriptFunction();
}
else
{
func = NULL;
}
if( func )
{
gameRenderWorld->DrawText( va( "call script '%s'", func->Name() ), ent->GetPhysics()->GetAbsBounds().GetCenter() - up, 0.1f, colorWhite, axis, 1 );
}
}
for( i = 0; i < ent->targets.Num(); i++ )
{
target = ent->targets[ i ].GetEntity();
if( target )
{
gameRenderWorld->DebugArrow( colorYellow, ent->GetPhysics()->GetAbsBounds().GetCenter(), target->GetPhysics()->GetOrigin(), 10, 0 );
gameRenderWorld->DebugBounds( colorGreen, box, target->GetPhysics()->GetOrigin() );
if( viewTextBounds.IntersectsBounds( target->GetPhysics()->GetAbsBounds() ) )
{
gameRenderWorld->DrawText( target->name.c_str(), target->GetPhysics()->GetAbsBounds().GetCenter(), 0.1f, colorWhite, axis, 1 );
}
}
}
}
}
}
开发者ID:ChristophHaag, 项目名称:RBDOOM-3-BFG, 代码行数:81, 代码来源:Trigger.cpp
示例7: idVec3
// Gets called each time the mind is thinking
void CombatState::Think(idAI* owner)
{
// Do we have an expiry date?
if (_endTime > 0)
{
if (gameLocal.time >= _endTime)
{
owner->GetMind()->EndState();
}
return;
}
// Ensure we are in the correct alert level
if (!CheckAlertLevel(owner))
{
// owner->GetMind()->EndState(); // grayman #3182 - already done in CheckAlertLevel()
return;
}
// grayman #3331 - make sure you're still fighting the same enemy.
// grayman #3355 - fight the closest enemy
idActor* enemy = _enemy.GetEntity();
idActor* newEnemy = owner->GetEnemy();
if ( enemy )
{
if ( newEnemy && ( newEnemy != enemy ) )
{
idVec3 ownerOrigin = owner->GetPhysics()->GetOrigin();
float dist2EnemySqr = ( enemy->GetPhysics()->GetOrigin() - ownerOrigin ).LengthSqr();
float dist2NewEnemySqr = ( newEnemy->GetPhysics()->GetOrigin() - ownerOrigin ).LengthSqr();
if ( dist2NewEnemySqr < dist2EnemySqr )
{
owner->GetMind()->EndState();
return; // state has ended
}
}
}
else
{
enemy = newEnemy;
}
if (!CheckEnemyStatus(enemy, owner))
{
owner->GetMind()->EndState();
return; // state has ended
}
// grayman #3520 - don't look toward new alerts
if ( owner->m_lookAtAlertSpot )
{
owner->m_lookAtAlertSpot = false;
owner->m_lookAtPos = idVec3(idMath::INFINITY,idMath::INFINITY,idMath::INFINITY);
}
// angua: look at enemy
owner->Event_LookAtPosition(enemy->GetEyePosition(), gameLocal.msec);
Memory& memory = owner->GetMemory();
idVec3 vec2Enemy = enemy->GetPhysics()->GetOrigin() - owner->GetPhysics()->GetOrigin();
float dist2Enemy = vec2Enemy.LengthFast();
// grayman #3331 - need to take vertical separation into account. It's possible to have the origins
// close enough to be w/in the melee zone, but still be unable to hit the enemy.
bool inMeleeRange = ( dist2Enemy <= ( 3 * owner->GetMeleeRange() ) );
ECombatType newCombatType;
if ( inMeleeRange && !_meleePossible ) // grayman #3355 - can't fight up close
{
owner->fleeingEvent = false; // grayman #3356
owner->emitFleeBarks = false; // grayman #3474
owner->GetMind()->SwitchState(STATE_FLEE);
return;
}
if ( !inMeleeRange && _rangedPossible )
{
newCombatType = COMBAT_RANGED;
}
else
{
newCombatType = COMBAT_MELEE;
}
// Check for situation where you're in the melee zone, yet you're unable to hit
// the enemy. This can happen if the enemy is above or below you and you can't
// reach them.
switch(_combatSubState)
{
case EStateReaction:
{
if ( gameLocal.time < _reactionEndTime )
{
//.........这里部分代码省略.........
开发者ID:dolanor, 项目名称:TheDarkMod, 代码行数:101, 代码来源:CombatState.cpp
示例8: assert
/*
===============
idRenderModelSprite::InstantiateDynamicModel
===============
*/
idRenderModel *idRenderModelSprite::InstantiateDynamicModel(const struct renderEntity_s *renderEntity, const struct viewDef_s *viewDef, idRenderModel *cachedModel)
{
idRenderModelStatic *staticModel;
srfTriangles_t *tri;
modelSurface_t surf;
if (cachedModel && !r_useCachedDynamicModels.GetBool()) {
delete cachedModel;
cachedModel = NULL;
}
if (renderEntity == NULL || viewDef == NULL) {
delete cachedModel;
return NULL;
}
if (cachedModel != NULL) {
assert(dynamic_cast<idRenderModelStatic *>(cachedModel) != NULL);
assert(idStr::Icmp(cachedModel->Name(), sprite_SnapshotName) == 0);
staticModel = static_cast<idRenderModelStatic *>(cachedModel);
surf = *staticModel->Surface(0);
tri = surf.geometry;
} else {
staticModel = new idRenderModelStatic;
staticModel->InitEmpty(sprite_SnapshotName);
tri = R_AllocStaticTriSurf();
R_AllocStaticTriSurfVerts(tri, 4);
R_AllocStaticTriSurfIndexes(tri, 6);
tri->verts[ 0 ].Clear();
tri->verts[ 0 ].normal.Set(1.0f, 0.0f, 0.0f);
tri->verts[ 0 ].tangents[0].Set(0.0f, 1.0f, 0.0f);
tri->verts[ 0 ].tangents[1].Set(0.0f, 0.0f, 1.0f);
tri->verts[ 0 ].st[ 0 ] = 0.0f;
tri->verts[ 0 ].st[ 1 ] = 0.0f;
tri->verts[ 1 ].Clear();
tri->verts[ 1 ].normal.Set(1.0f, 0.0f, 0.0f);
tri->verts[ 1 ].tangents[0].Set(0.0f, 1.0f, 0.0f);
tri->verts[ 1 ].tangents[1].Set(0.0f, 0.0f, 1.0f);
tri->verts[ 1 ].st[ 0 ] = 1.0f;
tri->verts[ 1 ].st[ 1 ] = 0.0f;
tri->verts[ 2 ].Clear();
tri->verts[ 2 ].normal.Set(1.0f, 0.0f, 0.0f);
tri->verts[ 2 ].tangents[0].Set(0.0f, 1.0f, 0.0f);
tri->verts[ 2 ].tangents[1].Set(0.0f, 0.0f, 1.0f);
tri->verts[ 2 ].st[ 0 ] = 1.0f;
tri->verts[ 2 ].st[ 1 ] = 1.0f;
tri->verts[ 3 ].Clear();
tri->verts[ 3 ].normal.Set(1.0f, 0.0f, 0.0f);
tri->verts[ 3 ].tangents[0].Set(0.0f, 1.0f, 0.0f);
tri->verts[ 3 ].tangents[1].Set(0.0f, 0.0f, 1.0f);
tri->verts[ 3 ].st[ 0 ] = 0.0f;
tri->verts[ 3 ].st[ 1 ] = 1.0f;
tri->indexes[ 0 ] = 0;
tri->indexes[ 1 ] = 1;
tri->indexes[ 2 ] = 3;
tri->indexes[ 3 ] = 1;
tri->indexes[ 4 ] = 2;
tri->indexes[ 5 ] = 3;
tri->numVerts = 4;
tri->numIndexes = 6;
surf.geometry = tri;
surf.id = 0;
surf.shader = tr.defaultMaterial;
staticModel->AddSurface(surf);
}
int red = idMath::FtoiFast(renderEntity->shaderParms[ SHADERPARM_RED ] * 255.0f);
int green = idMath::FtoiFast(renderEntity->shaderParms[ SHADERPARM_GREEN ] * 255.0f);
int blue = idMath::FtoiFast(renderEntity->shaderParms[ SHADERPARM_BLUE ] * 255.0f);
int alpha = idMath::FtoiFast(renderEntity->shaderParms[ SHADERPARM_ALPHA ] * 255.0f);
idVec3 right = idVec3(0.0f, renderEntity->shaderParms[ SHADERPARM_SPRITE_WIDTH ] * 0.5f, 0.0f);
idVec3 up = idVec3(0.0f, 0.0f, renderEntity->shaderParms[ SHADERPARM_SPRITE_HEIGHT ] * 0.5f);
tri->verts[ 0 ].xyz = up + right;
tri->verts[ 0 ].color[ 0 ] = red;
tri->verts[ 0 ].color[ 1 ] = green;
tri->verts[ 0 ].color[ 2 ] = blue;
tri->verts[ 0 ].color[ 3 ] = alpha;
tri->verts[ 1 ].xyz = up - right;
tri->verts[ 1 ].color[ 0 ] = red;
tri->verts[ 1 ].color[ 1 ] = green;
//.........这里部分代码省略.........
开发者ID:AreaScout, 项目名称:dante-doom3-odroid, 代码行数:101, 代码来源:Model_sprite.cpp
示例9: GetSoundTime
//.........这里部分代码省略.........
// To avoid this, make sure that the last few hardware voices are mixed with a volume
// of zero, so they won't make a difference as they come and go.
// It isn't obvious what the exact best volume ramping method should be, just that
// it smoothly change frame to frame.
// ------------------
const int uncushionedChannels = maxEmitterChannels - s_cushionFadeChannels.GetInteger();
currentCushionDB = AdjustForCushionChannels( activeEmitterChannels, uncushionedChannels,
currentCushionDB, s_cushionFadeRate.GetFloat() * secondsPerFrame );
// ------------------
// Update Hardware
// ------------------
shakeAmp = 0.0f;
idStr showVoiceTable;
bool showVoices = s_showVoices.GetBool();
if ( showVoices ) {
showVoiceTable.Format( "currentCushionDB: %5.1f freeVoices: %i zombieVoices: %i buffers:%i/%i\n", currentCushionDB,
soundSystemLocal.hardware.GetNumFreeVoices(), soundSystemLocal.hardware.GetNumZombieVoices(),
soundSystemLocal.activeStreamBufferContexts.Num(), soundSystemLocal.freeStreamBufferContexts.Num() );
}
for ( int i = 0; i < activeEmitterChannels.Num(); i++ ) {
idSoundChannel * chan = activeEmitterChannels[i].channel;
chan->UpdateHardware( 0.0f, currentTime );
if ( showVoices ) {
idStr voiceLine;
voiceLine.Format( "%5.1f db [%3i:%2i] %s", chan->volumeDB, chan->emitter->index, chan->logicalChannel, chan->CanMute() ? "" : " <CANT MUTE>\n" );
idSoundSample * leadinSample = chan->leadinSample;
idSoundSample * loopingSample = chan->loopingSample;
if ( loopingSample == NULL ) {
voiceLine.Append( va( "%ikhz*%i %s\n", leadinSample->SampleRate()/1000, leadinSample->NumChannels(), leadinSample->GetName() ) );
} else if ( loopingSample == leadinSample ) {
voiceLine.Append( va( "%ikhz*%i <LOOPING> %s\n", leadinSample->SampleRate()/1000, leadinSample->NumChannels(), leadinSample->GetName() ) );
} else {
voiceLine.Append( va( "%ikhz*%i %s | %ikhz*%i %s\n", leadinSample->SampleRate()/1000, leadinSample->NumChannels(), leadinSample->GetName(), loopingSample->SampleRate()/1000, loopingSample->NumChannels(), loopingSample->GetName() ) );
}
showVoiceTable += voiceLine;
}
// Calculate shakes
if ( chan->hardwareVoice == NULL ) {
continue;
}
shakeAmp += chan->parms.shakes * chan->hardwareVoice->GetGain() * chan->currentAmplitude;
}
if ( showVoices ) {
static idOverlayHandle handle;
console->PrintOverlay( handle, JUSTIFY_LEFT, showVoiceTable.c_str() );
}
if ( s_drawSounds.GetBool() && renderWorld != NULL ) {
for ( int e = 0; e < emitters.Num(); e++ ) {
idSoundEmitterLocal * emitter = emitters[e];
bool audible = false;
float maxGain = 0.0f;
for ( int c = 0; c < emitter->channels.Num(); c++ ) {
if ( emitter->channels[c]->hardwareVoice != NULL ) {
audible = true;
maxGain = Max( maxGain, emitter->channels[c]->hardwareVoice->GetGain() );
}
}
if ( !audible ) {
continue;
}
static const int lifetime = 20;
idBounds ref;
ref.Clear();
ref.AddPoint( idVec3( -10.0f ) );
ref.AddPoint( idVec3( 10.0f ) );
// draw a box
renderWorld->DebugBounds( idVec4( maxGain, maxGain, 1.0f, 1.0f ), ref, emitter->origin, lifetime );
if ( emitter->origin != emitter->spatializedOrigin ) {
renderWorld->DebugLine( idVec4( 1.0f, 0.0f, 0.0f, 1.0f ), emitter->origin, emitter->spatializedOrigin, lifetime );
}
// draw the index
idVec3 textPos = emitter->origin;
textPos.z -= 8;
renderWorld->DrawText( va("%i", e), textPos, 0.1f, idVec4(1,0,0,1), listener.axis, 1, lifetime );
textPos.z += 8;
// run through all the channels
for ( int k = 0; k < emitter->channels.Num(); k++ ) {
idSoundChannel * chan = emitter->channels[k];
float min = chan->parms.minDistance;
float max = chan->parms.maxDistance;
const char * defaulted = chan->leadinSample->IsDefault() ? " *DEFAULTED*" : "";
idStr text;
text.Format( "%s (%i %i/%i)%s", chan->soundShader->GetName(), idMath::Ftoi( emitter->spatializedDistance ), idMath::Ftoi( min ), idMath::Ftoi( max ), defaulted );
renderWorld->DrawText( text, textPos, 0.1f, idVec4(1,0,0,1), listener.axis, 1, lifetime );
textPos.z += 8;
}
}
}
}
开发者ID:469486139, 项目名称:DOOM-3-BFG, 代码行数:101, 代码来源:snd_world.cpp
示例10: idAFConstraint_Fixed
/*
================
idAF::AddBindConstraints
================
*/
void idAF::AddBindConstraints( void ) {
const idKeyValue *kv;
idStr name;
idAFBody *body;
idLexer lexer;
idToken type, bodyName, jointName;
idVec3 origin, renderOrigin;
idMat3 axis, renderAxis;
if ( !IsLoaded() ) {
return;
}
const idDict &args = self->spawnArgs;
// get the render position
origin = physicsObj.GetOrigin( 0 );
axis = physicsObj.GetAxis( 0 );
renderAxis = baseAxis.Transpose() * axis;
renderOrigin = origin - baseOrigin * renderAxis;
// parse all the bind constraints
for ( kv = args.MatchPrefix( "bindConstraint ", NULL ); kv; kv = args.MatchPrefix( "bindConstraint ", kv ) ) {
name = kv->GetKey();
name.Strip( "bindConstraint " );
lexer.LoadMemory( kv->GetValue(), kv->GetValue().Length(), kv->GetKey() );
lexer.ReadToken( &type );
lexer.ReadToken( &bodyName );
body = physicsObj.GetBody( bodyName );
if ( !body ) {
gameLocal.Warning( "idAF::AddBindConstraints: body '%s' not found on entity '%s'", bodyName.c_str(), self->name.c_str() );
lexer.FreeSource();
continue;
}
if ( type.Icmp( "fixed" ) == 0 ) {
idAFConstraint_Fixed *c;
c = new idAFConstraint_Fixed( name, body, NULL );
physicsObj.AddConstraint( c );
}
else if ( type.Icmp( "ballAndSocket" ) == 0 ) {
idAFConstraint_BallAndSocketJoint *c;
c = new idAFConstraint_BallAndSocketJoint( name, body, NULL );
physicsObj.AddConstraint( c );
lexer.ReadToken( &jointName );
jointHandle_t joint = animator->GetJointHandle( jointName );
if ( joint == INVALID_JOINT ) {
gameLocal.Warning( "idAF::AddBindConstraints: joint '%s' not found", jointName.c_str() );
}
animator->GetJointTransform( joint, gameLocal.time, origin, axis );
c->SetAnchor( renderOrigin + origin * renderAxis );
}
else if ( type.Icmp( "universal" ) == 0 ) {
idAFConstraint_UniversalJoint *c;
c = new idAFConstraint_UniversalJoint( name, body, NULL );
physicsObj.AddConstraint( c );
lexer.ReadToken( &jointName );
jointHandle_t joint = animator->GetJointHandle( jointName );
if ( joint == INVALID_JOINT ) {
gameLocal.Warning( "idAF::AddBindConstraints: joint '%s' not found", jointName.c_str() );
}
animator->GetJointTransform( joint, gameLocal.time, origin, axis );
c->SetAnchor( renderOrigin + origin * renderAxis );
c->SetShafts( idVec3( 0, 0, 1 ), idVec3( 0, 0, -1 ) );
}
else {
gameLocal.Warning( "idAF::AddBindConstraints: unknown constraint type '%s' on entity '%s'", type.c_str(), self->name.c_str() );
}
lexer.FreeSource();
}
hasBindConstraints = true;
}
开发者ID:waninkoko, 项目名称:doom3.x64, 代码行数:87, 代码来源:AF.cpp
示例11: idMapBrushSide
/*
=================
idMapBrush::ParseQ3
=================
*/
idMapBrush *idMapBrush::ParseQ3( idLexer &src, const idVec3 &origin ) {
int i, shift[2], rotate;
float scale[2];
idVec3 planepts[3];
idToken token;
idList<idMapBrushSide*> sides;
idMapBrushSide *side;
idDict epairs;
do {
if ( src.CheckTokenString( "}" ) ) {
break;
}
side = new idMapBrushSide();
sides.Append( side );
// read the three point plane definition
if (!src.Parse1DMatrix( 3, planepts[0].ToFloatPtr() ) ||
!src.Parse1DMatrix( 3, planepts[1].ToFloatPtr() ) ||
!src.Parse1DMatrix( 3, planepts[2].ToFloatPtr() ) ) {
src.Error( "idMapBrush::ParseQ3: unable to read brush side plane definition" );
sides.DeleteContents( true );
return NULL;
}
planepts[0] -= origin;
planepts[1] -= origin;
planepts[2] -= origin;
side->plane.FromPoints( planepts[0], planepts[1], planepts[2] );
// read the material
if ( !src.ReadTokenOnLine( &token ) ) {
src.Error( "idMapBrush::ParseQ3: unable to read brush side material" );
sides.DeleteContents( true );
return NULL;
}
// we have an implicit 'textures/' in the old format
side->material = "textures/" + token;
// read the texture shift, rotate and scale
shift[0] = src.ParseInt();
shift[1] = src.ParseInt();
rotate = src.ParseInt();
scale[0] = src.ParseFloat();
scale[1] = src.ParseFloat();
side->texMat[0] = idVec3( 0.03125f, 0.0f, 0.0f );
side->texMat[1] = idVec3( 0.0f, 0.03125f, 0.0f );
side->origin = origin;
// Q2 allowed override of default flags and values, but we don't any more
if ( src.ReadTokenOnLine( &token ) ) {
if ( src.ReadTokenOnLine( &token ) ) {
if ( src.ReadTokenOnLine( &token ) ) {
}
}
}
} while( 1 );
idMapBrush *brush = new idMapBrush();
for ( i = 0; i < sides.Num(); i++ ) {
brush->AddSide( sides[i] );
}
brush->epairs = epairs;
return brush;
}
开发者ID:Justasic, 项目名称:DOOM-3, 代码行数:75, 代码来源:MapFile.cpp
示例12: VECX_ALLOCA
/*
============
idBox::FromPoints
Tight box for a collection of points.
============
*/
void idBox::FromPoints( const idVec3 *points, const int numPoints ) {
int i;
float invNumPoints, sumXX, sumXY, sumXZ, sumYY, sumYZ, sumZZ;
idVec3 dir;
idBounds bounds;
idMatX eigenVectors;
idVecX eigenValues;
// compute mean of points
center = points[0];
for ( i = 1; i < numPoints; i++ ) {
center += points[i];
}
invNumPoints = 1.0f / numPoints;
center *= invNumPoints;
// compute covariances of points
sumXX = 0.0f; sumXY = 0.0f; sumXZ = 0.0f;
sumYY = 0.0f; sumYZ = 0.0f; sumZZ = 0.0f;
for ( i = 0; i < numPoints; i++ ) {
dir = points[i] - center;
sumXX += dir.x * dir.x;
sumXY += dir.x * dir.y;
sumXZ += dir.x * dir.z;
sumYY += dir.y * dir.y;
sumYZ += dir.y * dir.z;
sumZZ += dir.z * dir.z;
}
sumXX *= invNumPoints;
sumXY *= invNumPoints;
sumXZ *= invNumPoints;
sumYY *= invNumPoints;
sumYZ *= invNumPoints;
sumZZ *= invNumPoints;
// compute eigenvectors for covariance matrix
eigenValues.SetData( 3, VECX_ALLOCA( 3 ) );
eigenVectors.SetData( 3, 3, MATX_ALLOCA( 3 * 3 ) );
eigenVectors[0][0] = sumXX;
eigenVectors[0][1] = sumXY;
eigenVectors[0][2] = sumXZ;
eigenVectors[1][0] = sumXY;
eigenVectors[1][1] = sumYY;
eigenVectors[1][2] = sumYZ;
eigenVectors[2][0] = sumXZ;
eigenVectors[2][1] = sumYZ;
eigenVectors[2][2] = sumZZ;
eigenVectors.Eigen_SolveSymmetric( eigenValues );
eigenVectors.Eigen_SortIncreasing( eigenValues );
axis[0][0] = eigenVectors[0][0];
axis[0][1] = eigenVectors[0][1];
axis[0][2] = eigenVectors[0][2];
axis[1][0] = eigenVectors[1][0];
axis[1][1] = eigenVectors[1][1];
axis[1][2] = eigenVectors[1][2];
axis[2][0] = eigenVectors[2][0];
axis[2][1] = eigenVectors[2][1];
axis[2][2] = eigenVectors[2][2];
extents[0] = eigenValues[0];
extents[1] = eigenValues[0];
extents[2] = eigenValues[0];
// refine by calculating the bounds of the points projected onto the axis and adjusting the center and extents
bounds.Clear();
for ( i = 0; i < numPoints; i++ ) {
bounds.AddPoint( idVec3( points[i] * axis[0], points[i] * axis[1], points[i] * axis[2] ) );
}
center = ( bounds[0] + bounds[1] ) * 0.5f;
extents = bounds[1] - center;
center *= axis;
}
开发者ID:Justasic, 项目名称:DOOM-3, 代码行数:81, 代码来源:Box.cpp
示例13: switch
//.........这里部分代码省略.........
sit.typeInfo = &idAFEntity_Base::Type;
sit.textKey = "articulatedFigure";
selectableEntityClasses.Append( sit );
break;
case 4:
sit.typeInfo = &idFuncEmitter::Type;
sit.textKey = "model";
selectableEntityClasses.Append( sit );
break;
case 5:
sit.typeInfo = &idAI::Type;
sit.textKey = "name";
selectableEntityClasses.Append( sit );
break;
case 6:
sit.typeInfo = &idEntity::Type;
sit.textKey = "name";
selectableEntityClasses.Append( sit );
break;
case 7:
sit.typeInfo = &idEntity::Type;
sit.textKey = "model";
selectableEntityClasses.Append( sit );
break;
default:
return;
}
idBounds viewBounds( gameLocal.GetLocalPlayer()->GetPhysics()->GetOrigin() );
idBounds viewTextBounds( gameLocal.GetLocalPlayer()->GetPhysics()->GetOrigin() );
idMat3 axis = gameLocal.GetLocalPlayer()->viewAngles.ToMat3();
viewBounds.ExpandSelf( 512 );
viewTextBounds.ExpandSelf( 128 );
idStr textKey;
for( ent = gameLocal.spawnedEntities.Next(); ent != NULL; ent = ent->spawnNode.Next() ) {
idVec4 color;
textKey = "";
if ( !EntityIsSelectable( ent, &color, &textKey ) ) {
continue;
}
bool drawArrows = false;
if ( ent->GetType() == &idAFEntity_Base::Type ) {
if ( !static_cast<idAFEntity_Base *>(ent)->IsActiveAF() ) {
continue;
}
} else if ( ent->GetType() == &idSound::Type ) {
if ( ent->fl.selected ) {
drawArrows = true;
}
const idSoundShader * ss = declManager->FindSound( ent->spawnArgs.GetString( textKey ) );
if ( ss->HasDefaultSound() || ss->base->GetState() == DS_DEFAULTED ) {
color.Set( 1.0f, 0.0f, 1.0f, 1.0f );
}
} else if ( ent->GetType() == &idFuncEmitter::Type ) {
if ( ent->fl.selected ) {
drawArrows = true;
}
}
if ( !viewBounds.ContainsPoint( ent->GetPhysics()->GetOrigin() ) ) {
continue;
}
gameRenderWorld->DebugBounds( color, idBounds( ent->GetPhysics()->GetOrigin() ).Expand( 8 ) );
if ( drawArrows ) {
idVec3 start = ent->GetPhysics()->GetOrigin();
idVec3 end = start + idVec3( 1, 0, 0 ) * 20.0f;
gameRenderWorld->DebugArrow( colorWhite, start, end, 2 );
gameRenderWorld->DrawText( "x+", end + idVec3( 4, 0, 0 ), 0.15f, colorWhite, axis );
end = start + idVec3( 1, 0, 0 ) * -20.0f;
gameRenderWorld->DebugArrow( colorWhite, start, end, 2 );
gameRenderWorld->DrawText( "x-", end + idVec3( -4, 0, 0 ), 0.15f, colorWhite, axis );
end = start + idVec3( 0, 1, 0 ) * +20.0f;
gameRenderWorld->DebugArrow( colorGreen, start, end, 2 );
gameRenderWorld->DrawText( "y+", end + idVec3( 0, 4, 0 ), 0.15f, colorWhite, axis );
end = start + idVec3( 0, 1, 0 ) * -20.0f;
gameRenderWorld->DebugArrow( colorGreen, start, end, 2 );
gameRenderWorld->DrawText( "y-", end + idVec3( 0, -4, 0 ), 0.15f, colorWhite, axis );
end = start + idVec3( 0, 0, 1 ) * +20.0f;
gameRenderWorld->DebugArrow( colorBlue, start, end, 2 );
gameRenderWorld->DrawText( "z+", end + idVec3( 0, 0, 4 ), 0.15f, colorWhite, axis );
end = start + idVec3( 0, 0, 1 ) * -20.0f;
gameRenderWorld->DebugArrow( colorBlue, start, end, 2 );
gameRenderWorld->DrawText( "z-", end + idVec3( 0, 0, -4 ), 0.15f, colorWhite, axis );
}
if ( textKey.Length() ) {
const char *text = ent->spawnArgs.GetString( textKey );
if ( viewTextBounds.ContainsPoint( ent->GetPhysics()->GetOrigin() ) ) {
gameRenderWorld->DrawText( text, ent->GetPhysics()->GetOrigin() + idVec3(0, 0, 12), 0.25, colorWhite, axis, 1 );
}
}
}
}
开发者ID:Salamek, 项目名称:Shadow-of-Dust, 代码行数:101, 代码来源:GameEdit.cpp
示例14: GetJointViaIndex
void idKeypad::OnFrob( idEntity* activator )
{
int index;
if (!activator->spawnArgs.GetInt( "index", "", index))
{
return;
}
//common->Printf("%d\n", index);
if (index == 16)
{
this->StartSound( "snd_error" , SND_CHANNEL_ANY, 0, false, NULL );
return;
}
//PostEventSec( &EV_Turret_muzzleflashoff, MUZZLEFLASHTIME);
if (index >= 0 && index <= 8)
{
jointHandle_t joint;
joint = animator.GetJointHandle( GetJointViaIndex(index) );
animator.SetJointPos(joint, JOINTMOD_LOCAL, idVec3(-0.8f, 0, 0) );
transitions[index] = gameLocal.time + PRESSTIME;
}
StartSound( "snd_press", SND_CHANNEL_ANY, 0, false, NULL );
if (counter <= 0)
{
Event_PlayAnim("marker0", 4);
}
else if (counter == 1)
{
Event_PlayAnim("marker1", 4);
}
else if (counter == 2)
{
Event_PlayAnim("marker2", 4);
}
else if (counter == 3)
{
Event_PlayAnim("marker3", 4);
}
input[counter] = index;
counter++;
if (counter >= 4)
{
int i;
for (i = 0; i < 9; i++)
{
this->frobcubes[i]->isFrobbable = false;
}
counter = 0;
//TODO if successful.
// gameLocal.GetLocalPlayer()->Event_useAmmo("ammo_hacktool", 1)
if ( input[0] == keycode[0] && input[1] == keycode[1] && input[2] == keycode[2] && input[3] == keycode[3] )
{
//done success.
bluebox->Hide();
ActivateTargets( this );
state = CONFIRM_SUCCESS;
int doneTime = Event_PlayAnim("success", 4);
nextStateTime = doneTime;
SetSkin(declManager->FindSkin("skins/keypad/green"));
//add hud message.
StartSound( "snd_deactivated", SND_CHANNEL_ANY, 0, false, NULL);
return;
}
else
{
//fail.
state = CONFIRM_FAIL;
int doneTime = Event_PlayAnim("fail", 4);
nextStateTime = doneTime;
SetSkin(declManager->FindSkin("skins/keypad/red"));
return;
}
}
}
开发者ID:tankorsmash, 项目名称:quadcow, 代码行数:94, 代码来源:keypad.cpp
示例15: parser
//.........这里部分代码省略.........
while( parser.ReadToken( &token ) ) {
if ( !token.Icmp( "seed" ) ) {
seed = parser.ParseInt();
} else if ( !token.Icmp( "size_x" ) ) {
size_x = parser.ParseFloat();
} else if ( !token.Icmp( "size_y" ) ) {
size_y = parser.ParseFloat();
} else if ( !token.Icmp( "verts_x" ) ) {
verts_x = parser.ParseFloat();
if ( verts_x < 2 ) {
parser.Warning( "Invalid # of verts. Using default model." );
MakeDefaultModel();
return;
}
} else if ( !token.Icmp( "verts_y" ) ) {
verts_y = parser.ParseFloat();
if ( verts_y < 2 ) {
parser.Warning( "Invalid # of verts. Using default model." );
MakeDefaultModel();
return;
}
} else if ( !token.Icmp( "liquid_type" ) ) {
liquid_type = parser.ParseInt() - 1;
if ( ( liquid_type < 0 ) || ( liquid_type >= LIQUID_MAX_TYPES ) ) {
parser.Warning( "Invalid liquid_type. Using default model." );
MakeDefaultModel();
return;
}
} else if ( !token.Icmp( "density" ) ) {
density = parser.ParseFloat();
} else if ( !token.Icmp( "drop_height" ) ) {
drop_height = parser.ParseFloat();
} else if ( !token.Icmp( "drop_radius" ) ) {
drop_radius = parser.ParseInt();
} else if ( !token.Icmp( "drop_delay" ) ) {
drop_delay = SEC2MS( parser.ParseFloat() );
} else if ( !token.Icmp( "shader" ) ) {
parser.ReadToken( &token );
shader = declManager->FindMaterial( token );
} else if ( !token.Icmp( "seed" ) ) {
seed = parser.ParseInt();
} else if ( !token.Icmp( "update_rate" ) ) {
rate = parser.ParseFloat();
if ( ( rate <= 0.0f ) || ( rate > 60.0f ) ) {
parser.Warning( "Invalid update_rate. Must be between 0 and 60. Using default model." );
MakeDefaultModel();
return;
}
update_tics = 1000 / rate;
} else {
parser.Warning( "Unknown parameter '%s'. Using default model.", token.c_str() );
MakeDefaultModel();
return;
}
}
scale_x = size_x / ( verts_x - 1 );
scale_y = size_y / ( verts_y - 1 );
pages.SetNum( 2 * verts_x * verts_y );
page1 = pages.Ptr();
page2 = page1 + verts_x * verts_y;
verts.SetNum( verts_x * verts_y );
for ( i = 0, y = 0; y < verts_y; y++ ) {
for ( x = 0; x < verts_x; x++, i++ ) {
page1[ i ] = 0.0f;
page2[ i ] = 0.0f;
verts[ i ].Clear();
verts[ i ].xyz.Set( x * scale_x, y * scale_y, 0.0f );
verts[ i ].st.Set( (float) x / (float)( verts_x - 1 ), (float) -y / (float)( verts_y - 1 ) );
}
}
tris.SetNum( ( verts_x - 1 ) * ( verts_y - 1 ) * 6 );
for( i = 0, y = 0; y < verts_y - 1; y++ ) {
for( x = 1; x < verts_x; x++, i += 6 ) {
tris[ i + 0 ] = y * verts_x + x;
tris[ i + 1 ] = y * verts_x + x - 1;
tris[ i + 2 ] = ( y + 1 ) * verts_x + x - 1;
tris[ i + 3 ] = ( y + 1 ) * verts_x + x - 1;
tris[ i + 4 ] = ( y + 1 ) * verts_x + x;
tris[ i + 5 ] = y * verts_x + x;
}
}
// build the information that will be common to all animations of this mesh:
// sil edge connectivity and normal / tangent generation information
deformInfo = R_BuildDeformInfo( verts.Num(), verts.Ptr(), tris.Num(), tris.Ptr(), true );
bounds.Clear();
bounds.AddPoint( idVec3( 0.0f, 0.0f, drop_height * -10.0f ) );
bounds.AddPoint( idVec3( ( verts_x - 1 ) * scale_x, ( verts_y - 1 ) * scale_y, drop_height * 10.0f ) );
// set the timestamp for reloadmodels
fileSystem->ReadFile( name, NULL, &timeStamp );
Reset();
}
开发者ID:4DA, 项目名称:doom3.gpl, 代码行数:101, 代码来源:Model_liquid.cpp
六六分期app的软件客服如何联系?不知道吗?加qq群【895510560】即可!标题:六六分期
阅读:19234| 2023-10-27
今天小编告诉大家如何处理win10系统火狐flash插件总是崩溃的问题,可能很多用户都不知
阅读:10000| 2022-11-06
今天小编告诉大家如何对win10系统删除桌面回收站图标进行设置,可能很多用户都不知道
阅读:8331| 2022-11-06
今天小编告诉大家如何对win10系统电脑设置节能降温的设置方法,想必大家都遇到过需要
阅读:8701| 2022-11-06
我们在使用xp系统的过程中,经常需要对xp系统无线网络安装向导设置进行设置,可能很多
阅读:8646| 2022-11-06
今天小编告诉大家如何处理win7系统玩cf老是与主机连接不稳定的问题,可能很多用户都不
阅读:9668| 2022-11-06
电脑对日常生活的重要性小编就不多说了,可是一旦碰到win7系统设置cf烟雾头的问题,很
阅读:8632| 2022-11-06
我们在日常使用电脑的时候,有的小伙伴们可能在打开应用的时候会遇见提示应用程序无法
阅读:8005| 2022-11-06
今天小编告诉大家如何对win7系统打开vcf文件进行设置,可能很多用户都不知道怎么对win
阅读:8666| 2022-11-06
今天小编告诉大家如何对win10系统s4开启USB调试模式进行设置,可能很多用户都不知道怎
阅读:7540| 2022-11-06
请发表评论