forked from mirror/DotRecast
remove float[16]
This commit is contained in:
parent
5ac225a712
commit
13d035e815
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in New Issue