#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 );