2020-11-19 18:25:20 +08:00
|
|
|
#include<hgl/math/Matrix.h>
|
|
|
|
|
|
|
|
// Vulkan Cookbook
|
|
|
|
// ISBN: 9781786468154
|
|
|
|
// Packt Publishing Limited
|
2021-09-24 20:36:41 +08:00
|
|
|
// git: https://github.com/PacktPublishing/Vulkan-Cookbook.git
|
2020-11-19 18:25:20 +08:00
|
|
|
//
|
|
|
|
// Author: Pawel Lapinski
|
|
|
|
// LinkedIn: https://www.linkedin.com/in/pawel-lapinski-84522329
|
|
|
|
//
|
|
|
|
// Chapter: 10 Helper Recipes
|
|
|
|
// Recipe: 04 Preparing a perspective projection matrix
|
|
|
|
// Recipe: 05 Preparing an orthographic projection matrix
|
|
|
|
|
|
|
|
namespace hgl
|
|
|
|
{
|
|
|
|
Matrix4f ortho( float left,
|
|
|
|
float right,
|
|
|
|
float bottom,
|
|
|
|
float top,
|
|
|
|
float znear,
|
|
|
|
float zfar )
|
|
|
|
{
|
|
|
|
return Matrix4f(
|
2021-09-24 20:36:41 +08:00
|
|
|
2.0f / (right - left),
|
|
|
|
0.0f,
|
|
|
|
0.0f,
|
|
|
|
0.0f,
|
|
|
|
|
|
|
|
0.0f,
|
|
|
|
2.0f / (bottom - top),
|
|
|
|
0.0f,
|
|
|
|
0.0f,
|
|
|
|
|
|
|
|
0.0f,
|
|
|
|
0.0f,
|
|
|
|
1.0f / (znear - zfar),
|
|
|
|
0.0f,
|
|
|
|
|
|
|
|
-(right + left) / (right - left),
|
|
|
|
-(bottom + top) / (bottom - top),
|
|
|
|
znear / (znear - zfar),
|
|
|
|
1.0f
|
|
|
|
);
|
2020-11-19 18:25:20 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 生成一个正角视图矩阵
|
|
|
|
* @param width 宽
|
|
|
|
* @param height 高
|
|
|
|
* @param znear 近平面z值
|
|
|
|
* @param zfar 远平台z值
|
|
|
|
*/
|
|
|
|
Matrix4f ortho(float width,float height,float znear,float zfar)
|
2021-09-24 20:36:41 +08:00
|
|
|
{
|
|
|
|
return ortho(0.0f,width,height,0.0f,znear,zfar);
|
2020-11-19 18:25:20 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 生成一个正角视图矩阵
|
|
|
|
* @param width 宽
|
|
|
|
* @param height 高
|
|
|
|
*/
|
|
|
|
Matrix4f ortho(float width,float height)
|
2021-09-24 20:36:41 +08:00
|
|
|
{
|
|
|
|
return ortho(width,height,0.0f,1.0f);
|
2020-11-19 18:25:20 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 生成一个透视矩阵
|
|
|
|
* @param aspect_ratio 宽高比
|
|
|
|
* @param field_of_view 视野
|
|
|
|
* @param znear 近截面
|
|
|
|
* @param zfar 远截面
|
|
|
|
*/
|
|
|
|
Matrix4f perspective( float field_of_view,
|
|
|
|
float aspect_ratio,
|
|
|
|
float znear,
|
|
|
|
float zfar)
|
|
|
|
{
|
2023-10-31 16:12:40 +08:00
|
|
|
float f = 1.0f / tanf( deg2rad( 0.5f * field_of_view ) );
|
2021-09-26 20:48:34 +08:00
|
|
|
|
2020-11-19 18:25:20 +08:00
|
|
|
return Matrix4f(
|
2021-09-26 20:48:34 +08:00
|
|
|
f / aspect_ratio,
|
2021-09-24 20:36:41 +08:00
|
|
|
0.0f,
|
|
|
|
0.0f,
|
|
|
|
0.0f,
|
|
|
|
|
|
|
|
0.0f,
|
2021-09-26 20:48:34 +08:00
|
|
|
-f,
|
2021-09-24 20:36:41 +08:00
|
|
|
0.0f,
|
|
|
|
0.0f,
|
|
|
|
|
|
|
|
0.0f,
|
|
|
|
0.0f,
|
|
|
|
zfar / (znear - zfar),
|
|
|
|
-1.0f,
|
|
|
|
|
|
|
|
0.0f,
|
|
|
|
0.0f,
|
|
|
|
(znear * zfar) / (znear - zfar),
|
|
|
|
0.0f
|
|
|
|
);
|
2020-11-19 18:25:20 +08:00
|
|
|
}
|
|
|
|
}//namespace hgl
|