软件光栅化渲染器一

来源:互联网 发布:淘宝商家申请 编辑:程序博客网 时间:2024/05/02 14:43
为了了解光栅化渲染器工作原理及底层实现,准备着手写一个光栅化渲染器。

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

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

原创粉丝点击