<div dir="ltr"><div><br></div>I've put some units of my still work-in-progress UE4-style SupraEngine on my root server, after I've read this mailing list thread => <div><br></div><div><a href="http://rootserver.rosseaux.net/stuff/supraengineunits/">http://rootserver.rosseaux.net/stuff/supraengineunits/</a> <div> </div><div>where the SupraEngine.Math.pas + SupraEngine.Math.*.inc + SupraEngine.Types.Standard.pas will be maybe interesting for you. <div><br></div><div>It's a complete 3D Math unit based on overloaded operators, advanced records, etc. and even with GLSL-style swizzle support, where you can type something like My3DVector.xzy := MyOther3DVector.yyx; My4DVector.zyx := TVector3.Create(3.0, 2.0, 1.0); or even My2DVector.yx := My3DVector.yz; etc.<br></div></div></div><div><br></div><div>Furthermore many routines are SSE optimized for the x86-32 and x86-64 targets.</div><div><br></div><div>This is the result of many years of evolution-based work, starting from the original math routines of my old PAPPE physics engine, which I've always further developed over the years (incl. many refactorings and rewrites).<br></div><div><br></div><div>And if you will do using it, then you add the following line to your start of your code (where the Math unit must be in the uses clause):</div><div><br></div><div><div>SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision]);</div></div><div><br></div><div>for disable some floating point exceptions, which could occur at 3D stuff, especially divide-by-zero exceptions at speed-SIMD-optimized normalization operations. </div><div><br></div><div>And credits would be nice :)</div><div><br></div><div>Regards,</div><div>Benjamin 'BeRo' Rosseaux</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, May 27, 2017 at 12:37 PM, Ryan Joseph <span dir="ltr"><<a href="mailto:ryan@thealchemistguild.com" target="_blank">ryan@thealchemistguild.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
> On May 27, 2017, at 5:16 PM, Mark Morgan Lloyd <<a href="mailto:markMLl.fpc-pascal@telemetry.co.uk">markMLl.fpc-pascal@telemetry.<wbr>co.uk</a>> wrote:<br>
><br>
> But working from a hazy recollection of such things, it's possible to merge the translation/rotation matrices so that the final transformation can be reduced to a single operation.<br>
<br>
</span>Oh I’m sorry, I’m using 3.x core and the fixed pipeline has been removed which glRotate etc… were part of. I’m using this now but I wanted to learn the “new” stuff some.<br>
<br>
Regards,<br>
        Ryan Joseph<br>
<div class="HOEnZb"><div class="h5"><br>
______________________________<wbr>_________________<br>
fpc-pascal maillist  -  <a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.<wbr>org</a><br>
<a href="http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal" rel="noreferrer" target="_blank">http://lists.freepascal.org/<wbr>cgi-bin/mailman/listinfo/fpc-<wbr>pascal</a></div></div></blockquote></div><br></div>