remove float[16]

This commit is contained in:
ikpil 2023-09-14 23:17:40 +09:00
parent 5ac225a712
commit 13d035e815
7 changed files with 40 additions and 41 deletions

View File

@ -107,7 +107,7 @@ namespace DotRecast.Core
M31 == 0f && M32 == 0f && M34 == 0f && M31 == 0f && M32 == 0f && M34 == 0f &&
M41 == 0f && M42 == 0f && M43 == 0f; M41 == 0f && M42 == 0f && M43 == 0f;
public static RcMatrix4x4f Mul(RcMatrix4x4f left, RcMatrix4x4f right) public static RcMatrix4x4f Mul(ref RcMatrix4x4f left, ref RcMatrix4x4f right)
{ {
float m11 = left.M11 * right.M11 + left.M21 * right.M12 + left.M31 * right.M13 + left.M41 * right.M14; float m11 = left.M11 * right.M11 + left.M21 * right.M12 + left.M31 * right.M13 + left.M41 * right.M14;
float m12 = left.M12 * right.M11 + left.M22 * right.M12 + left.M32 * right.M13 + left.M42 * right.M14; float m12 = left.M12 * right.M11 + left.M22 * right.M12 + left.M32 * right.M13 + left.M42 * right.M14;

View File

@ -303,8 +303,8 @@ public class DebugDraw
private bool circleInit = false; private bool circleInit = false;
private const int CIRCLE_NUM_SEG = 40; private const int CIRCLE_NUM_SEG = 40;
private readonly float[] circeDir = new float[CIRCLE_NUM_SEG * 2]; private readonly float[] circeDir = new float[CIRCLE_NUM_SEG * 2];
private float[] _viewMatrix = new float[16]; private RcMatrix4x4f _viewMatrix = new();
private readonly float[] _projectionMatrix = new float[16]; private RcMatrix4x4f _projectionMatrix = new();
public void AppendCircle(float x, float y, float z, float r, int col) public void AppendCircle(float x, float y, float z, float r, int col)
{ {
@ -628,10 +628,10 @@ public class DebugDraw
} }
public float[] ProjectionMatrix(float fovy, float aspect, float near, float far) public RcMatrix4x4f ProjectionMatrix(float fovy, float aspect, float near, float far)
{ {
GLU.GlhPerspectivef2(_projectionMatrix, fovy, aspect, near, far); GLU.GlhPerspectivef2(ref _projectionMatrix, fovy, aspect, near, far);
GetOpenGlDraw().ProjectionMatrix(_projectionMatrix); GetOpenGlDraw().ProjectionMatrix(ref _projectionMatrix);
UpdateFrustum(); UpdateFrustum();
return _projectionMatrix; return _projectionMatrix;
} }
@ -640,18 +640,17 @@ public class DebugDraw
{ {
var rx = RcMatrix4x4f.CreateFromRotate(cameraEulers[0], 1, 0, 0); var rx = RcMatrix4x4f.CreateFromRotate(cameraEulers[0], 1, 0, 0);
var ry = RcMatrix4x4f.CreateFromRotate(cameraEulers[1], 0, 1, 0); var ry = RcMatrix4x4f.CreateFromRotate(cameraEulers[1], 0, 1, 0);
var r = RcMatrix4x4f.Mul(rx, ry); var r = RcMatrix4x4f.Mul(ref rx, ref ry);
var t = new RcMatrix4x4f(); var t = new RcMatrix4x4f();
t.M11 = t.M22 = t.M33 = t.M44 = 1; t.M11 = t.M22 = t.M33 = t.M44 = 1;
t.M41 = -cameraPos.x; t.M41 = -cameraPos.x;
t.M42 = -cameraPos.y; t.M42 = -cameraPos.y;
t.M43 = -cameraPos.z; t.M43 = -cameraPos.z;
var mul = RcMatrix4x4f.Mul(r, t); _viewMatrix = RcMatrix4x4f.Mul(ref r, ref t);
mul.CopyTo(_viewMatrix); GetOpenGlDraw().ViewMatrix(ref _viewMatrix);
GetOpenGlDraw().ViewMatrix(ref mul);
UpdateFrustum(); UpdateFrustum();
return mul; return _viewMatrix;
} }
@ -667,7 +666,7 @@ public class DebugDraw
private void UpdateFrustum() private void UpdateFrustum()
{ {
var vpm = RcMatrix4x4f.Mul(_projectionMatrix, _viewMatrix); var vpm = RcMatrix4x4f.Mul(ref _projectionMatrix, ref _viewMatrix);
NormalizePlane(vpm.M14 + vpm.M11, vpm.M24 + vpm.M21, vpm.M34 + vpm.M31, vpm.M44 + vpm.M41, ref frustumPlanes[0]); // left NormalizePlane(vpm.M14 + vpm.M11, vpm.M24 + vpm.M21, vpm.M34 + vpm.M31, vpm.M44 + vpm.M41, ref frustumPlanes[0]); // left
NormalizePlane(vpm.M14 - vpm.M11, vpm.M24 - vpm.M21, vpm.M34 - vpm.M31, vpm.M44 - vpm.M41, ref frustumPlanes[1]); // right NormalizePlane(vpm.M14 - vpm.M11, vpm.M24 - vpm.M21, vpm.M34 - vpm.M31, vpm.M44 - vpm.M41, ref frustumPlanes[1]); // right
NormalizePlane(vpm.M14 - vpm.M12, vpm.M24 - vpm.M22, vpm.M34 - vpm.M32, vpm.M44 - vpm.M42, ref frustumPlanes[2]); // top NormalizePlane(vpm.M14 - vpm.M12, vpm.M24 - vpm.M22, vpm.M34 - vpm.M32, vpm.M44 - vpm.M42, ref frustumPlanes[2]); // top

View File

@ -23,45 +23,45 @@ namespace DotRecast.Recast.Demo.Draw;
public static class GLU public static class GLU
{ {
public static float[] GluPerspective(float fovy, float aspect, float near, float far) public static RcMatrix4x4f GluPerspective(float fovy, float aspect, float near, float far)
{ {
float[] projectionMatrix = new float[16]; var projectionMatrix = new RcMatrix4x4f();
GlhPerspectivef2(projectionMatrix, fovy, aspect, near, far); GlhPerspectivef2(ref projectionMatrix, fovy, aspect, near, far);
//GlLoadMatrixf(projectionMatrix); //GlLoadMatrixf(projectionMatrix);
return projectionMatrix; return projectionMatrix;
} }
public static void GlhPerspectivef2(float[] matrix, float fovyInDegrees, float aspectRatio, float znear, float zfar) public static void GlhPerspectivef2(ref RcMatrix4x4f matrix, float fovyInDegrees, float aspectRatio, float znear, float zfar)
{ {
float ymax, xmax; float ymax, xmax;
ymax = (float)(znear * Math.Tan(fovyInDegrees * Math.PI / 360.0)); ymax = (float)(znear * Math.Tan(fovyInDegrees * Math.PI / 360.0));
xmax = ymax * aspectRatio; xmax = ymax * aspectRatio;
GlhFrustumf2(matrix, -xmax, xmax, -ymax, ymax, znear, zfar); GlhFrustumf2(ref matrix, -xmax, xmax, -ymax, ymax, znear, zfar);
} }
private static void GlhFrustumf2(float[] matrix, float left, float right, float bottom, float top, float znear, float zfar) private static void GlhFrustumf2(ref RcMatrix4x4f matrix, float left, float right, float bottom, float top, float znear, float zfar)
{ {
float temp, temp2, temp3, temp4; float temp, temp2, temp3, temp4;
temp = 2.0f * znear; temp = 2.0f * znear;
temp2 = right - left; temp2 = right - left;
temp3 = top - bottom; temp3 = top - bottom;
temp4 = zfar - znear; temp4 = zfar - znear;
matrix[0] = temp / temp2; matrix.M11 = temp / temp2;
matrix[1] = 0.0f; matrix.M12 = 0.0f;
matrix[2] = 0.0f; matrix.M13 = 0.0f;
matrix[3] = 0.0f; matrix.M14 = 0.0f;
matrix[4] = 0.0f; matrix.M21 = 0.0f;
matrix[5] = temp / temp3; matrix.M22 = temp / temp3;
matrix[6] = 0.0f; matrix.M23 = 0.0f;
matrix[7] = 0.0f; matrix.M24 = 0.0f;
matrix[8] = (right + left) / temp2; matrix.M31 = (right + left) / temp2;
matrix[9] = (top + bottom) / temp3; matrix.M32 = (top + bottom) / temp3;
matrix[10] = (-zfar - znear) / temp4; matrix.M33 = (-zfar - znear) / temp4;
matrix[11] = -1.0f; matrix.M34 = -1.0f;
matrix[12] = 0.0f; matrix.M41 = 0.0f;
matrix[13] = 0.0f; matrix.M42 = 0.0f;
matrix[14] = (-temp * zfar) / temp4; matrix.M43 = (-temp * zfar) / temp4;
matrix[15] = 0.0f; matrix.M44 = 0.0f;
} }
public static int GlhUnProjectf(float winx, float winy, float winz, float[] modelview, float[] projection, int[] viewport, ref RcVec3f objectCoordinate) public static int GlhUnProjectf(float winx, float winy, float winz, float[] modelview, float[] projection, int[] viewport, ref RcVec3f objectCoordinate)

View File

@ -27,7 +27,7 @@ public interface IOpenGLDraw
void Texture(GLCheckerTexture g_tex, bool state); void Texture(GLCheckerTexture g_tex, bool state);
void ProjectionMatrix(float[] projectionMatrix); void ProjectionMatrix(ref RcMatrix4x4f projectionMatrix);
void ViewMatrix(ref RcMatrix4x4f viewMatrix); void ViewMatrix(ref RcMatrix4x4f viewMatrix);

View File

@ -22,8 +22,8 @@ public class ModernOpenGLDraw : IOpenGLDraw
private readonly ArrayBuffer<OpenGLVertex> vertices = new(); private readonly ArrayBuffer<OpenGLVertex> vertices = new();
private readonly ArrayBuffer<int> elements = new(); private readonly ArrayBuffer<int> elements = new();
private GLCheckerTexture _texture; private GLCheckerTexture _texture;
private float[] _viewMatrix = new float[16]; private readonly float[] _viewMatrix = new float[16];
private float[] _projectionMatrix; private readonly float[] _projectionMatrix = new float[16];
private int uniformUseTexture; private int uniformUseTexture;
private int uniformFog; private int uniformFog;
private int uniformFogStart; private int uniformFogStart;
@ -315,9 +315,9 @@ public class ModernOpenGLDraw : IOpenGLDraw
} }
} }
public void ProjectionMatrix(float[] projectionMatrix) public void ProjectionMatrix(ref RcMatrix4x4f projectionMatrix)
{ {
_projectionMatrix = projectionMatrix; projectionMatrix.CopyTo(_projectionMatrix);
} }
public void ViewMatrix(ref RcMatrix4x4f viewMatrix) public void ViewMatrix(ref RcMatrix4x4f viewMatrix)

View File

@ -607,7 +607,7 @@ public class RecastDemo : IRecastDemoChannel
{ {
// Clear the screen // Clear the screen
dd.Clear(); dd.Clear();
projectionMatrix = dd.ProjectionMatrix(50f, (float)width / (float)height, 1.0f, camr); dd.ProjectionMatrix(50f, (float)width / (float)height, 1.0f, camr).CopyTo(projectionMatrix);
dd.ViewMatrix(cameraPos, cameraEulers).CopyTo(modelviewMatrix); dd.ViewMatrix(cameraPos, cameraEulers).CopyTo(modelviewMatrix);
dd.Fog(camr * 0.1f, camr * 1.25f); dd.Fog(camr * 0.1f, camr * 1.25f);

View File

@ -299,7 +299,7 @@ namespace DotRecast.Recast.Toolset.Tools
{ {
var rx = RcMatrix4x4f.CreateFromRotate((float)random.NextDouble() * ax, 1, 0, 0); var rx = RcMatrix4x4f.CreateFromRotate((float)random.NextDouble() * ax, 1, 0, 0);
var ry = RcMatrix4x4f.CreateFromRotate((float)random.NextDouble() * 360, 0, 1, 0); var ry = RcMatrix4x4f.CreateFromRotate((float)random.NextDouble() * 360, 0, 1, 0);
var m = RcMatrix4x4f.Mul(rx, ry); var m = RcMatrix4x4f.Mul(ref rx, ref ry);
float[] verts = new float[geom.vertices.Length]; float[] verts = new float[geom.vertices.Length];
RcVec3f v = new RcVec3f(); RcVec3f v = new RcVec3f();
RcVec3f vr = new RcVec3f(); RcVec3f vr = new RcVec3f();