Beauty Salon α-BET (alphabet)

space001
Blender3d Collada dae modeling Use Papervision3d on Progression3 and 4 http://a-bet.secret.jp/#/access
more whaison works.
whaison space
space002
http://whaison.jugem.jp/ https://jp.pinterest.com/whaison/ https://www.instagram.com/whaison/ https://whaison.amebaownd.com/
https://suzuri.jp/whaison
http://whaison.blogspot.com/
http://whaison.tumblr.com/ http://qiita.com/users/whaison http://www.behance.net/whaison https://github.com/whaison/ https://bitbucket.org/whaison http://serato.com/user/whaison http://whaison.hatenablog.jp/

typo memo
http://d.hatena.ne.jp/whaison/


dayNote
http://www.myspace.com/whaison http://ameblo.jp/whaison/ http://blog.crooz.jp/whaison/ http://blog.crooz.jp/whaisoncafe/ http://nenpyo.org/whaison

fulldisk
http://full.shin-gen.jp/
http://whaison.client.jp/
http://www.dclog.jp/whaison/
featured forums.
space004
forum.unity3d.com/

forums.unrealengine.com.

Progression Forum.

FlashDevelop Forum.

Papervision3D Forum.

FlexUserGroup Forum.

SparkProjectForum.





Twitter







Mobile
qrcode
Calendar
SunMonTueWedThuFriSat
     12
3456789
10111213141516
17181920212223
24252627282930
<< June 2018 >>
New Entries
Archives
Categories
Recent comment
  • FlashDevelopでフォント埋め込み
    感謝!! (12/24)
  • cocos2d-x-3.0rc0 ,c++ ,cpp でTexturePacker で 吐き出した、plist と png でパラパラアニメーションのコード例
    whaison (04/17)
  • Blender2.67にbvh(web上に2500個以上ころがってる)入れてそのBoneオブジェクトをUnity4.0のmecanimで使う
    whaison (08/19)
  • Apple Dev Center 「Certificates, Identifiers & Profiles」で Adhoc をつくってXCode4.6.1でArchiveしてipaを書き出し
    whaison (04/30)
  • Flash CS6でプロパティーパネルで物理演算のジャンプの高さを設定できるCitrus Engine
    whaison (03/01)
  • 「Flash以外、例えばKinectとか」ON TOKYO (会場:高田馬場4-11-8 Floor 6階 ) 短縮URL http://bit.ly/dI0Bfx
    uka (03/02)
  • App Store Review Guidelines アップル社のアプリ審査基準ガイドライン和訳 Apple が 開発者を悩ませ ユーザーをハッピーにしたいガイドライン。w
    whaison (01/25)
  • Unity3d では ADOBE JAPAN OSAKIで行われたFITC 2010 TOKYOでは、 「iOS用にパブリッシュするためには、フリー版ではなくて、有料版を買ってください。さらに追加のパッケージである、"iOS Package (for Development)"を買ってください」とのことだった。
    whaison (01/25)
  • enjoy Adidas-Futsal-Park
    whaison (01/16)
  • MacBookAir にFlashPlayer入れたらなった。Mac Flash Player 10.1/10.2でUstream などでカメラが認識されないバグそんなときはUstreamProducer!でもなくiPhoneだと直ぐにライブ配信できた
    whaison (01/14)
simple sintax high lighter2.0
space003
SyntaxHighlighter2.0用 の貼り付けコード作成する!
Profile
Links
Recommend
Admin
無料ブログ作成サービス JUGEM
Seach this site
            
2018.04.07 Saturday
AUTODESKMAYABootFromMacBookAir2010LateNvidiaGeforce320(OnBootRealWindowsNotBootCamp)JustSmallWindowOnlyForPythonProgrammer

 

AUTODESKMAYABootFromMacBookAir2010LateNvidiaGeforce320(OnBootRealWindowsNotBootCamp)JustSmallWindowOnlyForPythonC++CppCxxMELPluginProgrammer.

 

MacBookAirisHeatsinkBodyJustNotUseFAN.....Room..Heat warm(Cold Room Try iT iti is Good Hapninng for YourLife) cloudyDayOnly?? Pahaps....

AUTODESKMAYABootFromMacBookAir(OnBootRealWindowsNotBootCamp)JustSmallWindowOnlyForPythonProgrammer

AUTODESKMAYABootFromMacBookAir(OnBootRealWindowsNotBootCamp)JustSmallWindowOnlyForPythonProgrammer

AUTODESKMAYABootFromMacBookAir(OnBootRealWindowsNotBootCamp)JustSmallWindowOnlyForPythonProgrammer

AUTODESKMAYABootFromMacBookAir2010LateNvidiaGeforce320(OnBootRealWindowsNotBootCamp)JustSmallWindowOnlyForPythonC++CppCxxMELPluginProgrammer.

 

JustFullHackableTechnic........JustForNOT!!!!NormalHuman...FOR>>.C++EngineArtistOnly...

JustFullHackableTechnic........JustForNOT!!!!NormalHuman...FOR>>.C++EngineArtistOnly...

JustFullHackableTechnic........JustForNOT!!!!NormalHuman...FOR>>.C++EngineArtistOnly...

 

| whaison | C++ | 05:05 | comments(0) | - | pookmark |
            
2018.03.23 Friday
world.h

 

 

 

 

T1(TYPE) struct ObjMap // Container for Game Objects, this is the same thing as 'Map', except without the control of manual adding new elements, which should be handled by 'WorldManager' (through 'WorldManager.objCreate')
{
   ObjMap& clear(); // remove all objects

   Int elms   ()C; // number of valid objects
   Int elmSize()C; // size   of       object (excluding the UID KEY)

   TYPE& operator[](Int i) ; // get i-th object
 C TYPE& operator[](Int i)C; // get i-th object

   Bool containsId (C UID  &obj_id)C; // if container contains       object with 'obj_id' ID
   Bool containsObj(C TYPE *obj   )C; // if container contains 'obj' object

   TYPE* find(C UID &obj_id); // find object by its ID, null on fail

   ObjMap& remove   (  Int   i     ); // remove i-th object from container
   ObjMap& removeId (C UID  &obj_id); // remove      object from container by its ID
   ObjMap& removeObj(C TYPE *data  ); // remove      object from container by its memory address

   // misc
   T1(BASE) operator   ObjMap&() ; // casting to container of 'BASE' objects, 'TYPE' must be extended from BASE
   T1(BASE) operator C ObjMap&()C; // casting to container of 'BASE' objects, 'TYPE' must be extended from BASE

   explicit ObjMap(Int block_elms=32);

private:
   Map _map;
};
/******************************************************************************/
enum WORLD_MODE // World Mode
{
   WORLD_STREAM, // streamed world (areas are loaded and unloaded depending on their distance to center of action inside 'WorldManager.update' method, those close to center of action are automatically loaded, those far away are unloaded, recommended for most games)
   WORLD_FULL  , // full     world (at start full world is loaded with all areas, may consume lots of memory, recommended for race games with fast travelling objects, where any loading pauses are unacceptable)
   WORLD_MANUAL, // manual   world (areas are not managed automatically, they can be loaded and unloaded only by manual use of 'WorldManager.areaSetState' method)
};
/******************************************************************************/
struct WorldSettings // World Settings
{
   EnvironmentPtr environment; // default environment settings for this world, defualt=null

   Flt   areaSize()C {return _area_size ;}   WorldSettings&   areaSize(Flt size); // get/set area size           , 0..Inf, default=32
   Int     hmRes ()C {return _hm_res    ;}   WorldSettings&     hmRes (Int res ); // get/set heightmap resolution, 2..129, default=65, setting resolution will automatically align the value to the "(nearest power of 2)+1"
   Int path2DRes ()C {return _path2d_res;}   WorldSettings& path2DRes (Int res ); // get/set 2d paths  resolution, 1..64 , default=32

   // operations
   WorldSettings& reset(); // reset to default values

   // io
   Bool save(File &f, CChar *path=null)C; // save to   file, 'path'=path at which resource is located (this is needed so that the sub-resources can be accessed with relative path), false on fail
   Bool load(File &f, CChar *path=null) ; // load from file, 'path'=path at which resource is located (this is needed so that the sub-resources can be accessed with relative path), false on fail

   Bool save(C Str &name)C; // save to   file, false on fail
   Bool load(C Str &name) ; // load from file, false on fail

