123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /*
- * 3D Engine
- * matrice.c:
- * Based on pikuma.com 3D software renderer in C
- * Copyright (c) 2021 986-Studio. All rights reserved.
- *
- * Created by Manoël Trapier on 06/03/2021.
- */
- #include <math.h>
- #include <matrix.h>
- /* Matrix operations */
- vec4_t mat4ProdVec4(matrix4_t mat, vec4_t v)
- {
- vec4_t ret =
- {
- .x = FastGet4(mat, 0, 0) * v.x +
- FastGet4(mat, 0, 1) * v.y +
- FastGet4(mat, 0, 2) * v.z +
- FastGet4(mat, 0, 3) * v.w,
- .y = FastGet4(mat, 1, 0) * v.x +
- FastGet4(mat, 1, 1) * v.y +
- FastGet4(mat, 1, 2) * v.z +
- FastGet4(mat, 1, 3) * v.w,
- .z = FastGet4(mat, 2, 0) * v.x +
- FastGet4(mat, 2, 1) * v.y +
- FastGet4(mat, 2, 2) * v.z +
- FastGet4(mat, 2, 3) * v.w,
- .w = FastGet4(mat, 3, 0) * v.x +
- FastGet4(mat, 3, 1) * v.y +
- FastGet4(mat, 3, 2) * v.z +
- FastGet4(mat, 3, 3) * v.w,
- };
- return ret;
- }
- /* Matrix creations */
- matrix4_t mat4Scale(double scaleX, double scaleY, double scaleZ)
- {
- matrix4_t ret = {
- scaleX, 0, 0,0,
- 0, scaleY, 0, 0,
- 0, 0, scaleZ, 0,
- 0, 0, 0, 1
- };
- return ret;
- }
- matrix4_t mat4Translate(double tX, double tY, double tZ)
- {
- matrix4_t ret = {
- 1, 0, 0, tX,
- 0, 1, 0, tY,
- 0, 0, 1, tZ,
- 0, 0, 0, 1
- };
- return ret;
- }
- matrix4_t mat4RotationX(double angle)
- {
- matrix4_t ret = {
- 1, 0, 0, 0,
- 0, cos(angle), -sin(angle), 0,
- 0, sin(angle), cos(angle), 0,
- 0, 0, 0, 1
- };
- return ret;
- }
- matrix4_t mat4RotationY(double angle)
- {
- matrix4_t ret = {
- cos(angle), 0, sin(angle), 0,
- 0, 1, 0, 0,
- -sin(angle), 0, cos(angle), 0,
- 0, 0, 0, 1
- };
- return ret;
- }
- matrix4_t mat4RotationZ(double angle)
- {
- matrix4_t ret = {
- cos(angle), -sin(angle), 0, 0,
- sin(angle), cos(angle), 0, 0,
- 0, 0, 1, 0,
- 0, 0, 0, 1
- };
- return ret;
- }
|