#include "sgl.h" ANGLE ang; FIXED slSin( ang )
ANGLE ang - 角度。
FIXED - 与えた角度に対する正弦値。
指定された角度に対する、サインを返します。値としては 0xffff0000 〜 0x00010000 の値になります。
角度データは 下位の4ビットを捨て、0x0000 〜 0xfff0 に 変換されるため、 精度はやや落ちます(以下角度を使用するものは同様の制限を受けます)。
slCos |
slTan |
slAtan |
slSquart |
slSquartFX |
slMulFX |
slDivFX |
#include "sgl.h" ANGLE ang; FIXED slCos( ang )
ANGLE ang - 角度。
FIXED - 与えた角度に対する余弦値。
指定された角度に対するコサインを返します。値としては 0xffff0000 〜 0x00010000 の値です。
slSin |
slTan |
slAtan |
slSquart |
slSquartFX |
slMulFX |
slDivFX |
#include "sgl.h" ANGLE ang; FIXED slTan( ang )
ANGLE ang - 角度。
FIXED - 与えた角度に対する正接値。
指定された角度に対する、タンジェントを返します。
90度付近ではタンジェントの値が大き過ぎるため、精度は期待できません。
slSin |
slCos |
slAtan |
slSquart |
slSquartFX |
slMulFX |
slDivFX |
#include "sgl.h" FIXED x_pos, y_pos; ANGLE slAtan( x_pos, y_pos )
FIXED x_pos - X座標値 FIXED y_pos - Y座標値
FIXED - 与えたベクトルに対する逆正接値。
指定された方向の角度を返します。
slSin |
slCos |
slTan |
slSquart |
slSquartFX |
slMulFX |
slDivFX |
#include "sgl.h" Uint32 val; Uint16 slSquart( val )
Uint32 val - 値。
Uint16 与えた値の平方根値の小数以下を切り捨てた値。
符号無し整数の平方根を算出します。
slSin |
slCos |
slTan |
slAtan |
slSquartFX |
slMulFX |
slDivFX |
#include "sgl.h" FIXED val; FIXED slSquartFX( val )
FIXED val - 値。
FIXED 与えた値の平方根値。
符号無し固定小数点数の平方根を算出します。
整数として演算しているため、結果の精度は8ビット整数、8ビット小数と なります。
slSin |
slCos |
slTan |
slAtan |
slSquart |
slMulFX |
slDivFX |
#include "sgl.h" FIXED val_a, val_b; FIXED slMulFX( val_a, val_b )
FIXED val_a, val_b - かけ算に使用する固定小数値。
FIXED - 引数に与えた2数を掛けた結果。
固定小数同士の掛け算をし、結果を返します。
slSin |
slCos |
slTan |
slAtan |
slSquart |
slSquartFX |
slDivFX |
#include "sgl.h" FIXED val_a, val_b; FIXED slDivFX( val_a, val_b )
FIXED val_a, val_b - 割算に使用する固定小数値。
FIXED - 引数に与えた2数を割った結果。
固定小数同士の割り算をし、結果(b/a)を返します。
slSin |
slCos |
slTan |
slAtan |
slSquart |
slSquartFX |
slMulFX |
#include "sgl.h" VECTOR vct_a, vct_b; FIXED slInnerProduct( vct_a, vct_b )
VECTOR vct_a, vct_b - 内積演算に使用するベクトル。
FIXED - 内積の演算結果。
二つのベクトルの内積を取り、結果を返します。
if( slInnerProduct( normal, eye ) > toFIXED( 0.0 ) ) { slPutPolygonX( ... ); }
slNormalVector |
#include "sgl.h" VECTOR vct_a, vct_b, vct_c; VECTOR ans; void slNormalVector( vct_a, vct_b, vct_c, ans )
VECTOR vct_a, vct_b, vct_c - 平面を構成する3点。
VECTOR ans - 演算結果を入れるためのVECTOR構造体。
void - 何も返しません。(但し引数に与えるansに計算結果の法線ベクトルが 返ります。)
指定された3点からなる2本のベクトル(b->a , b->c)に直交するベクトル (単位法線ベクトル)を算出します。
法線の向きを逆にしたい場合には指定する点を b , a , c の順にしてください。
slInnerProduct |
#include "sgl.h" FIXED slRandom( void )
void - 何も与えません。
FIXED - 乱数値。
0から1.0の間の乱数を発生する。
FIXED x, y; x = slMulFX( slRandom(), toFIXED( 320 ) ); y = slMulFX( slRandom(), toFIXED( 240 ) );
この関数は、slInitSystemからのフレーム数に依存します。
つまり、slInitSystemを起動した直後のslRandom()の値は常に同じ値に なります。もし、slInitSystem起動後、すぐにこの関数を呼ぶ場合、 乱数としての意味を持ちませんので注意してください。
slInitSystem |
RandWork |
#include "sgl.h" VECTOR pnt_a, pnt_b, pnt_c, pnt_d; VECTOR time; VECTOR ans; void slBezier( pnt_a, pnt_b, pnt_c, pnt_d, time, ans )
VECTOR pnt_a, pnt_b, pnt_c, pnt_d - ベジェ曲線を構成する4点。
VECTOR time - pnt_aを0.0、pnt_dを1.0とした時の、 知りたい関数値のある点。
VECTOR ans; - 演算結果を入れるためのVECTOR構造体。
void - 何も返しません。(但し、引数に与えるansに計算結果のベクトルが 返ります。)
指定された4点間を結ぶBezier曲線のtimeでの位置を返す。
timeは 0から1.0の範囲で指定する。
#include "sgl.h" FIXED obj_a[XYZ]; FIXED size_a; FIXED obj_b[XYZ]; FIXED size_b; FIXED slBallCollision( obj_a, size_a, obj_b, size_b )
FIXED obj_a[XYZ] - オブジェクトAの中心座標。
FIXED size_a - オブジェクトAの半径。
FIXED obj_b[XYZ] - オブジェクトBの中心座標。
FIXED size_b - オブジェクトBの半径。
FIXED - 当たっていれば、二者の距離、当たっていなければ負数を返します。
位置が object[XYZ] 、半径が size1 の球と object2[XYZ],size2 の球との 当たり判定を行い、当たっていればその距離を返します。
当たっていない場合には マイナスの値を返します。
FIXED Orig[ XYZ ] = { toFIXED( 0.0 ), toFIXED( 0.0 ), toFIXED( 0.0 ) } slPushMatrix(); { : slPushMatrix(); { : slConvert3Dto2DFX( Orig, ans ); if ( slBallCollision( ans, radius1, obj, radius2 ) < toFIXED( 0.0 ) ) { Not Collide : } else { Collide !! }
#include "sgl.h" void ( *func )() func; void *para; void slSlaveFunc( func, para );
void ( *func )() - スレーブで実行したい関数。
void *para - スレーブで実行する関数に与える引数。
void - 何も返しません。
スレーブCPUに指定された関数を実行させます。
ポリゴン表示等のファンクションがスレーブへのコマンドバッファ上に残っている 場合、それらが終了しないとこのファンクションは実行されないため、実行開始が 遅れることがあります。
void foo() { : } slSlaveFunc( foo, NULL );