增加新的ortho/perspective函数
This commit is contained in:
parent
4f47279ed5
commit
215b58de0b
@ -17,8 +17,7 @@
|
|||||||
#include<hgl/math/Math.h>
|
#include<hgl/math/Math.h>
|
||||||
|
|
||||||
#include<fstream>
|
#include<fstream>
|
||||||
#ifdef WIN32
|
#ifndef WIN32
|
||||||
#else
|
|
||||||
#include<unistd.h>
|
#include<unistd.h>
|
||||||
#endif//
|
#endif//
|
||||||
|
|
||||||
@ -88,7 +87,7 @@ vulkan::Buffer *CreateUBO(vulkan::Device *dev,vulkan::Shader *shader)
|
|||||||
{
|
{
|
||||||
const VkExtent2D extent=dev->GetExtent();
|
const VkExtent2D extent=dev->GetExtent();
|
||||||
|
|
||||||
ubo_vs.mvp=ortho2d(extent.width,extent.height);
|
ubo_vs.mvp=ortho(extent.width,extent.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
vulkan::Buffer *ubo=dev->CreateUBO(sizeof(ubo_vs));
|
vulkan::Buffer *ubo=dev->CreateUBO(sizeof(ubo_vs));
|
||||||
@ -106,9 +105,9 @@ vulkan::Buffer *CreateUBO(vulkan::Device *dev,vulkan::Shader *shader)
|
|||||||
|
|
||||||
constexpr float vertex_data[]=
|
constexpr float vertex_data[]=
|
||||||
{
|
{
|
||||||
SCREEN_WIDTH/2,SCREEN_HEIGHT/4,
|
SCREEN_WIDTH*0.5, SCREEN_HEIGHT*0.25,
|
||||||
SCREEN_WIDTH*3/4,SCREEN_HEIGHT*3/4,
|
SCREEN_WIDTH*0.75, SCREEN_HEIGHT*0.75,
|
||||||
SCREEN_WIDTH/4,SCREEN_HEIGHT*3/4
|
SCREEN_WIDTH*0.25, SCREEN_HEIGHT*0.75
|
||||||
};
|
};
|
||||||
constexpr float color_data[]={1,0,0, 0,1,0, 0,0,1 };
|
constexpr float color_data[]={1,0,0, 0,1,0, 0,0,1 };
|
||||||
|
|
||||||
@ -214,6 +213,10 @@ int main(int,char **)
|
|||||||
|
|
||||||
vulkan::PipelineLayout *pl=CreatePipelineLayout(*device,dsl);
|
vulkan::PipelineLayout *pl=CreatePipelineLayout(*device,dsl);
|
||||||
|
|
||||||
|
pc.SetDepthTest(false);
|
||||||
|
pc.SetDepthWrite(false);
|
||||||
|
pc.CloseCullFace();
|
||||||
|
|
||||||
pc.Set(shader);
|
pc.Set(shader);
|
||||||
pc.Set(vi);
|
pc.Set(vi);
|
||||||
pc.Set(PRIM_TRIANGLES);
|
pc.Set(PRIM_TRIANGLES);
|
||||||
|
@ -119,21 +119,59 @@ namespace hgl
|
|||||||
return m.Inverted();
|
return m.Inverted();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline Matrix4f ortho( float left_plane,
|
||||||
|
float right_plane,
|
||||||
|
float bottom_plane,
|
||||||
|
float top_plane,
|
||||||
|
float near_plane,
|
||||||
|
float far_plane )
|
||||||
|
{
|
||||||
|
Matrix4f orthographic_projection_matrix =
|
||||||
|
{
|
||||||
|
2.0f / (right_plane - left_plane),0.0f,0.0f,-(right_plane + left_plane) / (right_plane - left_plane),
|
||||||
|
0.0f,2.0f / (bottom_plane - top_plane),0.0f,-(bottom_plane + top_plane) / (bottom_plane - top_plane),
|
||||||
|
0.0f,0.0f,1.0f / (near_plane - far_plane),near_plane / (near_plane - far_plane),
|
||||||
|
0.0f,0.0f,0.0f,1.0f
|
||||||
|
};
|
||||||
|
|
||||||
|
return orthographic_projection_matrix;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 生成一个2D正角视图矩阵
|
* 生成一个2D正角视图矩阵
|
||||||
* @param width 宽
|
* @param width 宽
|
||||||
* @param height 高
|
* @param height 高
|
||||||
* @param top_to_bottom 从上到下(是否最顶部y轴为0,默认否)
|
|
||||||
* @param znear 近平面z值
|
* @param znear 近平面z值
|
||||||
* @param zfar 远平台z值
|
* @param zfar 远平台z值
|
||||||
*/
|
*/
|
||||||
inline Matrix4f ortho2d(float width,float height,bool top_to_bottom=false,float znear=0,float zfar=1)
|
inline Matrix4f ortho(float width,float height,float znear=0,float zfar=1)
|
||||||
{
|
{
|
||||||
//MathGeoLib生成的2D正交矩阵中心是0,0,所以需要偏移
|
Matrix4f orthographic_projection_matrix =
|
||||||
|
{
|
||||||
|
2.0f / width, 0.0f, 0.0f, -1,
|
||||||
|
0.0f, 2.0f / height, 0.0f, -1,
|
||||||
|
0.0f, 0.0f, 1.0f / (znear - zfar), znear / (znear - zfar),
|
||||||
|
0.0f, 0.0f, 0.0f, 1.0f
|
||||||
|
};
|
||||||
|
|
||||||
return Matrix4f::OpenGLOrthoProjRH(znear,zfar,width,height)
|
return orthographic_projection_matrix;
|
||||||
*Matrix4f::Scale(1,top_to_bottom?-1:1,1)
|
}
|
||||||
*Matrix4f::Translate(-(width/2.0f),-(height/2.0f),0);
|
|
||||||
|
inline Matrix4f perspective(float aspect_ratio,
|
||||||
|
float field_of_view,
|
||||||
|
float near_plane,
|
||||||
|
float far_plane )
|
||||||
|
{
|
||||||
|
const float f = 1.0f / tan( hgl_ang2rad( 0.5f * field_of_view ) );
|
||||||
|
|
||||||
|
Matrix4f perspective_projection_matrix =
|
||||||
|
{
|
||||||
|
f / aspect_ratio, 0.0f, 0.0f, 0.0f,
|
||||||
|
0.0f, -f, 0.0f, 0.0f,
|
||||||
|
0.0f, 0.0f, far_plane / (near_plane - far_plane), (near_plane * far_plane) / (near_plane - far_plane),
|
||||||
|
0.0f, 0.0f, -1.0f, 0.0f
|
||||||
|
};
|
||||||
|
|
||||||
|
return perspective_projection_matrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Matrix4f translate(const Vector3f &v)
|
inline Matrix4f translate(const Vector3f &v)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user