Jump to content

t_d

Member
  • Content Count

    447
  • Joined

  • Last visited

  • Medals

Posts posted by t_d


  1. A few days ago I decided to put most of the code to public that I created in many years working with ArmA file formats. So I put it on GitHub here. While there are a lot of PBO libs already floating around it is quite rare for other files like PAA, RTM etc.  My idealistic goal for this project would be that it evolves to an active open source project where contributors add useful and easy to use APIs and add more features. This would facilitate creative tool developers to create tools that are working with those files, which they could not before, because they did not know the file format or it was too much work to implement it. So don't be shy, make some Pull Requests and improve or extend the code. Or Post ideas how to improve/extend the API.

    I will also add more file formats like OPRW (binarized wrp) and probably MLOD (editable p3d). However, ODOL (binarized p3d) will be not included for certain reasons.

    • Like 4
    • Thanks 2

  2. There are so many ways to create such transformations matrices: Most commonly you create a matrix for each operation you want to perform like rotating, scaling, translating, mirroring etc. and then you multiply those in order of the operations to get a single matrix that holds all those operations. Here you can see how those single operation matrices are built.

    • Thanks 1

  3. To calculate the values of 3DEN you should find out what they actually are, i.e. what unit and what kind of coordinate system, what kind of angles, value range etc.

    We know this for both commands you noted. getDir for example returns a value between 0 - 360 in degrees and it is working counterclockwise starting with the north direction at 0.

    If we assume X,Y and Z are Euler angles than one of those definately corresponds to the value of getDir. It might be that they use a different unit like radians instead of degrees or a different value range (-180°-180°) but it would be possible to calculate the 3DEN value from the getDir command. So, since I dont know what kind of values are used in 3DEN I cannot tell you exactly how to calculate them, but maybe someone knows that or you do some measurements to find out some hard facts. For example do you need a value of 90 or Pi/2 to rotate something by 90°? That would give a hint about the unit.


  4. Here is how BIS seems to simulate free falling bombs: https://pastebin.com/teQntUBp (already stripped down most of the unimportant code). Maybe you can deduce a formula from this.

    Let me know if something is unclear and I will try to explain.

     

    Vector3Val position = FutureVisualState().Position();
      Vector3Val speed = FutureVisualState().ModelSpeed();
      float mass = GetMass();
     
      Vector3 force(VZero), torque(VZero);
      Vector3 friction(VZero), torqueFriction(VZero);
      Vector3 pForce(VZero), pCenter(VZero);
      // body air friction
      pForce[0] = speed[0] * speed[0] * speed[0] * 5e-4f + speed[0] * fabs(speed[0]) * 10.0f + speed[0] * 10.0f;
      pForce[1] = speed[1] * speed[1] * speed[1] * 5e-4f + speed[1] * fabs(speed[1]) * 10.0f + speed[1] * 10.0f;
      pForce[2] = speed[2] * speed[2] * speed[2] * 1e-5f + speed[2] * fabs(speed[2]) * 0.01f + speed[2] * 2.0f;
     
      pForce[0] *= ammoType->sideAirFriction;
      pForce[1] *= ammoType->sideAirFriction;
      pForce[2] *= ammoType->_airFriction;
     
      pForce *= mass * (1.0f / 10.0f);
      friction += pForce;
     
      // aerodynamic non-stability makes direction aligned with speed
      pForce[0] *= 0.1f;
      pForce[1] *= 0.1f;
      pCenter = Vector3(0.0f, 0.0f, +0.3f);
      torque += pCenter.CrossProduct(pForce);
     
      // calculate draconic force (which makes direction aligned with speed)
      // note: this should be calculated for all missiles, but it is too late to add it now, as it might cause some changed behavior.
      pForce[0] = speed[0] * fabs(speed[0]) * -0.00033f + speed[0] * -0.005f;
      pForce[1] = speed[1] * fabs(speed[1]) * -0.00033f + speed[1] * -0.005f;
      pForce[2] = 0.0f;
      pForce *= mass;
      force += pForce;
     
      // convert to world space
      FutureVisualState().DirectionModelToWorld(friction, friction);
      FutureVisualState().DirectionModelToWorld(force, force);
      FutureVisualState().DirectionModelToWorld(torque, torque);
     
      torqueFriction = _angMomentum * 5.0f;
     
      // add gravity
      pForce = Vector3(0.0f, -G_CONST, 0.0f) * mass;
      force += pForce;
     
      // calculate new position
      VisualState moveTrans = PredictPos<VisualState>(deltaT);
     
      ApplyRemoteStateAdjustSpeed(deltaT,moveTrans);
     
      Vector3Val newPos = moveTrans.Position();
      Vector3 lDir = newPos - position;
     
      Move(moveTrans);
      DirectionWorldToModel(FutureVisualState()._modelSpeed, FutureVisualState()._speed);
      ApplyForces(deltaT, force, torque, friction, torqueFriction);

     

    • Like 2

  5. 4e13 is the definite resolution value for the PhysX LOD and it shouldn't matter that the current O² doesnt know that because it will still create the correct MLOD. The current binarize though doesnt know that this LOD is a special LOD and might treat it incorrectly. So I recommend to put the MLOD only into the pbo. This way A3 Alpha will do the binarization and A3 knows how to treat this LOD ;)


  6. In sourcecode of http://sahraniradio.com/radioplayer/ there is this comment: <!-- We do know our radio needs to be repaired, we're having problems with external interference. use the dials to finetune the radio -->

    Found this because of the tweets by Randall Hubb:

    *Radio disturbance - Dont you hate that when you listen to your favorite radiostation ?

    *I might need to buy a better radio. It is kinda old. http://goo.gl/PC1hu #disturbance

    *Weak and the powerlesss - A perfect circle. i love that song!


  7. Just one more consideration. The low section count is especially important in lower resolution LODs, because these are the ones you will have in masses in a scene at a time. You rarely see more than 3 first LODs at a time. Maybe that's why BIS can accept a lot of sections in first LOD sometimes. But I am pretty sure it is very low in low LODs ;)


  8. paa and jpg compression are working completly different. paa is nearly lossless. If you want to reduce file sizes of paa you dont have many options. Make sure you use the latest texView2 which uses LZO compression (automatically). Besides reducing the resolution your last option would be to remove the mipmaps of the texure via MipMapRemover which can be found here: https://dev-heaven.net/projects/tdt/files

    Otherwise you have to go with jpg.

×