   WorldSettings() {reset();}

private:
   Flt _area_size;
   Int _hm_res, _path2d_res;
};
/******************************************************************************/
struct WorldManager // World Manager
{
   static Bool update_objects_after_physics, // this specifies which should be updated first - objects or the physics, default=true (setting it to false may occur in lack of synchronization between the character mesh and its controller when using Physics.draw, false is required for synchronization of character physical clothing)
               use_background_loading      , // if enabled then nearby areas will be loaded to memory on a secondary thread, which will allow smooth travelling across big worlds without pauses for loading data, default=true (for Mobile platforms the default value is set to "Cpu.threads()>=2")
               use_early_z_for_terrain     , // if enable early-z rendering technique when drawing terrain, enabling early-z causes the terrain to be rendered additional time (to the depth buffer only), this has the cost of rendering the terrain additional time, however it can be beneficial if rendering will occlude other parts of the screen preventing from performing some pixel shader operations at later stage, whether this option should be enabled or disabled that depends on your world, and should be tested manually
               low_memory_usage            ; // if release resources every time they're not needed, enabling this may decrease memory usage however it will decrease loading times when loading areas/changing worlds, default=false

   MiniMap mini_map; // this is automatically managed by the World Manager, use it to access the maps for certain areas, however do not store references to returned images, because they may get deleted in 'WorldManager.update'

   Cipher *area_cipher; // pointer to custom Cipher object (default=null) used for encrypting area files in case they are stored as stdio files (if they are stored in paks, then this cipher is ignored)

   void (*link_references)(); // pointer to custom function (may be null) called when new objects have been loaded, and there is possibility that they should be linked with custom global 'Reference's, you can set this to a custom function and inside it manually call 'Reference.link' for all global 'Reference's (do not use this for 'Reference's stored inside 'Game.Obj' classes, as they should be linked inside 'Game.Obj.linkReferences' method)
   void (*physics_update )(); // pointer to custom function (may be null) called when frame physics simulation has ended. 'WorldManager.update' method automatically handles physics simulation updates. If 'physics_update' is not null then it will be called after 'Physics.stopSimulation' and before 'Physics.startSimulation'. This function can be useful when physics is being processed in a background thread, and you need to precisely access/modify actor parameters when the simulation is not being processed. For example, if physics simulation is processed in background thread (that processing could occur during entire frame) and on the main thread you wish to adjust actor velocities, then the simulation may not behave the same every time and may not be precise, due to the fact of adjusting actor parameters when the simulation is already running at unknown stage in background thread. To overcome this issue and gain ability of precise adjusting of actor values you can set this callback, which will be called when the simulation is at the moment not running in the background thread.

   // init
   T1(TYPE) WorldManager& setAreaClass(                                   ) { _grid.replaceClass(                                ); return T;} // set class responsible for areas    , TYPE must be extended from 'Game.Area'
   T1(TYPE) WorldManager& setAreaData (                                   ) {return _setAreaData(                                );          } // set class responsible for area data, TYPE must be extended from 'Game.Area.Data'
   T1(TYPE) WorldManager& setObjType  (ObjMap &obj_map, Int obj_type) {return _setObjType       (obj_map, obj_type, CType());          } // set memory container responsible for selected OBJ_TYPE

   // manage
   WorldManager& del   (                                                                  ); // manually delete current world
   Bool          NewTry(C Str  &world_name                                                ); // initialize new world from 'world_name' name   , false on fail
   Bool          NewTry(C UID  &world_id                                                  ); // initialize new world from 'world_id'   name id, false on fail
   WorldManager& New   (C Str  &world_name                                                ); // initialize new world from 'world_name' name   , Exit  on fail
   WorldManager& New   (C UID  &world_id                                                  ); // initialize new world from 'world_id'   name id, Exit  on fail
   Bool          load  (  File &f                                                         ); // load previously saved world state from 'f'         file, false on fail
   Bool          save  (  File &f                                                         ); // save active           world state to   'f'         file, false on fail
   Bool          load  (C Str  &save_name, Bool (*load)(File &f)=null, Cipher *cipher=null); // load previously saved world state from 'save_name' file, 'load'=pointer to fuction loading custom save data (it must return false on fail), false on fail
   Bool          save  (C Str  &save_name, Bool (*save)(File &f)=null, Cipher *cipher=null); // save active           world state to   'save_name' file, 'save'=pointer to fuction  saving custom save data (it must return false on fail), false on fail

   static void Create(C Str &world_name, C WorldSettings &settings); // create folders for empty game world so it can be loaded using 'New' method, and save its settings

   // get / set
   Bool           is           (               )C {return _name.is()          ;} // if  there is any world specified
 C UID&           id           (               )C {return _id                 ;} // get name id               of current world
 C Str&           name         (               )C {return _name               ;} // get name                  of current world
 C Str&           dataPath     (               )C {return _data_path          ;} // get data path             of current world
 C WorldSettings& settings     (               )C {return _settings           ;} // get settings              of current world
   Flt            areaSize     (               )C {return _settings.areaSize();} // get size of a single Area of current world
 C PathWorld&     path         (               )C {return _path               ;} // get path finder           of current world
   WORLD_MODE     mode         (               )C {return _mode               ;} // get manager mode, default=WORLD_STREAM
   WorldManager&  mode         (WORLD_MODE mode);                                // set manager mode, changing mode requires current world to be deleted first
   Flt            activeRange  (               )C {return _range              ;} // get World Active Range, default=100
   WorldManager&  activeRange  (Flt       range);                                // set World Active Range
   Flt            objUpdateTime(               )C {return _time_obj_update    ;} // get amount of CPU time which was needed to update all objects during last world update

   Vec2  areaToWorld(C VecI2 &xz  )C {return                                      xz*areaSize() ;} // convert Area  Coordinates to World Position in meters
   VecI2 worldToArea(C Vec2  &xz  )C {return                                Floor(xz/areaSize());} // convert World Position    to Area  Coordinates
   VecI2 worldToArea(C VecD2 &xz  )C {return                                Floor(xz/areaSize());} // convert World Position    to Area  Coordinates
   VecI2 worldToArea(C Vec   &pos )C {return                              worldToArea(pos .xz());} // convert World Position    to Area  Coordinates
   VecI2 worldToArea(C VecD  &pos )C {return                              worldToArea(pos .xz());} // convert World Position    to Area  Coordinates
   RectI worldToArea(C Rect  &rect)C {return RectI(worldToArea(rect.min), worldToArea(rect.max));} // convert World Position    to Area  Coordinates
   RectI worldToArea(C Box   &box )C {return RectI(worldToArea(box .min), worldToArea(box .max));} // convert World Position    to Area  Coordinates

   void setShader();

   // area
   struct AreaState
   {
      VecI2      xz   ; // xz coordinates of Area
      AREA_STATE state; // desired state  of Area

      void set(C VecI2 &xz, AREA_STATE state) {T.xz=xz; T.state=state;}

      AreaState(C VecI2 &xz=VecI2(0, 0), AREA_STATE state=AREA_UNLOADED) {set(xz, state);}
   };
   void  areaSetState (C MemPtr &area_states, Bool unload_remaining=false); // manually set the state of areas, this method can be used for WORLD_MANUAL (for other modes it is ignored), 'area_states'=list of area coordinates and their desired states, 'unload_remaining'=if automatically unload all areas that aren't included in the 'area_states' list
   Int   areaActiveNum(           )C; // get number of active areas
   Area* areaActive   (  Int    i )C; // get i-th      active area                         , if the index is out of range                                  then null is returned
   Area* areaActive   (C VecI2 &xz)C; // get           active area at 'xz' area coordinates, if the area doesn't exist or isn't active at that coordinates then null is returned (which means that only area with                          AREA_ACTIVE state can be returned)
   Area* areaLoaded   (C VecI2 &xz)C; // get           loaded area at 'xz' area coordinates, if the area doesn't exist or isn't loaded at that coordinates then null is returned (which means that only area with AREA_CACHE AREA_INACTIVE AREA_ACTIVE state can be returned)

   // heightmap
   Flt          hmHeight  (C Vec2 &xz, Bool smooth=true); // get world heightmap height   at 'xz' world 2D position,    0 on fail, this method is fast because it uses lookup table (Game.Area.Data.height      Image), see also 'Game.Area.hmHeight', 'smooth'=if calculate smooth value using linear interpolation
 C MaterialPtr& hmMaterial(C Vec2 &xz                  ); // get world heightmap material at 'xz' world 2D position, null on fail, this method is fast because it uses lookup table (Game.Area.Data.materialMap Image), see also 'Game.Area.hmMaterial'

   // water
 C WaterMtrlPtr& waterUnder(C Vec &pos, Flt *depth=null); // test if 'pos' world position is under water, 'depth'=optional parameter which can receive point under water depth if it is under water, if 'pos' is underwater then the method will return water material in which the position is located, if not underwater then null is returned

