mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-10 14:51:46 +00:00
- Fix model projection matrix
This commit is contained in:
parent
7f25913b2d
commit
b1355d472c
2 changed files with 11 additions and 7 deletions
|
@ -62,7 +62,7 @@ namespace swrenderer
|
||||||
void RenderViewport::SetupPolyViewport(RenderThread *thread)
|
void RenderViewport::SetupPolyViewport(RenderThread *thread)
|
||||||
{
|
{
|
||||||
WorldToView = SoftwareWorldToView(viewpoint);
|
WorldToView = SoftwareWorldToView(viewpoint);
|
||||||
ViewToClip = SoftwareViewToClip(viewwindow.FocalTangent, CenterY, YaspectMul);
|
ViewToClip = SoftwareViewToClip();
|
||||||
WorldToClip = ViewToClip * WorldToView;
|
WorldToClip = ViewToClip * WorldToView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,14 +78,17 @@ namespace swrenderer
|
||||||
return m * Mat4f::Translate((float)-viewpoint.Pos.X, (float)-viewpoint.Pos.Y, (float)-viewpoint.Pos.Z);
|
return m * Mat4f::Translate((float)-viewpoint.Pos.X, (float)-viewpoint.Pos.Y, (float)-viewpoint.Pos.Z);
|
||||||
}
|
}
|
||||||
|
|
||||||
Mat4f RenderViewport::SoftwareViewToClip(double focalTangent, double centerY, double YaspectMul)
|
Mat4f RenderViewport::SoftwareViewToClip()
|
||||||
{
|
{
|
||||||
float near = 5.0f;
|
float near = 5.0f;
|
||||||
float far = 65536.0f;
|
float far = 65536.0f;
|
||||||
float width = (float)(focalTangent * near);
|
float width = CenterX / FocalLengthX;
|
||||||
float top = (float)(centerY / viewheight * YaspectMul * near);
|
float height = viewheight * 0.5 / FocalLengthY;
|
||||||
float bottom = (float)(top - YaspectMul * near);
|
float offset = CenterY / FocalLengthY - height;
|
||||||
return Mat4f::Frustum(-width, width, bottom, top, near, far, Handedness::Right, ClipZRange::NegativePositiveW);
|
width *= near;
|
||||||
|
height *= near;
|
||||||
|
offset *= near;
|
||||||
|
return Mat4f::Frustum(-width, width, -height + offset, height + offset, near, far, Handedness::Right, ClipZRange::NegativePositiveW);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderViewport::SetViewport(RenderThread *thread, int fullWidth, int fullHeight, float trueratio)
|
void RenderViewport::SetViewport(RenderThread *thread, int fullWidth, int fullHeight, float trueratio)
|
||||||
|
|
|
@ -84,6 +84,7 @@ namespace swrenderer
|
||||||
void SetupBuffer();
|
void SetupBuffer();
|
||||||
|
|
||||||
static Mat4f SoftwareWorldToView(const FRenderViewpoint &viewpoint);
|
static Mat4f SoftwareWorldToView(const FRenderViewpoint &viewpoint);
|
||||||
static Mat4f SoftwareViewToClip(double focalTangent, double centerY, double YaspectMul);
|
|
||||||
|
Mat4f SoftwareViewToClip();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue