Jump to content
  • Advertisement

Mbrpistoni

Member
  • Content Count

    11
  • Joined

  • Last visited

Community Reputation

108 Neutral

About Mbrpistoni

  • Rank
    Member
  1. So, I finally got a wwise license, so I'm triying to implement It within my custom engine (is build on c++, Directx11, Physx, Cal3D). I'm using the documentation you can find within the SDK and I'm finding a big problem: linker error on AK::MemoryMgr::Init(). This is all the code I have (wich is pretty much copy/paste from the help file)   #include "AK/SoundEngine/Common/AkMemoryMgr.h" #include "AK/SoundEngine/Common/AkModule.h" bool CWwiseManager::initSoundEngine() {     AkMemSettings memSetting;     memSettings.uMaxNumPools = 20;     if (AK::MemoryMgr::Init(&memSettings) != AKRESULT::AK_Success)     {         assert(!"Could not create the memory manager.");         return false;     }     return true; }   and that's the error   Error    1    error LNK2001: unresolved external symbol "enum AKRESULT __cdecl AK::MemoryMgr::Init(struct AkMemSettings *)" (?Init@MemoryMgr@AK@@YA?AW4AKRESULT@@PEAUAkMemSettings@@@Z)    E:\bitBucket\thirst_componentes\engine\wwise_manager.obj    engine     I can't find any solution to this problem. Anywhere. Does anyone know anything about It? Can you bring some light to my dark corner? Thank you!   SOLUTION: I was missing a VERY important step: link all the libs needed. Just In case you are wondering, this is the complete list you need for x64/x32 DEBUG in your linker/aditional dependencies     AkConvolutionReverbFX.lib     AkFlangerFX.lib     AstoundsoundExpanderFX.lib     AkTremoloFX.lib     AkMemoryMgr.lib     AuroHeadphoneFX.lib     IOSONOProximityMixer.lib     AkMotionGenerator.lib     AkSineSource.lib     AkSoundSeedWind.lib     AkStereoDelayFX.lib     AkGuitarDistortionFX.lib     AkRumble.lib     AuroPannerMixer.lib     AkSoundEngine.lib     AkSilenceSource.lib     AkPeakLimiterFX.lib     McDSPLimiterFX.lib     iZTrashBoxModelerFX.lib     AkSoundSeedImpactFX.lib     AkRoomVerbFX.lib     iZTrashDelayFX.lib     McDSPFutzBoxFX.lib     AkParametricEQFX.lib     AstoundsoundFolddownFX.lib     AkToneSource.lib     AkMatrixReverbFX.lib     AkCompressorFX.lib     AkAudioInputSource.lib     AkMusicEngine.lib     AkSoundSeedWoosh.lib     CrankcaseAudioREVModelPlayerFX.lib     iZTrashMultibandDistortionFX.lib     iZHybridReverbFX.lib     AkPitchShifterFX.lib     iZTrashDynamicsFX.lib     iZTrashDistortionFX.lib     AstoundsoundRTIFX.lib     AkDelayFX.lib     AkGainFX.lib     AkVorbisDecoder.lib     AkMeterFX.lib     AstoundsoundShared.lib     iZTrashFiltersFX.lib     AkSynthOne.lib     AkMP3Source.lib     AkStreamMgr.lib     AkHarmonizerFX.lib     AkTimeStretchFX.lib     AkExpanderFX.lib     CommunicationCentral.lib  
  2. Hi! I'm developing a demo for the university, It's about 15 min long, sci-fy third person style (closest reference is Batman Arkam). It uses PBR, so you can imagine environment looks real. Now I want to start working on sound and I was looking forward WWise. Non commercial license says that I'm limited to 200 sound assets. So, my question is Will It be enough to make a good sound for the game? Thanks
  3. Hi! I'm doing a game using c++, physx and directx11.   My problem is that: I'm implementing and elvator. When the player goes in, the elevator closes and starts to move. 1. Player is a Pysx Character Controller 2. Elevator walls are Rigid Dynamic with Box Geometry (there are 5 of those: floor, 3 walls and another wall wich is the door I close).  3. Elevator Rigid Dynamic elements are NO KINNMATIC 4. Elevator movement is diagonal/up (you can think in a slide direction). For the good of question, lets say It goes Up+Right   All this works great, player can move inside the elevator and it's capsule collides with the walls (the rigid dynamic bodies), except in one case: If the player moves against the elevator direction (to the left), the capsule goes through the wall like there's nothing there. Is the only case.   My question: Does anyone knows what the heck is happening? Thank you All.  
  4. Nvidia answered! That's what they told me       I asked the engineer who wrote the character controller, and he said: "This is probably due to a large gravity. Gravity in CCT-parlance is just the length of the user-provided displacement vector, in the “up” direction. So if the CCT does not move, the given displacement might be for example (0, -10, 0). We compute the temporal bounding volume (TBV) using this vector, i.e. we take the AABB around the capsule at its start position, the AABB around the capsule at its expected end position, and compute the AABB enclosing both. If the displacement is large in the negative up direction, this can give a long AABB similar to the one in the screenshot. Then IIRC this AABB can further be enlarged depending on other CCT parameters like the “max jump height” or things like this. It is fairly normal for these boxes to be larger than the capsule."
  5. Well, 2 of my main problems are solved. Frist problem was that FPS were down to 9 - 10. Problem was I was misusing the flags. At first I thought that those had no effect on the Character Controller, I was totally wrong. Character Controller filters relies on both, flags and callback method.   CHARACTER CONTROLLER //filter data to make collision callback work filterData.word0 = FilterGroup::eENEMYALIVE; filterData.word1 = FilterGroup::eENEMYALIVE | FilterGroup::eBULLETS; controllerFilters.mFilterData = &filterData; controllerFilters.mCCTFilterCallback = &collisionFilter; controllerFilters.mFilterFlags = physx::PxQueryFlag::eSTATIC | physx::PxQueryFlag::eDYNAMIC;   //set the tag to userData to allow collision callback access TCompTags* tags = e->get<TCompTags>(); uint32_t tag = tags->getTag(); capsuleControllerDesc.userData = (void *)tag;   CODE OF FILTER() WITHIN MY CLASS CCharacterControllerFilter : public physx::PxControllerFilterCallback   bool CCharacterControllerFilter::filter(const physx::PxController& a, const physx::PxController& b) { uint32_t tagA = (uint32_t)a.getUserData(); uint32_t tagB = (uint32_t)b.getUserData(); if (GCONST_TAGS_ENEMY_DEAD == tagA || GCONST_TAGS_ENEMY_DEAD == tagB) return false; return true; }   2. The second problem was that alive enemies where not "listening" the filters and they keept colliding with the dead enemies. It was a tricky problem. I had and avoidance logic between enemies so the don't collapse when chasing or taunt the player. It just happened that my avoid distance was EXACTLY the with size of the AABB that Physx use for the capsules. So, when I looked into Visual Debugger, what seems like collision detection, really was my avoidance logic. As soon as I assured that avoidance only happen between alive enemies, problem solved!   As soon as I got answer from Nvidia I will post why AABB are so tall (and random). http://imgur.com/PBETICO
  6. Yes, that line activates my custom filter (the one I already posted) and not only not improves the game, It becames unplayable (dropes to 10 fps). The posted image is an screenshot of my game in visual debugger. Those are my current AABB. I have check my code, line by line, and I can't see where I'm modifing the AABB. I have read the documentation and I don't even find a way to do It. There are no hiden objects, everything is being shown. I followed your advice and post it on Nvidia forums (just the part of the AABB). There's always hope. About the scale... I'm gonna check It. I'm exporting the meshes from 3dMax with a custom exporter. There's a chance.   Anyway, thanks a lot for your help. I will post the solution (If I find It). Cheers
  7. Hi again. I just tested the static filter and does the same. Physx is last version (currently 3.3.2). Visual Studio 2013 (in case that matters) May I be missing something?   in the physx::PxControllerFilters I'm only setting this parameter controllerFilters.mCCTFilterCallback = &collisionFilter;    where collisionFilter is an instance of an static class that inherits from PxControllerFilterCallback.   The rest of the parameters are not being set because I tested those yesterday and I did not see any difference (they are commented as you can see). /*     filterData.word0 = FilterGroup::eENEMYALIVE;     filterData.word1 = FilterGroup::eENEMYALIVE | FilterGroup::eBULLETS;     controllerFilters.mFilterData = &filterData;     controllerFilters.mFilterFlags = physx::PxQueryFlag::eSTATIC | physx::PxQueryFlag::eDYNAMIC;  */   That's my move function physx::PxControllerCollisionFlags collisionFlags = capsuleController->move(             Physics.XMVECTORToPxVec3(delta_pos),             0.01f,             physx::PxF32(elapsed),             controllerFilters,             NULL);   thanks a lot for your time   UPDATE: Using Nvidia debugger I have observed 2 thigs: 1. collisions are allways been checked on every frame every time a character controller moves. If I change the flag  controllerFilters.mFilterFlags = physx::PxQueryFlag::eSTATIC | physx::PxQueryFlag::eDYNAMIC; and set it to check only DYNAMIC, character controllers falls through the ground. It's like it's checking every collision AABB are having against the floor 2. AABB are way too big on the player, Enemies have a big one too, but still goes underground. screenshot http://imgur.com/PBETICO
  8. Hi! Thanks for answering. I think those lines are the problem, but not for what they but how I use It. I'll try to explain. My game engine relies on a Handlers-component system. Every element in the game is an entity wich have components. In this case I have the Enemy Entity. Every enemy is an instance of this entity. This entity has a CharacterController component. This component is the one that implements the callback and all the other things you normally use in a character controller. If you follow me, you can see that, for each enemy in the game, I have a callback filter. There are 36 enemies, so 36 callbacks working.   Should I have one static filter and make all enemies use it? Is it a good Idea to have diferent filters?   Thanks
  9. Hi! I have a game where there are enemies. Those enemies ar CharacterControllers, which I move through PxCharacterController.move() function. Thing is that I don't want alive enemies to collide with dead enemies. Dead enemies bodies are keeped on the ground, but I still need those dead bodies to keep their CharacterController because I do some other things with them. To accomplish that I made my EnemiCharacterController class inherit from PxControllerFilterCallback and implement filter() function bool PxControllerFilterCallback::filter(const PxController& a, const PxController& b) = 0; Inside filter() I look for an uint that I previously stored in the UserData of each actor when the enemy dies. If that uint == a value I got to identify dead corpses, I return false (don't calculate collision). Else true. Problem here is that FPS goes down, very deep down (not playable). My question is: is there a better way to filter Character Controller vs Character Controller collisions? Is there a good way to improve performance? That's the code, Just in case you see something wierd bool TCompCharacterController::filter(const physx::PxController& a, const physx::PxController& b) {     uint32_t tagA = (uint32_t)a.getUserData();     uint32_t tagB = (uint32_t)b.getUserData();     if (GCONST_TAGS_ENEMY_DEAD == tagA || GCONST_TAGS_ENEMY_DEAD == tagB)         return false;     return true; } Thanks a lot
  10. Ok, fixed. Funny thing, I 've been working on that for 3h, I just posted here, and bam! found the solution. Apparently I wasn't doing that to the triangleMesh that represents my scene   filterData.word0 = FilterGroup::eSCENARIO_AND_PROPS;     filterData.word1 = FilterGroup::eENEMYALIVE | FilterGroup::eBULLETS | FilterGroup::eENEMYDEAD | FilterGroup::ePLAYER;     triangleMeshSape->setQueryFilterData(filterData);
  11. Hi! I'm Bruno, new here.   I'm having trouble setting up filters for my Character Controller to interact with other elements.        filterData.word0 = FilterGroup::ePLAYER;     filterData.word1 = FilterGroup::eENEMYALIVE | FilterGroup::eBULLETS;     controllerFilters.mFilterCallback = NULL;     controllerFilters.mFilterData = &filterData;     controllerFilters.mFilterFlags = physx::PxQueryFlag::eSTATIC | physx::PxQueryFlag::eDYNAMIC;   Then, in move() function   physx::PxControllerCollisionFlags collisionFlags = capsuleController->move(         Physics.XMVECTORToPxVec3(gravityVector),         0.01f,         physx::PxF32(elapsed),         controllerFilters,         NULL);   As you can see I'm using a capsule controler.   My scene (meaning the wall, ground and ceilling) is a PxRigidStatic which shape is made from a vertex and an index array. So far so good. Problem comes when I run It and character controller wont collide with the scene, so it falls to the infinite.   My question is, should I build some kind of filter on the scene side to controll the collision so It happends?   Any answer will be apreciated Thanks  
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!