   Waypoint* findWaypoint(C Str &name) {return name.is   () ? Waypoints.get(dataPath()+"Waypoint/"+name              ) : null;} // find waypoint in this world, null on fail
   Waypoint* findWaypoint(C UID &id  ) {return id  .valid() ? Waypoints.get(dataPath()+"Waypoint/"+EncodeFileName(id)) : null;} // find waypoint in this world, null on fail
   Waypoint*  getWaypoint(C Str &name) {return name.is   () ? Waypoints    (dataPath()+"Waypoint/"+name              ) : null;} // get  waypoint in this world, Exit on fail
   Waypoint*  getWaypoint(C UID &id  ) {return id  .valid() ? Waypoints    (dataPath()+"Waypoint/"+EncodeFileName(id)) : null;} // get  waypoint in this world, Exit on fail

   // objects
   Obj* objCreateNear(              Object &object       , C Matrix &matrix, C UID *obj_id=null); // dynamically create object into world from 'object' object and desired matrix, 'matrix' scale will be used as objects scale, method fails    if 'matrix' is out of active range                                     , 'obj_id'=optional parameter specifying forcing custom object id for the object (the parameter can be useful if you've created an object on the server, and need to create it on client using the same id from the server, if the parameter is not specified then object id will be randomized), null  on fail
   Bool objCreate    (              Object &object       , C Matrix &matrix, C UID *obj_id=null); // dynamically create object into world from 'object' object and desired matrix, 'matrix' scale will be used as objects scale, method succeeds if 'matrix' is out of active range but pointer to object isn't returned, 'obj_id'=optional parameter specifying forcing custom object id for the object (the parameter can be useful if you've created an object on the server, and need to create it on client using the same id from the server, if the parameter is not specified then object id will be randomized), false on fail
   Bool objInject    (Int obj_type, File   &obj_save_data, C Vec    *pos                       ); // dynamically inject object into world from previously saved object data (using 'Game.Obj.save'), 'obj_type'=OBJ_TYPE, 'pos'=optional parameter to specify new position after loading the object (if null is passed then position will not be modified), false on fail

          Obj* moveWorldObjToStorage  (Obj &  world_obj, Memx &    storage                            ); // move   'world_obj' world   object into a custom 'storage' object container, this function will be performed only if   'world_obj' belongs to this world    and 'storage' is a container                   storing exactly the same type as the   'world_obj', if those conditions are met then the object will have its 'willBeMovedFromWorldToStorage' method called, then it will be removed from        world  and placed in the storage   , then it will have its 'memoryAddressChanged' method called followed by 'wasMovedFromWorldToStorage' and address of the object (now inside the     storage container) will be returned, if this method fails then null  is returned and no operation is performed
         Bool  moveStorageObjToWorld  (Obj &storage_obj, Memx &    storage, C Matrix  *obj_matrix=null); // move 'storage_obj' storage object into world                              , this function will be performed only if 'storage_obj' belongs to     'storage' and  world    is capable (see 'setObjType') of storing exactly the same type as the 'storage_obj', if those conditions are met then the object will have its 'willBeMovedFromStorageToWorld' method called, then it will be removed from      storage  and placed in the world     , then it will have its 'memoryAddressChanged' method called followed by 'wasMovedFromStorageToWorld' and true                                                         will be returned, if this method fails then false is returned and no operation is performed, 'obj_matrix'=optional parameter specifying new object matrix applied to the object when being moved to world (it's not applied if it's null or this method returned false)
   static Obj* MoveStorageObjToStorage(Obj &storage_obj, Memx &src_storage, Memx &dest_storage   ); // move 'storage_obj' storage object from 'src_storage' into 'dest_storage'  , this function will be performed only if 'storage_obj' belongs to 'src_storage' and 'storage' is a container                   storing exactly the same type as the 'storage_obj', if those conditions are met then the object                                                                      will be removed from 'src_storage' and placed in 'dest_storage', then it will have its 'memoryAddressChanged' method called                                          and address of the object (now inside the new storage container) will be returned, if this method fails then null  is returned and no operation is performed

   WorldManager& objGetAdd(MemPtr objects, C Ball    &ball   , Int obj_type=-1);                                                                 // get pointers to objects which position (Game.Obj.pos) is inside 'ball'   , process only objects with 'obj_type' OBJ_TYPE (-1=process all types), this function does not clear 'objects' container at start which means that objects are added to the container
   WorldManager& objGetAdd(MemPtr objects, C Capsule &capsule, Int obj_type=-1);                                                                 // get pointers to objects which position (Game.Obj.pos) is inside 'capsule', process only objects with 'obj_type' OBJ_TYPE (-1=process all types), this function does not clear 'objects' container at start which means that objects are added to the container
   WorldManager& objGetAdd(MemPtr objects, C Box     &box    , Int obj_type=-1);                                                                 // get pointers to objects which position (Game.Obj.pos) is inside 'box'    , process only objects with 'obj_type' OBJ_TYPE (-1=process all types), this function does not clear 'objects' container at start which means that objects are added to the container
   WorldManager& objGetAdd(MemPtr objects, C OBox    &obox   , Int obj_type=-1);                                                                 // get pointers to objects which position (Game.Obj.pos) is inside 'obox'   , process only objects with 'obj_type' OBJ_TYPE (-1=process all types), this function does not clear 'objects' container at start which means that objects are added to the container
   WorldManager& objGet   (MemPtr objects, C Ball    &ball   , Int obj_type=-1) {objects.clear(); return objGetAdd(objects, ball   , obj_type);} // get pointers to objects which position (Game.Obj.pos) is inside 'ball'   , process only objects with 'obj_type' OBJ_TYPE (-1=process all types)
   WorldManager& objGet   (MemPtr objects, C Capsule &capsule, Int obj_type=-1) {objects.clear(); return objGetAdd(objects, capsule, obj_type);} // get pointers to objects which position (Game.Obj.pos) is inside 'capsule', process only objects with 'obj_type' OBJ_TYPE (-1=process all types)
   WorldManager& objGet   (MemPtr objects, C Box     &box    , Int obj_type=-1) {objects.clear(); return objGetAdd(objects, box    , obj_type);} // get pointers to objects which position (Game.Obj.pos) is inside 'box'    , process only objects with 'obj_type' OBJ_TYPE (-1=process all types)
   WorldManager& objGet   (MemPtr objects, C OBox    &obox   , Int obj_type=-1) {objects.clear(); return objGetAdd(objects, obox   , obj_type);} // get pointers to objects which position (Game.Obj.pos) is inside 'obox'   , process only objects with 'obj_type' OBJ_TYPE (-1=process all types)

   Obj* findObjById(C UID &obj_id, Int obj_type=-1); // find world object by its Unique ID (this is the ID of the world object itself, and not its base object or class), 'obj_type'=OBJ_TYPE of the object (or if you don't know it, then use -1), null on fail (if not found)

   // terrain
   WorldManager& terrainAddDecal  (C Color &color, C MaterialPtr &material, C Matrix &  decal_matrix, Flt time_to_fade_out=10); // add a Decal       to current World's terrain
   WorldManager& terrainAddOverlay(                C MaterialPtr &material, C Matrix &overlay_matrix, Flt time_to_fade_out=10); // add a MeshOverlay to current World's terrain

   // path
   AreaPath2D* path2DGet     (C VecI2 &xz ); // get pointer to Area paths at given Area coordinates, returns null when path's don't exist at specified coordinates
   Bool        path2DWalkable(C Vec   &pos); // check if path is walkable at specified world position
   void        path2DBuild   (            ); // call this once after making changes to AreaPath2D's to rebuild the path database

   // update
   Bool updated       (           ) {return _updated        ;} // if current world has been updated at least once since it was loaded, you can use this method to startup loading screen
   Flt  updateProgress(           ) {return _update_progress;} // get update progress (0..1), this can be called in a secondary thread to access the progress of updating the world using 'update' method
   void updateBreak   (           );                           // break updating, this can be called from a secondary thread to break any current world updating, for example if during loading a world the user requests quitting the game, you can break the loading and exit immediately
   void update        (C Vec2 &xz );                           // update, 'xz' =x and z coordinates of center of action (in meters), the parameter is used only for WORLD_STREAM mode (for other modes it is ignored)
   void update        (C Vec  &pos) {update(pos.xz());}        // update, 'pos'=                       center of action (in meters), the parameter is used only for WORLD_STREAM mode (for other modes it is ignored)
   // World update automatically loads all needed areas located nearby the center of action (and unloads those which are too far away).
   // Additionally it calls the following methods:
   //    D.grassUpdate()
   //    Physics.startSimulation().stopSimulation()
   //    Game.Obj.update() on all active game objects (which are located in AREA_ACTIVE areas)

   // draw
   void draw(); // call this inside Render function for every RENDER_MODE

  ~WorldManager();
   WorldManager();

private:
   struct ObjContainer
   {
      CPtr         type;
      ObjMap *map ;
   };

   UID        _id;
   Str        _name,
              _data_path;
   WORLD_MODE _mode;

   Bool _updated, _update_break;
   Byte _update_count;
   Flt  _update_progress;
   Int  _areas_to_load;

