软件光栅化渲染器一

为了了解光栅化渲染器工作原理及底层实现,准备着手写一个光栅化渲染器。

第一节,我打算先实现所需要的数学库。

mathf.h中主要包含如下数学方法

float radians(float value);
float clamp(float value, float min1 = 0, float max1 = 1);
float lerp(float min, float max, float gradient);
float smoothStep(float min,float max,float x);


vectorf.h中包含vector2和vector3两个结构体,主要实现了:

float Distance(Vector2 &value)const;
float Dot(const Vector2 &value)const;
float Magnitude()const;
Vector2 Normalize()const;
Vector3 Cross(const Vector3 &value)const;
float Distance(Vector3 &value)const;
float Dot(const Vector3 &value)const;
float Magnitude()const;
Vector3 Normalize()const;


并且实现了运算符重载。


matrix.h中实现了Matrix4x4结构体,内部主要是对运算符进行重载。


重点来了,rmathf.h中实现了所有要用到的通用数学运算方法:

float Distance(Vector2 value1, Vector2 value2)
float Dot(const Vector2 &left, const Vector2 &right)
float Magnitude(const Vector2 &value)
Vector2 Lerp(const Vector2 & start, const Vector2 & end, float amount)
Vector2 Normalize(const Vector2 &value)
Vector2 Reflect(Vector2 vector, Vector2 normal)


Vector3 Cross(const Vector3 &left, const Vector3 &right)
float Distance(Vector3 value1, Vector3 value2)
float Dot(const Vector3 &left, const Vector3 &right)
float Magnitude(const Vector3 &value)
Vector3 Normalize(const Vector3 &value)
Vector3 Lerp(const Vector3 & start, const Vector3 & end, float amount)
Vector3 Reflect(Vector3 vector, Vector3 normal)
Vector3 TransformCoordinate(Vector3 &coord, Matrix4x4 &transMat)

Matrix4x4 LookAtRH(Vector3 &cameraPos, Vector3 &target, Vector3 &up)
Matrix4x4 LookAtLH(Vector3 &cameraPos, Vector3 &target, Vector3 &up)
Matrix4x4 Translation(Vector3 &value)
Matrix4x4 PerspectiveFovRH(float fov, float aspect, float znear, float zfar)
Matrix4x4 PerspectiveFovLH(float fov, float aspect, float znear, float zfar)
Matrix4x4 RotationX(float angle)
Matrix4x4 RotationY(float angle)
Matrix4x4 RotationZ(float angle)
Matrix4x4 RotationYawPitchRoll(float yaw, float pitch, float roll)
Matrix4x4 Rotate(Vector3 &rotate)
Matrix4x4 Scale(float x, float y, float z)
Matrix4x4 Scale(Vector3 &scale)


以上再结合c++的数学库可以满足这个demo的基本需求。





github地址:https://github.com/wenshuiqing/Render3D

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章