daily update on 20240413 by nitload youmu, camera complete

This commit is contained in:
YoumuLiu
2024-04-13 04:04:14 +08:00
parent f0f80f72f1
commit 7c755fe1e2
99 changed files with 1351 additions and 1119 deletions
+66 -19
View File
@@ -76,7 +76,7 @@ namespace StgSharp.Graphic
return _lookAt;
}
Matrix44 move = Matrix44.Unit;
move.Colum3.vec -= cameraCoord.vec;
move.colum3.vec -= cameraCoord.vec;
_lookAt = cameraAtt.Transpose * move;
_isLookAtAvailable = true;
return _lookAt;
@@ -112,13 +112,13 @@ namespace StgSharp.Graphic
width = Scaler.Abs(GeometryScaler.Tan(fovRadius / 2) * near *2),
height = width * size.Y / size.X;
_projection.Colum0.X = 2 * near / width;
_projection.Colum1.Y = 2 * near / height;
_projection.Colum2.X = 2 * offsetX / width;
_projection.Colum2.Y = 2 * offsetY / height;
_projection.Colum2.Z = (far + near) / (near - far);
_projection.Colum2.W = -1;
_projection.Colum3.Z = 2 * near * far / (near - far);
_projection.colum0.X = 2 * near / width;
_projection.colum1.Y = 2 * near / height;
_projection.colum2.X = 2 * offsetX / width;
_projection.colum2.Y = 2 * offsetY / height;
_projection.colum2.Z = (far + near) / (near - far);
_projection.colum2.W = -1;
_projection.colum3.Z = 2 * near * far / (near - far);
}
@@ -135,24 +135,71 @@ namespace StgSharp.Graphic
public void Pitch(Radius r)
{
_isLookAtAvailable = false;
Matrix32 partialCoord = new Matrix32(
cameraAtt.Colum1.vec,
cameraAtt.Colum2.vec
cameraAtt.colum1.vec,
cameraAtt.colum2.vec
);
float angle = -r._radius;
Console.WriteLine(angle);
Matrix22 rotation = new Matrix22(
GeometryScaler.Cos(r), -GeometryScaler.Sin(r),
GeometryScaler.Sin(r), -GeometryScaler.Cos(r)
Scaler.Cos(angle), -Scaler.Sin(angle),
Scaler.Sin(angle), Scaler.Cos( angle)
);
partialCoord *= rotation;
cameraAtt.Colum1.vec = partialCoord.colum0.vec;
cameraAtt.Colum2.vec = partialCoord.colum1.vec;
cameraAtt.colum1.vec = partialCoord.colum0.vec;
cameraAtt.colum2.vec = partialCoord.colum1.vec;
cameraAtt.isTransposed = false;
}
public void Row(Radius r)
{
_isLookAtAvailable = false;
Matrix32 partialCoord = new Matrix32(
cameraAtt.colum0.vec,
cameraAtt.colum1.vec
);
float angle = -r._radius;
Console.WriteLine(angle);
Matrix22 rotation = new Matrix22(
Scaler.Cos(angle), -Scaler.Sin(angle),
Scaler.Sin(angle), Scaler.Cos(angle)
);
partialCoord *= rotation;
cameraAtt.colum0.vec = partialCoord.colum0.vec;
cameraAtt.colum1.vec = partialCoord.colum1.vec;
cameraAtt.isTransposed = false;
}
public void Yaw(Radius r)
{
_isLookAtAvailable = false;
Matrix32 partialCoord = new Matrix32(
cameraAtt.colum0.vec,
cameraAtt.colum2.vec
);
float angle = -r._radius;
Console.WriteLine(angle);
Matrix22 rotation = new Matrix22(
Scaler.Cos(angle), -Scaler.Sin(angle),
Scaler.Sin(angle), Scaler.Cos(angle)
);
partialCoord *= rotation;
cameraAtt.colum0.vec = partialCoord.colum0.vec;
cameraAtt.colum2.vec = partialCoord.colum1.vec;
cameraAtt.isTransposed = false;
}
public void SetViewDirection(vec3d position, vec3d target, vec3d up)
{
vec3d direction = position - target;
if (position == cameraCoord && this.up == up && cameraAtt.Colum2.vec == direction.vec)
if (position == cameraCoord && this.up == up && cameraAtt.colum2.vec == direction.vec)
{
//no difference with precious value
return;
@@ -176,10 +223,10 @@ namespace StgSharp.Graphic
vec3d right = Linear.Normalize(Linear.Cross(up,direction));
cameraAtt.Colum0.vec = right.vec;
cameraAtt.Colum1.vec = up.vec;
cameraAtt.Colum2.vec = direction.vec;
cameraAtt.colum0.vec = right.vec;
cameraAtt.colum1.vec = up.vec;
cameraAtt.colum2.vec = direction.vec;
cameraAtt.isTransposed = false;
}
public void DisplayGLtypeDefinition()