   Int                _rangei, _rangei2, _rangei2_inactive, _rangei2_cache;
   Flt                _range;
   Vec2               _xz;
   VecI2              _xzi;
   Memc _obj_container;
   Memc _obj_newly_added;
   RectI              _area_active_rect, _area_loaded_rect;
   Memc _area_active    , _area_draw, _area_draw_shadow, _area_draw_secondary,
                      _area_inactive  ,
                      _area_cache     ,
                      _area_background;
   Area::Data&      (*_area_data)(Area::Data* &data, Area &area);
   Grid         _grid;
   PathWorld          _path;
   WorldSettings      _settings;

   UInt     _path_iteration;
   PathFind _path_find;
  _Memc     _path_node, _path_neighbor;

   SyncLock  _lock;
   Thread    _thread;
   SyncEvent _thread_event;

   struct Decal2       : Decal       {Flt time;};   Memc _decals       ;
   struct MeshOverlay2 : MeshOverlay {Flt time;};   Memc _mesh_overlays;

   Flt _time_area_update_state,

       _time_area_update_state_now ,
       _time_area_update_state_back,
       _time_area_update_state_path,
       
       _time_area_update_state_unload_cache,
       _time_area_update_state_unload,
       _time_area_update_state_load,
       _time_area_update_state_load_data,
       _time_area_update_state_activate,
       _time_area_update_state_deactivate,

       _time_obj_update;

   T1(TYPE) static Area::Data& NewAreaData(Area::Data* &data, Area &area) {data=new TYPE(area); return *data;}
   T1(TYPE) WorldManager& _setAreaData() {ASSERT_BASE_EXTENDED(); _area_data=NewAreaData; return T;}
            WorldManager& _setObjType (ObjMap &obj_map, Int obj_type, CPtr c_type);
   T1(TYPE) friend struct EE::Reference;
   NO_COPY_CONSTRUCTOR(WorldManager);
}extern
   World; // Main World

 

 

 

 

 

 

 

 

 

 

 

 

 

 

| whaison | C++ | 06:31 | comments(0) | - | pookmark |
            
2018.03.23 Friday
Foo Engine HeaderFile .h
 
/******************************************************************************/
#pragma once // include the header only once
/******************************************************************************/
#define ENGINE_BUILD 52 // this is an integer value specifying the build iteration of Esenthel Engine, this gets incremented with each new release
/******************************************************************************

   Following defines are available, they are always set to 0 (disabled) or 1 (enabled)
      WINDOWS         - Windows                       platform
      WINDOWS_DESKTOP - Windows Desktop               platform
      WINDOWS_PHONE   - Windows Phone                 platform
      MAC             - Mac OS X                      platform
      IOS             - iOS                           platform
      LINUX           - Linux                         platform
      ANDROID         - Android                       platform
      WEB             - Web                           platform
      DESKTOP         - Windows Desktop, Mac, Linux   platform
      MOBILE          - Windows Phone  , iOS, Android platform
      APPLE           - Mac, iOS                      platform
      X64             - 64-bit                        platform
      DEBUG           - Debug mode

   Sample Usage:

      #if WINDOWS
         This line will compile only on Windows platform!
      #endif

/******************************************************************************/
// DETECT PLATFORM
/******************************************************************************/
// 32/64-bit
#if defined _WIN64 || defined __LP64__
   #define X64 1 // 64-bit
#else
   #define X64 0 // 32-bit
#endif

// ARM
#if (defined _M_ARM || defined __arm__) || (defined _M_ARM64 || defined __aarch64__)
   #define ARM 1
#else
   #define ARM 0
#endif

// Windows
#ifdef _WIN32
   #ifdef WINAPI_FAMILY
      #include 
      #define WINDOWS_OLD (WINAPI_FAMILY==WINAPI_FAMILY_DESKTOP_APP)
   #else
      #define WINDOWS_OLD 1
   #endif
   #define WINDOWS_NEW (!WINDOWS_OLD)
   #define PLATFORM(windows, unix) windows
#else
   #define WINDOWS_OLD 0
   #define WINDOWS_NEW 0
   #define PLATFORM(windows, unix) unix
#endif

// Apple - Mac or iOS
#ifdef __APPLE__
   #include 
   #if TARGET_OS_IPHONE // iOS
      #define MAC 0
      #define IOS 1
   #else // Mac
      #define MAC 1
      #define IOS 0
   #endif
   #if TARGET_IPHONE_SIMULATOR // iOS Simulator
      #define IOS_SIMULATOR 1
   #endif
#else
   #define MAC 0
   #define IOS 0
#endif

// Android
#ifdef ANDROID
   #undef  ANDROID
   #define ANDROID 1
#else
   #define ANDROID 0
#endif

// Linux
#if defined __linux__ && !ANDROID // Android also has '__linux__' defined
   #define LINUX 1
#else
   #define LINUX 0
#endif

// Web
#ifdef EMSCRIPTEN
   #define WEB 1
#else
   #define WEB 0
#endif

// Other
#define WINDOWS         (WINDOWS_OLD || WINDOWS_NEW)
#define WINDOWS_PHONE   (WINDOWS     &&  ARM       ) // can't use WINAPI_FAMILY_PHONE_APP because that's only for Win8
#define WINDOWS_DESKTOP (WINDOWS     && !ARM       )

#define APPLE (MAC || IOS)

#define DESKTOP (WINDOWS_DESKTOP || MAC || LINUX  )
#define MOBILE  (WINDOWS_PHONE   || IOS || ANDROID)

#if (WINDOWS+MAC+IOS+LINUX+ANDROID+WEB)!=1
   #error Unsupported platform detected
