MATHC는 2D 및 3D 프로그래밍을 위한 간단한 수학 라이브러리입니다.
라이브러리 테스트, 범위 내 수학 함수 전송, 오류 보고 및 피드백 제공과 같은 MATHC 개발에 도움을 줄 수 있습니다.
요즘에는 도서관에서 거의 일하지 않지만 항상 제안과 기여에 열려 있습니다.
버전 2부터 MATHC 개발에서는 각 안정 릴리스에 대해 YYYY.MM.DD.MICRO
태그가 포함된 캘린더 버전 관리를 사용합니다. 릴리스가 이전 버전과의 호환성을 깨뜨릴 경우 릴리스 노트에 언급됩니다.
MATHC는 다음 전처리기를 사용하여 구성할 수 있습니다.
MATHC_NO_INT
: mint_t
사용하여 구현을 비활성화합니다.MATHC_USE_INT8
: mint_t
int8_t
로 정의합니다.MATHC_USE_INT16
: mint_t
int16_t
로 정의합니다.MATHC_USE_INT32
: mint_t
int32_t
로 정의합니다. 이것이 기본값입니다.MATHC_USE_INT64
: mint_t
int64_t
로 정의합니다.MATHC_INT_TYPE
: mint_t
에 대한 사용자 정의 유형을 설정합니다.MATHC_NO_FLOATING_POINT
: mfloat_t
사용하여 구현을 비활성화합니다.MATHC_USE_SINGLE_FLOATING_POINT
: mfloat_t
float
로 정의합니다. 이것이 기본값입니다.MATHC_USE_DOUBLE_FLOATING_POINT
: mfloat_t
double
로 정의합니다.MATHC_FLOATING_POINT_TYPE
: mfloat_t
에 대한 사용자 정의 유형을 설정합니다.MATHC_USE_UNIONS
: 구조체 내부에 익명 공용체를 정의합니다.MATHC_NO_POINTER_STRUCT_FUNCTIONS
: 구조에 대한 포인터를 사용하는 함수를 정의하지 마세요.MATHC_NO_STRUCT_FUNCTIONS
: 구조를 값으로 취하는 함수를 정의하지 마세요.MATHC_NO_EASING_FUNCTIONS
: 여유 함수를 정의하지 않습니다. 컴파일러 옵션 -D
사용하거나 컴파일러 옵션 -include
사용하여 내부에 구성 전처리기가 있는 구성 헤더를 포함하도록 이러한 전처리기를 정의할 수 있습니다.
mint_t
를 int16_t
로, mfloat_t
GLfloat
만들고 이중 부동 소수점 정밀도로 표준 수학 함수를 사용하는 구성 헤더의 예:
#include
#define MATHC_USE_INT16
#define MATHC_FLOATING_POINT_TYPE GLfloat
#define MATHC_USE_DOUBLE_FLOATING_POINT
기본적으로 벡터, 쿼터니언 및 행렬은 mint_t
배열, mfloat_t
배열 또는 구조체로 선언될 수 있습니다.
기본적으로 MATHC에는 mint_t
배열, mfloat_t
배열, 구조체 값 또는 구조체에 대한 포인터를 인수로 사용하는 함수가 있습니다. 구조를 값으로 취하는 함수에는 접두사 s
있습니다. 구조 포인터를 사용하는 함수에는 ps
접두사가 있습니다.
easing 함수는 easings.net에 제시된 함수를 구현한 것으로, 특히 애니메이션에 유용합니다.
완화 함수는 0.0-1.0
범위 내의 값을 사용하며 일반적으로 동일한 범위 내의 값을 반환합니다.
3D 프로그래밍에 유용한 "보기" 뷰 매트릭스 만들기:
mfloat_t position [ VEC3_SIZE ];
mfloat_t target [ VEC3_SIZE ];
mfloat_t up [ VEC3_SIZE ];
mfloat_t view [ MAT4_SIZE ];
mat4_look_at ( view ,
vec3 ( position , 0.0 , 0.0 , 10.0 ),
vec3 ( target , 0.0 , 0.0 , 0.0 ),
vec3 ( up , 0.0 , 1.0 , 0.0 ));
원근 투영 행렬 만들기:
mfloat_t perspective [ MAT4_SIZE ];
mat4_perspective ( perspective , to_radians ( 60.0 ), 1.0 , 0.1 , 100.0 );
모델 매트릭스 만들기:
mfloat_t position [ VEC3_SIZE ];
mfloat_t scaling [ VEC3_SIZE ];
struct {
mfloat_t position [ MAT4_SIZE ];
mfloat_t rotation [ MAT4_SIZE ];
mfloat_t scaling [ MAT4_SIZE ];
mfloat_t model [ MAT4_SIZE ];
} matrices ;
/* Position */
mat4_identity ( matrices . position );
mat4_translation ( matrices . position ,
vec3 ( position , 0.0 , 0.0 , 0.0 ));
/* Rotation */
mat4_identity ( matrices . rotation );
mat4_rotation_x ( matrices . rotation , to_radians ( 30.0 ));
/* Scaling */
mat4_identity ( matrices . scaling );
mat4_translation ( matrices . scaling ,
vec3 ( scaling , 1.0 , 1.0 , 1.0 ));
/* Model matrix */
mat4_multiply ( matrices . model , matrices . scaling , matrices . rotation );
mat4_multiply ( matrices . model , matrices . position , matrices . model );
저작권 © 2018 펠리페 페레이라 다 실바
이 소프트웨어는 명시적이거나 묵시적인 보증 없이 '있는 그대로' 제공됩니다. 어떠한 경우에도 작성자는 이 소프트웨어의 사용으로 인해 발생하는 손해에 대해 책임을 지지 않습니다.
다음 제한 사항에 따라 누구나 이 소프트웨어를 상업용 응용 프로그램을 포함하여 어떤 목적으로든 사용하고 자유롭게 변경하고 재배포할 수 있는 권한이 부여됩니다.