mirror of
https://github.com/rvtr/ntr_bootrom.git
synced 2025-10-31 07:11:11 -04:00
242 lines
7.4 KiB
C
242 lines
7.4 KiB
C
//======================================================================
|
||
// IrisVEC.h
|
||
// ベクトルライブラリ
|
||
//
|
||
// Copyright (C) 2002-2003 NINTENDO Co.,Ltd.
|
||
//======================================================================
|
||
#ifndef _IRIS_VEC_H
|
||
#define _IRIS_VEC_H
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
|
||
#include <IrisTarget.h>
|
||
#include <IrisTypes.h>
|
||
|
||
|
||
//----------------------------------------------------------------------
|
||
// ベクトルのコピー
|
||
//
|
||
//・各ベクトル間でサイズに合わせてコピーします。
|
||
//・VEC_AlignPoint2Vec10() / VEC10_AlignPoint2Vec() は16bitベクトルと
|
||
// 10bitベクトル間での固定小数点位置の調整も行います。
|
||
//
|
||
//・引数:
|
||
// srcp 転送元ベクトルのポインタ
|
||
// dstp 転送先ベクトルバッファのポインタ
|
||
//
|
||
//・戻り値:なし
|
||
//----------------------------------------------------------------------
|
||
|
||
void VEC_Copy2Vec10(const Vec *srcp, Vec10 *dstp);
|
||
void VEC_Copy2Vec32(const Vec *srcp, Vec32 *dstp);
|
||
void VEC32_Copy2Vec(const Vec32 *srcp, Vec *dstp);
|
||
|
||
void VEC_AlignPoint2Vec10(const Vec *srcp, Vec10 *dstp);
|
||
void VEC10_AlignPoint2Vec(const Vec10 *srcp, Vec *dstp);
|
||
|
||
//----------------------------------------------------------------------
|
||
// ベクトルの内積
|
||
//
|
||
//・2つのベクトルの内積を求めます。
|
||
//
|
||
//・引数:
|
||
// a 第1ベクトルのポインタ
|
||
// b 第2ベクトルのポインタ
|
||
//
|
||
//・戻り値:内積
|
||
//----------------------------------------------------------------------
|
||
|
||
s32 VEC_DotProduct( const Vec *a, const Vec *b);
|
||
s32 VEC32_DotProduct( const Vec32 *a, const Vec32 *b);
|
||
s32 VEC32_DotProductFast(const Vec32 *a, const Vec32 *b);
|
||
s32 VEC32VEC_DotProduct( const Vec32 *a, const Vec *b);
|
||
#define VEC2D_DotProduct(ax, ay, bx, by) (((ax) * (bx) + (ay) * (by)) >>V_SFT)
|
||
|
||
//----------------------------------------------------------------------
|
||
// ベクトルの外積
|
||
//
|
||
//・2つのベクトルの外積ベクトルを求め、axbが指すベクトルへ格納します。
|
||
//
|
||
//・引数:
|
||
// a 第1ベクトルのポインタ
|
||
// b 第2ベクトルのポインタ
|
||
// axb 外積ベクトル格納バッファのポインタ
|
||
//
|
||
//・戻り値:なし
|
||
//----------------------------------------------------------------------
|
||
|
||
void VEC_CrossProduct( Vec *a, Vec *b, Vec *axb);
|
||
void VEC32_CrossProduct( Vec32 *a, Vec32 *b, Vec32 *axb);
|
||
void VEC32_CrossProductFast(Vec32 *a, Vec32 *b, Vec32 *axb);
|
||
#define VEC2D_CrossProduct(ax, ay, bx, by) (((ax) * (by) - (ay) * (bx)) >>V_SFT)
|
||
|
||
//----------------------------------------------------------------------
|
||
// ベクトルの正規化
|
||
//
|
||
//・srcpが指すベクトルを正規化してdstpが指すベクトルへ格納します。
|
||
//
|
||
//・引数:
|
||
// srcp 未正規化ベクトルのポインタ
|
||
// dstp 正規化ベクトル格納バッファのポインタ
|
||
//
|
||
//・戻り値:なし
|
||
//
|
||
//※通常版は平方根演算器と除算器を使用するため、TCM上で実行したとしても
|
||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||
// ストールしてしまいます。
|
||
//----------------------------------------------------------------------
|
||
|
||
void VEC_Normalize( Vec *srcp, Vec *dstp);
|
||
void VEC32_Normalize( Vec32 *srcp, Vec32 *dstp);
|
||
void VEC32_Normalize2Vec(Vec32 *srcp, Vec *dstp);
|
||
|
||
//----------------------------------------------------------------------
|
||
// ベクトルの加算
|
||
//
|
||
//・2つのベクトルを加算した結果をa_bが指すベクトルへ格納します。
|
||
//
|
||
//・引数:
|
||
// a 第1ベクトルのポインタ
|
||
// b 第2ベクトルのポインタ
|
||
// a_b 加算後のベクトル格納バッファのポインタ
|
||
//
|
||
//・戻り値:なし
|
||
//----------------------------------------------------------------------
|
||
|
||
void VEC_Add(Vec *a, Vec *b, Vec *ab);
|
||
|
||
//----------------------------------------------------------------------
|
||
// ベクトルの減算
|
||
//
|
||
//・2つのベクトルを減算した結果をa_bが指すベクトルへ格納します。
|
||
//
|
||
//・引数:
|
||
// a 第1ベクトルのポインタ
|
||
// b 第2ベクトルのポインタ
|
||
// a_b 減算後のベクトル格納バッファのポインタ
|
||
//
|
||
//・戻り値:なし
|
||
//----------------------------------------------------------------------
|
||
|
||
void VEC_Sub(Vec *a, Vec *b, Vec *a_b);
|
||
|
||
//----------------------------------------------------------------------
|
||
// ベクトルのスケーリング
|
||
//
|
||
//・srcpが指すベクトルをスケーリングした結果をdstpが指すベクトルへ格納します。
|
||
//
|
||
//・引数:
|
||
// srcp スケーリング前のベクトルのポインタ
|
||
// dstp スケーリング後のベクトル格納バッファのポインタ
|
||
// scale スケーリングパラメータ
|
||
//
|
||
//・戻り値:なし
|
||
//----------------------------------------------------------------------
|
||
|
||
void VEC_Scale(Vec *srcp, Vec *dstp, s32 scale);
|
||
|
||
//----------------------------------------------------------------------
|
||
// ベクトルの反転
|
||
//
|
||
//・srcpが指すベクトルを反転した結果をdstpが指すベクトルへ格納します。
|
||
//
|
||
//・引数:
|
||
// srcp 反転前のベクトルのポインタ
|
||
// dstp 反転後のベクトル格納バッファのポインタ
|
||
//
|
||
//・戻り値:なし
|
||
//----------------------------------------------------------------------
|
||
|
||
void VEC_Reverse(const Vec *srcp, Vec *dstp);
|
||
|
||
//----------------------------------------------------------------------
|
||
// ベクトルの大きさ
|
||
//
|
||
//・ベクトルの大きさを求めます。
|
||
//
|
||
//・引数:
|
||
// v 入力ベクトルのポインタ
|
||
//
|
||
//・戻り値:大きさ
|
||
//
|
||
//※平方根演算器を使用するため、TCM上で実行したとしても
|
||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||
// ストールしてしまいます。
|
||
//----------------------------------------------------------------------
|
||
|
||
u32 VEC_Magnitude(const Vec *v);
|
||
|
||
//----------------------------------------------------------------------
|
||
// ベクトルの大きさの2乗
|
||
//
|
||
//・ベクトルの大きさの2乗を求めます。
|
||
//
|
||
//・引数:
|
||
// v 入力ベクトルのポインタ
|
||
//
|
||
//・戻り値:大きさの2乗
|
||
//----------------------------------------------------------------------
|
||
|
||
u32 VEC_SquareMagnitude(const Vec *v);
|
||
|
||
//----------------------------------------------------------------------
|
||
// ベクトル間の距離
|
||
//
|
||
//・ベクトル間の距離を求めます。
|
||
//
|
||
//・引数:
|
||
// a 第1ベクトルのポインタ
|
||
// b 第2ベクトルのポインタ
|
||
//
|
||
//・戻り値:距離
|
||
//
|
||
//※平方根演算器を使用するため、TCM上で実行したとしても
|
||
// ディスプレイリスト等のDMA転送とシステムバス上で衝突した場合には
|
||
// ストールしてしまいます。
|
||
//----------------------------------------------------------------------
|
||
|
||
u32 VEC_Distance(const Vec *a, const Vec *b);
|
||
|
||
//----------------------------------------------------------------------
|
||
// ベクトル間の距離の2乗
|
||
//
|
||
//・ベクトル間の距離の2乗を求めます。
|
||
//
|
||
//・引数:
|
||
// a 第1ベクトルのポインタ
|
||
// b 第2ベクトルのポインタ
|
||
//
|
||
//・戻り値:距離の2乗
|
||
//----------------------------------------------------------------------
|
||
|
||
u32 VEC_SquareDistance(const Vec *a, const Vec *b);
|
||
|
||
//----------------------------------------------------------------------
|
||
// ベクトルの線形補間
|
||
//
|
||
//・2つのベクトルを線形補間した結果をdが指すベクトルへ格納します。
|
||
//
|
||
//・引数:
|
||
// a 第1ベクトルのポインタ
|
||
// b 第2ベクトルのポインタ
|
||
// d 補間ベクトル格納バッファのポインタ
|
||
// t 補間パラメータ
|
||
//
|
||
//・戻り値:なし
|
||
//----------------------------------------------------------------------
|
||
|
||
void VEC_Lerp(Vec *a, Vec *b, Vec *d, s32 t);
|
||
void VEC32_Lerp(Vec32 *a, Vec32 *b, Vec32 *d, s32 t);
|
||
void VEC32_LerpFast(Vec32 *a, Vec32 *b, Vec32 *d, s32 t);
|
||
|
||
|
||
|
||
#ifdef __cplusplus
|
||
} // extern "C"
|
||
#endif
|
||
|
||
#endif // _IRIS_VEC_H
|