#endif
/******************************************************************************/
#include "_/headers.h"
#include "_/types.h"
/******************************************************************************/
namespace EE // Esenthel Engine namespace
{
   /******************************************************************************/
   #pragma pack(push, 4)
   #include "_/defines.h"
   #include "_/structs.h"
   /******************************************************************************/
   // MISC
   /******************************************************************************/
   #include "Misc/Character.h"
   #include "Memory/Mem Simple.h"
   #include "Misc/String8.h"
   #include "Misc/String.h"
   #include "Misc/String Functions.h"
   #include "Misc/Cpu.h"
   #include "Misc/Misc.h"
   #include "Memory/_Memc.h"
   #include "Memory/Mem Continuous.h"
   #include "Misc/UID.h"
   #include "Memory/Memory.h"
   #include "Memory/Cipher.h"
   #include "Memory/Hash.h"
   #include "Memory/Mem Temporary.h"
   #include "Memory/Fixed Array.h"
   #include "Memory/_Memb.h"
   #include "Memory/Mem Block.h"
   #include "Memory/_Memx.h"
   #include "Memory/Mem Extended.h"
   #include "Memory/_Meml.h"
   #include "Memory/Mem List.h"
   #include "Memory/Mem Pointer.h"
   #include "Misc/String Borrowed.h"
   #include "Memory/Node.h"
   #include "Misc/Date Time.h"
   #include "Memory/Index.h"
   //
   #include "Math/Vector.h"
   #include "Graphics/Color.h"
   #include "Misc/Timer.h"
   #include "Math/Matrix.h"
   #include "Math/Math.h"
   #include "Math/Orientation.h"
   #include "Math/Shapes/Rectangle.h"
   //
   #include "Misc/Sort.h"
   #include "Misc/Thread.h"
   #include "Misc/Reference.h"
   #include "Memory/_Memc Thread Safe.h"
   #include "Memory/Mem Continuous Thread Safe.h"
   #include "Memory/_Cache.h"
   #include "Memory/Cache.h"
   #include "Memory/_Map.h"
   #include "Memory/Map.h"
   #include "Misc/States.h"
   #include "File/File.h"
   #include "File/File Text.h"
   #include "File/IO.h"
   #include "File/Chunk.h"
   #include "Misc/Compress.h"
   #include "File/Pak.h"
   #include "Misc/Enum.h"
   #include "Misc/Param.h"
   #include "File/Xml.h"
   #include "Platforms/Android.h"
   #include "Misc/Callback.h"
   #include "Misc/DLL.h"
   /******************************************************************************/
   // MATH
   /******************************************************************************/
   #include "Math/Shapes/Plane.h"
   #include "Math/Shapes/Edge.h"
   #include "Math/Shapes/Triangle.h"
   #include "Math/Shapes/Quad.h"
   #include "Math/Shapes/Box.h"
   #include "Math/Shapes/Circle.h"
   #include "Math/Shapes/Ball.h"
   #include "Math/Shapes/Capsule.h"
   #include "Math/Shapes/Tube.h"
   #include "Math/Shapes/Cone.h"
   #include "Math/Shapes/Pyramid.h"
   #include "Math/Shapes/Torus.h"
   #include "Math/Shapes/Polygon.h"
   #include "Math/Shape.h"
   #include "Math/Number.h"
   #include "Math/Quaternion.h"
   #include "Math/Camera.h"
   #include "Math/Calculate.h"
   #include "Math/Random.h"
   #include "Math/Frustum.h"
   /******************************************************************************/
   // ANIMATION
   /******************************************************************************/
   #include "Animation/Skeleton.h"
   #include "Animation/Animation Keys.h"
   #include "Animation/Animation.h"
   #include "Animation/Motion.h"
   /******************************************************************************/
   // GRAPHICS
   /******************************************************************************/
   #include "Graphics/Display State.h"
   #include "Graphics/Image.h"
   #include "Graphics/Image Atlas.h"
   #include "Graphics/Image RT.h"
   #include "Gui/Font.h"
   #include "Gui/Text Style.h"
   #include "Graphics/Material.h"
   #include "Graphics/Display Draw.h"
   #include "Graphics/Renderer.h"
   #include "Graphics/Display.h"
   #include "Graphics/Light.h"
   #include "Graphics/Shader.h"
   #include "Graphics/Shader Main.h"
   #include "Graphics/Vertex Index Buffer Ex.h"
   #include "Graphics/Vertex Index Buffer.h"
   #include "Graphics/Sun.h"
   #include "Graphics/Fur.h"
   #include "Graphics/Effects 2D.h"
   #include "Graphics/Environment.h"
   /******************************************************************************/
   // SOUND
   /******************************************************************************/
   #include "Sound/Sound Extra.h"
   #include "Sound/Sound Stream.h"
   #include "Sound/Sound Buffer.h"
   #include "Sound/Sound.h"
   #include "Sound/Music.h"
   /******************************************************************************/
   // MESH
   /******************************************************************************/
   #include "Mesh/Mesh Csg.h"
   #include "Mesh/Mesh Render.h"
   #include "Mesh/Mesh Base.h"
   #include "Mesh/Mesh Part.h"
   #include "Mesh/Mesh Lod.h"
   #include "Mesh/Mesh Mesh.h"
   #include "Mesh/Mesh Group.h"
   #include "Mesh/Mesh Cuts.h"
   #include "Mesh/Mesh Import.h"
   #include "Mesh/Mesh Overlay.h"
   #include "Mesh/Material Palette.h"
   /******************************************************************************/
   // PHYSICS
   /******************************************************************************/
   #include "Physics/Phys Material.h"
   #include "Physics/Phys Body.h"
   #include "Physics/Joint.h"
   #include "Physics/Actor.h"
   #include "Physics/Vehicle.h"
   #include "Physics/Physics.h"
   #include "Physics/Aggregate.h"
   #include "Physics/Controller.h"
   #include "Physics/Ragdoll.h"
   #include "Physics/Grab.h"
   #include "Physics/Cloth.h"
   #include "Physics/Destruct Mesh.h"
   /******************************************************************************/
   //
   /******************************************************************************/
   #include "Misc/Application.h"
   #include "Misc/Windows.h"
   #include "Input/Input Buttons.h"
   #include "Input/Input.h"
   #include "Input/Keyboard.h"
   #include "Input/Mouse.h"
   #include "Input/Joypad.h"
   #include "Memory/_Grid.h"
   #include "Memory/Grid.h"
   #include "Misc/Pathfind 2D.h"
   #include "Misc/Pathfind.h"
   #include "Misc/Video.h"
   #include "Misc/Member.h"
   #include "Graphics/Water.h"
   #include "Graphics/Sky.h"
   #include "Graphics/Fog.h"
   #include "Graphics/Clouds.h"
   #include "Graphics/Particle.h"
   #include "Graphics/Effects 3D.h"
   #include "Misc/Object.h"
   #include "Mesh/Heightmap.h"
   #include "Mesh/Blocks.h"
   /******************************************************************************/
   // GUI
   /******************************************************************************/
   #include "Gui/Panel Image.h"
   #include "Gui/Panel.h"
   #include "Gui/Gui Skin.h"
   #include "Gui/Gui Object.h"
   #include "Gui/Gui Objects.h"
   #include "Gui/Gui.h"
   #include "Gui/Objects/Text.h"
   #include "Gui/Objects/Gui Image.h"
   #include "Gui/Objects/Button.h"
   #include "Gui/Objects/Tabs.h"
   #include "Gui/Objects/CheckBox.h"
   #include "Gui/Objects/Progress.h"
   #include "Gui/Objects/Slider.h"
   #include "Gui/Objects/SlideBar.h"
   #include "Gui/Objects/TextLine.h"
   #include "Gui/Objects/TextBox.h"
   #include "Gui/Objects/Region.h"
   #include "Gui/Objects/Viewport.h"
   #include "Gui/Objects/Gui Custom.h"
   #include "Gui/Objects/List.h"
   #include "Gui/Objects/Menu.h"
   #include "Gui/Objects/MenuBar.h"
   #include "Gui/Objects/ComboBox.h"
   #include "Gui/Objects/Window.h"
   #include "Gui/Objects/Window IO.h"
   #include "Gui/Objects/Desktop.h"
   #include "Gui/Objects/Property.h"
   #include "Gui/Objects/Color Picker.h"
   /******************************************************************************/
   // GAME
   /******************************************************************************/
   #include "Game/Obj.h"
   #include "Game/Objects/Static.h"
   #include "Game/Objects/Kinematic.h"
   #include "Game/Objects/Animatable.h"
   #include "Game/Objects/Destructible.h"
   #include "Game/Objects/Door.h"
   #include "Game/Objects/Item.h"
   #include "Game/Objects/Character.h"
   #include "Game/Objects/Obj Light Point.h"
   #include "Game/Objects/Obj Light Cone.h"
   #include "Game/Objects/Obj Particles.h"
   #include "Game/Objects/Obj Decal.h"
   #include "Game/Waypoint.h"
   #include "Game/Area.h"
   #include "Game/Mini Map.h"
   #include "Game/World.h"
   /******************************************************************************/
   // NET
   /******************************************************************************/
   #include "Net/Interpolator.h"
   #include "Net/Socket.h"
   #include "Net/Download.h"
   #include "Net/Patcher.h"
   #include "Net/Ftp.h"
   #include "Net/Connection.h"
   #include "Net/Net Object.h"
   #include "Net/Net World.h"
   #include "Net/Sql.h"
   #include "Net/Esenthel Store.h"
   #include "Net/Advertisement.h"
   #include "Net/Facebook.h"
   #include "Net/Store.h"
   #include "Net/Steam.h"
   #include "Net/Internet Cache.h"
   /******************************************************************************/
   // EDIT
   /******************************************************************************/
   #include "Edit/Save Changes.h"
   #include "Edit/Viewport4.h"
   #include "Edit/Version.h"
   #include "Edit/Undo.h"
   /******************************************************************************/
   // CODE
   /******************************************************************************/
   #include "Code/CE Shared.h"
   #include "Code/CE Symbol.h"
   #include "Code/CE Token.h"
   #include "Code/CE Macro.h"
   #include "Code/CE Parser.h"
   #include "Code/CE Code Col Line.h"
   #include "Code/CE Source.h"
   #include "Code/CE Environment.h"
   #include "Code/CE Expression.h"
   #include "Code/CE Compiler.h"
   #include "Code/CE Item.h"
   #include "Code/CE Find.h"
   #include "Code/CE.h"
   /******************************************************************************/
   #include "Edit/Editor Interface.h"
   #include "Graphics/Renderer Instancing.h"
   #include "Input/Touch.h"
   #include "_/inline.h"
   /******************************************************************************/
   #pragma pack(pop)
   /******************************************************************************/
} // namespace
/******************************************************************************/
using namespace EE;
/******************************************************************************/
// DECLARATIONS FOR USER PROVIDED MAIN FUNCTIONS
/******************************************************************************/
Bool Preload(); // this method is called only on Web platform, it is called before InitPre, it will be called continuously as long as you're returning 'true' inside it. You should use this method to optionally download necessary files, like "Engine.pak". Once you've finished downloading files, return 'false' so that the application can continue, and proceed to 'InitPre'. After that, 'Preload' will never be called again.
void InitPre(); // init before engine, in this function you can modify things like: applications settings (App), Display options (D), Renderer options (Renderer), camera parameters (Cam), file path settings (DataPath), loading data paks (Paks.add), etc. In this stage the engine is not yet fully initialized, so creating GPU (Images, Meshes, ..) and Sound data will fail, this data should be processed later, for example in Init().
Bool Init   (); // init after  engine
void Shut   (); // shut at exit
Bool Update (); // update
void Draw   (); // draw
/******************************************************************************/

| whaison | C++ | 06:13 | comments(0) | - | pookmark |
            
2017.01.26 Thursday
FbxCriteria sample

FbxCriteria sample

FBXクラテリア 基準の意味で

