軟件光柵化渲染器一

爲了瞭解光柵化渲染器工作原理及底層實現,準備着手寫一個光柵化渲染器。

第一節,我打算先實現所需要的數學庫。

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

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