CriteriaClassIdとついになってる。

FbxLightのClassId =08090280

FbxLightのCriteria=08090280

 

オブジェクトのカウントするのに使う

GetSrcObjectCount(FbxCriteria)の引数は

Criteriaのほう

コード

FbxCriteria sample

FbxObject* lObject = FbxObject::Create(lManager, "Object");

FbxCriteria FbxCriteriaFbxLightClassId= FbxCriteria::ObjectType(FbxLight::ClassId);

int lSrcLightCount = lObject-> RootProperty.GetSrcObjectCount( FbxCriteriaFbxLightClassId );

FbxCriteria FbxCriteriaFbxDeformerClassId= FbxCriteria::ObjectTypeStrict(FbxDeformer::ClassId);

int lSrcDeformerCount = lObject-> RootProperty.GetSrcObjectCount(FbxCriteriaFbxDeformerClassId);

 

//int lSrcPropertyCount = lObject->RootProperty.GetSrcCount(FbxCriteria::IsProperty());

 

関連リンク

http://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_class_fbx_criteria_html

https://ja.m.wikipedia.org/wiki/コモンクライテリア

| whaison | C++ | 19:04 | comments(0) | - | pookmark |
            
2016.12.27 Tuesday
FBX SDK 2017.1 VisualStudio2015 2017.1を試しておいた。 FBX_SDK

FBX SDK 2017.1 VisualStudio2015 2017.1を試しておいた。 FBX_SDK

 

www.autodesk.com/products/fbx/overview

Windows

FBX SDK 2017.1 VS2015 (exe - 90276Kb)

fbx20171_fbxsdk_vs2015_win.exe

インストールした ディレクトリ(選べる)

デフォルト

C:¥Program Files¥Autodesk¥FBX¥FBX SDK¥2017.1

カスタムのパス※「スペース」を含んだパスがバグの元なのでこうした。

C:¥Maya¥scripts¥FBX_SDK¥2017.1

 

Visual Studio2015

■0,新規プロジェクト>

C++新規コンソールアプリケーション>ウィザードはそのまま次へ>完了。

 

ビルド>構成マネージャ..

アクティブ ソリューション構成: Debug

アクティブ ソリューションプラットフォーム: x86  x64

 

プロパティページ>構成:(アクティブDebug)

プロパティページ>プラットフォーム:x86  x64

 

■1、C/VC++>すべてのオプション>追加のインクルードディレクトリ▼編集..から

C:¥Maya¥scripts¥FBX_SDK¥2017.1¥include

■2、リンカー>すべてのオプション>追加のライブラリディレクトリ

C:¥Program Files¥Autodesk¥FBX¥FBX SDK¥2017.1¥lib¥vs2015¥x64¥debug

C:¥Program Files¥Autodesk¥FBX¥FBX SDK¥2017.1¥lib¥vs2015¥$(PlatformTarget)¥$(Configuration)

C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥$(PlatformTarget)¥$(Configuration)  じゃなくて

 

■3、リンカー>すべてのオプション>追加の依存ファイル> ▼編集..

libfbxsdk.lib

 

■4 LNK1104    ファイル 'libfbxsdk.lib' を開くことができません。 のエラー対策

4、ビルド イベント>ビルド後のイベントDLL形式を使うので、実行ファイルと同じ場所にDLLファイルをコピーする

copy "C:¥Program Files¥Autodesk¥FBX¥FBX SDK¥<SDKのバージョン>¥lib¥vs2015¥$(PlatformTarget)¥$(Configuration)¥libfbxsdk.dll" "$(OutDir)"
copy "C:¥Program Files¥Autodesk¥FBX¥FBX SDK¥2017.1¥lib¥vs2015¥$(PlatformTarget)¥$(Configuration)¥libfbxsdk.dll" "$(OutDir)"

robocopy "C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥$(PlatformTarget)¥$(Configuration)¥libfbxsdk.dll" "$(OutDir)"

copyやrobocopyではうまくいかなかったエラーなので


エラー

------------------------------------------------------------------------------

重大度レベル    コード    説明    プロジェクト    ファイル    行    抑制状態
エラー    LNK1104    ファイル 'libfbxsdk.lib' を開くことができません。    FBX_SDK_VS_Cpp00200    C:¥Maya¥scripts¥FBX_SDK¥FBX_SDK_VS_Cpp00200¥FBX_SDK_VS_Cpp00200¥FBX_SDK_VS_Cpp00200¥LINK    1    

--------------------------------------------------------------------------

エラー対策

//対策:LNK1104 ファイル 'libfbxsdk.lib' を開くことができません。

■2、リンカー>すべてのオプション>追加のライブラリディレクトリ

//「構成プロパティ」 → 「リンカ」 → 「全般」フルパスで指定
//C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥$(PlatformTarget)¥$(Configuration); じゃなくて
 

C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥x86¥debug
C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥x86¥release
C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥x64¥debug
C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥x64¥release

どれかにしたほうがエラーでにくい みたい。

結果これになった。

C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥x86¥debug;C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥x86¥release;C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥x64¥release;C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥x64¥debug


正常終了した。

------------------------------------------

この時点でのコード

#include "stdafx.h"
int main()
{
    printf("main() ¥n");
    return 0;
}

------------------------------------------

コードを最後の■7の状態にした。

https://gist.github.com/whaison/87a77eac6da05987fe46c6ac274fa26c

■5、コーディングのエラー、assert.hの追加

assert(manager);で

ソースファイルを開けません "fbxsdk.h"  のコードの赤線バグ

バグ対策

#include <assert.h> で正常になった。

■1、C/VC++>すべてのオプション>追加のインクルードディレクトリ

C:¥Maya¥scripts¥FBX_SDK¥2017.1¥include で正常になった。

------------------------------------------

■6、実行エラー「libfbxsdk.dll がないため、プログラムを開始できません。」を解決するためにPATH環境変数を追加して再起動で解決!!

コンピュータに libfbxsdk.dll がないため、プログラムを開始できません。この問題

を解決するには、プログラムを再インストールしてみてください。

C:¥Maya¥scripts¥FBX_SDK¥2017.1に再インストールした。ダメ

https://www.google.co.jp/search?q=コンピュータに+libfbxsdk.dll+がないため、プログラムを開始できません

http://imagingsolution.net/program/opencv/no-opencv-dll-file/

dllファイルはコンピュータに入っているし、なぜ???と思われる方もいると思いますが、Windowsではダイナミックライブラリファイル(*.dll)は下記の特定のフォルダに入っていないと見つけてくれません。

 

1. アプリケーション(*.exe)と同じフォルダ
2. カレントディレクトリ
3. システムディレクトリ(C:¥Windows¥System32 など)
4. 16Bitシステムディレクトリ(C:¥Windows¥System など)
5. Windowsディレクトリ(C:¥Windows など)
6. PATH環境変数に列挙されているディレクトリ


 

システム環境変数のPathを設定 するようにしています。

そして、編集値の欄に*.dllファイルがインストールされているパス(フォルダ名のフルパス)をセミコロン(;)に続けて記載します。

C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥x86¥debug

C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥x86¥release

C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥x64¥debug

C:¥Maya¥scripts¥FBX_SDK¥2017.1¥lib¥vs2015¥x64¥release

*windows10だと 新規>パス入力OKの繰り返し。

 

PATH環境変数を追加した場合また再起動が必要です

 

------------------------------------------

■7、コードの状態

https://gist.github.com/whaison/87a77eac6da05987fe46c6ac274fa26c

 

1>------ ビルド開始: プロジェクト:FBX_SDK_VS_Cpp00200, 構成:Debug Win32 ------
1>  FBX_SDK_VS_Cpp00200.cpp
1>  FBX_SDK_VS_Cpp00200.vcxproj -> C:¥Maya¥scripts¥FBX_SDK¥FBX_SDK_VS_Cpp00200¥FBX_SDK_VS_Cpp00200¥Debug¥FBX_SDK_VS_Cpp00200.exe
1>  FBX_SDK_VS_Cpp00200.vcxproj -> C:¥Maya¥scripts¥FBX_SDK¥FBX_SDK_VS_Cpp00200¥FBX_SDK_VS_Cpp00200¥Debug¥FBX_SDK_VS_Cpp00200.pdb (Full PDB)
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========

 

正常終了。できた。

------------------------------------------

------------------------------------------

参考URL

■でらうま倶楽部 FBX SDKに触れる

http://blog.livedoor.jp/tek_nishi/archives/9428032.html

 

■2016-02-11【FBX to OBJ】00 FBXSDKを使えるようにしよう

http://hobbyistbox.hatenablog.com/entry/2016/02/11/141149

 

C#でのカスタムビルド 1ラインエラー

http://kronoseed.blog43.fc2.com/?mode=m&no=42

cygwinのcpコマンドだと、日本語のようなマルチバイト文字が入っているディレクトリをうまく扱えないバグがあることが分かった。

■MacOSX10.10.4(Yosemite )Xcode7bataでFBX SDK Mac FBX SDK 2015.1 Clang (tgz)でやってみた。002 C++で成功 http://whaison.jugem.jp/?eid=757

FBX SDKのフォルダのスペースはバグる原因なのでFBXSDKに変更しちゃいました。

 

ビルドのコマンドとプロパティのマクロ 

https://msdn.microsoft.com/ja-jp/library/c02as0cs.aspx

$(Platform) 現在のプロジェクト プラットフォームの名前 (例: "Win64") です。
$(Configuration) 現在のプロジェクト構成の名前 (例: "Debug") です。
$(OutDir) 出力ファイルのディレクトリへのパスです。 これが相対パスの場合、出力ファイルはこのパスを通じてプロジェクト ディレクトリに追加されます。 このパスの末尾にはスラッシュが必要です。 これは Output Directory プロパティの値に解決されます。$(IntDir) を使用して、このプロパティを定義しないでください。

 

---------------------------------------

---------------------------------------

 

| whaison | C++ | 10:54 | comments(0) | - | pookmark |
            
2016.10.25 Tuesday
Visual Studio 用 Maya プラグイン ウィザード Maya Plug in Wizardを使う。4 initとuninit

プラグインはダイナミックリンクライブラリなので、entry ポイント および exit ポイント を提供しなければいけません。

これらは、プラグインが最初にロードされたとき(entry関数)、最後にアンロードされた時(exit関数)に呼び出される関数です。

Windowsでは、普通、開発者自身のDll Main関数により扱われます。MayaPluginWizardでは、entryポイントとexitポイントは

DeclareSimpleCommand( MayaPluginWhaison2, "whaison2", "2017");マクロにより作成されています。

MSimple.hの中の

DeclareSimpleCommand( _className, _vendor, _version )

このマクロは自動的にコマンドと、initializePlugin 関数 uninitializePlugin 関数 の両方を生成してくれます。

 

ではこれ(MSimple.h)をつかわないでクラス内で実装してみました。

内容はMSimple.hの内容を持ってきて 必要な引数をいれてあります。

 

ビルドしました。プラグインロードしました。MELたたきました

 // Hellow World in MayaPluginWizard3Cmd でました。

で。

コマンドクラスは シンプルなdoIt()関数を含んでいます。コマンドが実行されるとこの関数が実行されます。

    virtual MStatus  doIt(const MArgList&)
    {
        MGlobal::displayInfo("Hellow World in MayaPluginWizard3Cmd ¥n");
        return MS::kSuccess;//doIt内容成功したかどうかを返す
    }

コマンドはstatic なcreator()関数も含んでいて、コマンドをアロケート つまり実行中のプログラムへのメモリ空間の割り当て(メモリアロケーション) してそれを返します。

static void *creator()
    {
        return new MayaPluginWizard3Cmd;
    }

 

以下のコマンドはinitialization  関数 uninitialization 関数です。

MStatus initializePlugin(MObject _obj)

MStatus uninitializePlugin(MObject _obj)   

 

両方の関数は全てのMayaプラグインになくてはなりません。それらが存在しなかった場合、プラグインはリンクされません

initializePlugin関数はMObject を入力として受け取ります。このMObjectはプラグインタイプ用の内部データへのハンドルです。

 

MStatus initializePlugin(MObject _obj){}

 

次の行では、MFnPlugin オブジェクトが生成されobj変数を引数として初期化されます。

MFnPlugin MObject にアタッチさせることで、MFnPlugin 関数を呼び出して MObjectを操作することができます

 

MFnPlugin    plugin(_obj=MObject , "whaison.jugem.jp", "3.0");  //MFnPlugin インスタンスの生成

 

ここでMayaPluginWizard3Cmdコマンドが登録されます。コマンドの登録を行うことで、コマンド

がMayaで使用できるようになります。登録には名前とともにcreator関数を与える必要があります。

名前はそのコマンドを実行するときの名称で、この場合は単純にMayaPluginWizard3”です。

 

MStatus        stat;        //MStatus 型   の宣言                                   
stat = plugin.registerCommand("MayaPluginWizard3",MayaPluginWizard3Cmd::creator);

 

creator 関数はstatic 関数でコマンドのインスタンスを1つアロケート(メモリ確保)します。

これをMaya に登録する際に必要とされます。そうしなければコマンドをインスタンス化する方法が

わからないからです。

 

登録の結果をチェックし、失敗していたらエラーを表示します。

       if (!stat){                                               
            stat.perror("registerCommand failed"); //エラーを表示します。

         }

initializePlugin関数は必ずMStatus型の結果を返します
            return stat;    //initializePlugin関数はMStatus型の結果を返します

}

 

もし帰ってきたステータスがMS::kSuccses でなければ、プラグインは終了し、

ダイナミックリンクライブラリは自動的にアンロードされます。

コマンドラインの結果にエラーメッセージが表示されます。重要なのは、もしinitialazePlugin関数が

失敗すれば、uninitialazePlugin関数は呼び出されないということです。

initialazePlugin関数内で(例え initialazePluginが失敗した場合にも)処理を終えて戻る前に、

全てのクリーンアップを終えなければなりません。

 

uninitialazePlugin関数はinitialazePlugin関数の逆を行います。

initialazePlugin関数 が登録したコマンドを取り消します。

 

stat = plugin.deregisterCommand("MayaPluginWizard3");

 

関数はuninitialazationが成功したかどうかのステータスも返します。

    if (!stat) {
            stat.perror("deregisterCommand failed");//uninitialazationが成功したか
     }

 

return stat;

もし帰ってきたステータスがMS::kSuccses でなければ、プラグインは終了し、

ダイナミックリンクライブラリは自動的にアンロードされません。

Mayaが終了するまでロードされたままになります。

 

この例では1つのコマンドがMayaに登録された場合でした。実際には無制限に登録が可能です。

カスタムノードやカスタムデータなど、どんなMayaプラグインを作る場合もこの

intialazePlugin関数、uninitialazePlugin関数によって簡単にMayaに新しい機能を与えるプラグインを提供し

アプリケーションで使用できるようになります。

 

コメント多めのソース

。。。

 

| whaison | C++ | 19:03 | comments(0) | - | pookmark |
            
2016.10.25 Tuesday
Visual Studio 用 Maya プラグイン ウィザード Maya Plug in Wizardを使う。3 リリースビルド

Visual Studio 用 Maya プラグイン ウィザード Maya Plug in Wizardを使う。3 リリースビルド

Build>SetActive Configration...

ビルド>構成マネージャー....

から

アクティブソリューション構成(C):からRelease を選びます。

F7 Build> Build プロジェクト名.mll を選択して

プラグインをビルドします。

 

でこのエラーが出ます。

 

コード    重大度レベル    説明    プロジェクト    ファイル    行    抑制状態
MSB8020    エラー    The build tools for Visual Studio 2012 (Platform Toolset = 'v110') cannot be found. To build using the v110 build tools, please install Visual Studio 2012 build tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Retarget solution".    MayaPluginWizard2    C:¥Program Files (x86)¥MSBuild¥Microsoft.Cpp¥v4.0¥V140¥Microsoft.Cpp.Platform.targets    54  

Visual Studio: Error MSB8020の解決方法

http://answers.microsoft.com/ja-jp/windows/forum/windows8_1-winapps/visual-studio-error/e269e8f3-eb38-413f-95f7-eec1faeb5c52?auth=1

プロジェクト>”プロジェクト名”のプロパティ

構成プロパティで

General>

Platform Target

Visual Studio 2015 (Platform Toolset = 'v140')を選択したら解決できました。

 

では再ビルド

F7 Build> Build プロジェクト名.mll を選択して

プラグインをビルドします。

ではリリースビルドができあがりました。

 

 

| whaison | C++ | 17:54 | comments(0) | - | pookmark |
            
2016.10.25 Tuesday
Visual Studio 用 Maya プラグイン ウィザード Maya Plug in Wizardを使う。2 開発デバッグ

Visual Studio 用 Maya プラグイン ウィザード Maya Plug in Wizardを使う。2 開発

 

Mayaでロードしたまま

Maya >ウィンドウ> 設定プリファレンス>プラグインマネージャ

Mayaでロードしたまま変更を加えてビルドすると 成功したビルドを実行なんてしないから「いいえ」だけど

 

 

コード    重大度レベル    説明    プロジェクト    ファイル    行    抑制状態
LNK1168    エラー    cannot open Debug¥MayaPluginWhaison2.mll for writing    MayaPluginWizard2  

 C:¥Users¥B07363¥Documents¥maya¥2016¥ja_JP¥scripts¥cpp¥MayaPluginWizard2¥MayaPluginWizard2¥LINK    1  

 

共有違反なのね、Mayaがロード参照してるのに。。変えないでください的な

 Mayaのロードを外せばビルドできます。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

デバッグとリリースを切り替えます。

ビルド>構成マネージャー...

アクティブソリューション構成のDebugのプルダウンを以下の状態に

それぞれすると構成が切り替わっています。

Debug  ...

Release.... (Visual Studio 2012) 向けになっています。

 

Debugに戻しておきましょう。

---------------------------------------------------------------------------------

プロジェクト>「プロジェクト名」のプロパティ...

左端メニューから

▼構成プロパティ

デバックをクリックすると

Command 右にC:¥Program Files¥Autodesk¥Maya2017¥bin¥maya.exe となっていて

ここでMaya.exeをキックする設定をしています。

Releaseもしてみます

 

Debugに戻しておきましょう。

---------------------------------------------------------------------------------

コード    重大度レベル    説明    プロジェクト    ファイル    行    抑制状態
LNK1201    エラー    error writing to program database

'C:¥Users¥B07363¥Documents¥maya¥2016¥ja_JP¥scripts¥cpp¥MayaPluginWizard2¥MayaPluginWizard2¥Debug¥MayaPluginWhaison2.pdb';

 check for insufficient disk space,

 十分なディスク容量をチェックし、

 invalid path, or insufficient privilege
 無効なパス、または十分な特権   

MayaPluginWizard2    

C:¥Users¥B07363¥Documents¥maya¥2016¥ja_JP¥scripts¥cpp¥MayaPluginWizard2¥MayaPluginWizard2¥LINK    1

 

エラーが出ましたが

もう一度ビルドすると直りました。

 

1>------ ビルド開始: プロジェクト:MayaPluginWizard2, 構成:Debug x64 ------
1>  MayaPluginWhaison2Cmd.cpp
1>C:¥Program Files (x86)¥MSBuild¥Microsoft.Cpp¥v4.0¥V140¥Microsoft.CppBuild.targets(1189,5): warning MSB8012: TargetPath(C:¥Users¥B07363¥Documents¥maya¥2016¥ja_JP¥scripts¥cpp¥MayaPluginWizard2¥MayaPluginWizard2¥Debug¥MayaPluginWizard2.mll) does not match the Linker's OutputFile property value

リンカのOutputFileはプロパティの値と一致しません

(C:¥Users¥B07363¥Documents¥maya¥2016¥ja_JP¥scripts¥cpp¥MayaPluginWizard2¥MayaPluginWizard2¥Debug¥MayaPluginWhaison2.mll). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
1>C:¥Program Files (x86)¥MSBuild¥Microsoft.Cpp¥v4.0¥V140¥Microsoft.CppBuild.targets(1191,5): warning MSB8012: TargetName(MayaPluginWizard2) does not match the Linker's OutputFile property value (MayaPluginWhaison2). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
1>  MayaPluginWizard2.vcxproj -> C:¥Users¥B07363¥Documents¥maya¥2016¥ja_JP¥scripts¥cpp¥MayaPluginWizard2¥MayaPluginWizard2¥Debug¥MayaPluginWizard2.mll
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========

MayaPluginWhaison2;
// Hello World  Universe whaison5
  //
MayaPluginWhaison2;
// Hello World  Universe whaison5
  //

 

 

 

 

続きを読む >>
| whaison | C++ | 16:12 | comments(0) | - | pookmark |
            
2016.10.25 Tuesday
Visual Studio 用 Maya プラグイン ウィザード Maya Plug in Wizardを使う。

 

 

Visual Studio 用 Maya プラグイン ウィザード Maya Plug in Wizard

 

インストール方

https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2016/ENU/Maya-SDK/files/GUID-13D86D23-65DB-49A2-BD9C-DB9EF9F8644A-htm.html#mtc-japanese

 

 

ダウンロード場所のURL

https://apps.autodesk.com/MAYA/en/List/Search?isAppSearch=True&searchboxstore=MAYA&facet=&collection=&sort=&query=Maya+kit

 

Maya Developer Kit は、オンラインの Autodesk Exchange (https://apps.exchange.autodesk.com/MAYA/ja/Home/Index)で利用可能です。C:¥Users¥<name> にアーカイブをコピーして解凍すると、devkitBase という名前のフォルダが作成されます。devkitBase¥devkit¥plug-ins に多くのサンプル プラグインがあります。Developer Kit には、いくつかの Maya API アプリケーションが含まれ、これらは devkitBase¥devkit¥applications にあります。¥devkit  ¥mkspecs の各フォルダを

 C:¥Program Files¥Autodesk¥maya2016.5にコピーします。

C:¥Program Files¥Autodesk¥Maya2016¥devkit

 

したがって、フォルダ構造は次のようになります。

  • C:¥Program Files¥Autodesk¥maya2016.5¥devkit
  • C:¥Program Files¥Autodesk¥maya2016.5¥include
  • C:¥Program Files¥Autodesk¥maya2016.5¥mkspecs
  • C:¥Program Files¥Autodesk¥maya2016.5¥bin


続きを読む >>
| whaison | C++ | 11:35 | comments(0) | - | pookmark |
            
2016.10.24 Monday
MacBootCampでvisual studio 2015 c++で楽に「デバッグなしで開始」をするメモ。

MacBootCampでvisual studio 2015 c++で楽に「デバッグなしで開始」をするメモ。
F5 などのデフォルトでキーはつかえないですが
Bootcampの設定コントロールパネル
キーボードのタブで

 

埋め込み画像 1
□F1, F2などのすべてのキーを標準のファンクションキーとして使用に チェックを入れます。
これで「デバッグなしで開始」を
ショートカットキー Ctrl+F5 を使ってコマンド実行することはできます。

 

hello.cpp

#include <stdio.h>

int main(void)
{
    printf("こんにちは!¥n");

    return 0;
}

出力
こんにちは!

埋め込み画像 2
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ーーーーー
さらに「デバッグなしで開始」アイコンを表示する
http://cvwww.ee.ous.ac.jp/ vc10prog.html#8a

 


「ボタンの追加または削除」→「カスタマイズ」
プログラムを実行するときに「デバッグなしで開始」 コマンドを使用しますが、 このコマンドをメニューから毎回選ぶの面倒なので、 ワンクリックで実行できるようにツールバーにアイコンとして表示 させます。

1 ツールバーのオプションの表示
標準ツールバーの右端にある「標準ツールバーのオプション」 ボタンをクリックします。

 

 

「ボタンの追加または削除」→「カスタマイズ」 の順にクリックします。 

「カスタマイズ」ウィンドウが表示されます。
まず、アイコンを追加する場所を指定します。ここでは、「 ソリューション構成」の左隣に追加されるようにするために、「 コントロール」のところで「ソリューション構成」 をクリックします。

埋め込み画像 5
「コマンドの追加」をクリックします。 

 

「コマンドの追加」ウィンドウが表示されます。
「カテゴリ」で「デバッグ」をクリックしてから、「コマンド」 で「デバッグなしで開始」をクリックします。
「OK」をクリックします。 

埋め込み画像 7
「デバッグなしで開始」が「開始/継続」と「 ソリューション構成」との間に追加されています。
「閉じる」をクリックします。 

 

標準ツールバーに「デバッグなしで開始」が追加されています。 

 

埋め込み画像 6

 

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ーーーーー
さらにCtrl + F5ってなんかちがうんだよなーって場合
visual studio 2015 ショートカット キーのカスタマイズ
https://msdn.microsoft.com/ja- jp/library/aa301747(v=vs.71). aspx

[ツール] メニューの
 [オプション] をクリックします。
[オプション] ダイアログ ボックスの 
[環境] フォルダを開き、
[キーボード] をクリックします。

以下の文字列を含むコマンドを表示に
デバッグなしで開始
選択したコマンドへのショートカットに
Ctrl + F5 
とでてくるので
下の使用する場所
全体
ショートカットキー
Ctrl + Shift +Alt(option)+Enter  をおして
「割り当て」でOK

 

埋め込み画像 8​----------------------------- ------------------------------ ------------

これはWindowsの場合だけかもしれないが、

新規>プロジェクト>

プロジェクトウィンドウ>Visual C++ >Win32Console Application

ウィザードの中で表示がでかすぎて設定できないバカウィンドウが出てくる。
Ctrl - や Ctrl + をして設定できるサイズにしよう。 実際表示されているテキストの内容はこれだ。
------------------------------ ------------------------------ -----------------

このプロジェクトで作成するアプリケーションの種類と、サポートするオプションまたはライブラリを指定してください。

アプリケーション設定
アプリケーションの種類:

 




 

追加のオプション:

 




共通ヘッダー ファイルを追加:

 


 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

| whaison | C++ | 10:20 | comments(0) | - | pookmark |