亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? t3dlib4.cpp

?? 3D游戲編程大師技巧第十一章的源代碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:

void VECTOR3D_Scale(float k, VECTOR3D_PTR va)
{
// this function scales a vector by the constant k,
// and modifies the original

// multiply each component by scaling factor
va->x*=k;
va->y*=k;
va->z*=k;

} // end VECTOR3D_Scale

/////////////////////////////////////////////////////////////

void VECTOR3D_Scale(float k, VECTOR3D_PTR va, VECTOR3D_PTR vscaled)
{
// this function scales a vector by the constant k,
// leaves the original unchanged, and returns the result
// in vres as well as on the stack

// multiply each component by scaling factor
vscaled->x = k*va->x;
vscaled->y = k*va->y;
vscaled->z = k*va->z;

} // end VECTOR3D_Scale

//////////////////////////////////////////////////////////////

float VECTOR3D_Dot(VECTOR3D_PTR va, VECTOR3D_PTR vb)
{
// computes the dot product between va and vb
return( (va->x * vb->x) + (va->y * vb->y) + (va->z * vb->z) );
} // end VECTOR3D_DOT
/////////////////////////////////////////////////////////////

void VECTOR3D_Cross(VECTOR3D_PTR va, VECTOR3D_PTR vb, VECTOR3D_PTR vn)
{
// this function computes the cross product between va and vb
// and returns the vector that is perpendicular to each in vn

vn->x =  ( (va->y * vb->z) - (va->z * vb->y) );
vn->y = -( (va->x * vb->z) - (va->z * vb->x) );
vn->z =  ( (va->x * vb->y) - (va->y * vb->x) ); 

} // end VECTOR3D_Cross

/////////////////////////////////////////////////////////////

VECTOR3D VECTOR3D_Cross(VECTOR3D_PTR va, VECTOR3D_PTR vb)
{
// this function computes the cross product between va and vb
// and returns the vector that is perpendicular to each

VECTOR3D vn;

vn.x =  ( (va->y * vb->z) - (va->z * vb->y) );
vn.y = -( (va->x * vb->z) - (va->z * vb->x) );
vn.z =  ( (va->x * vb->y) - (va->y * vb->x) ); 

// return result
return(vn);

} // end VECTOR3D_Cross

//////////////////////////////////////////////////////////////

float VECTOR3D_Length(VECTOR3D_PTR va)
{
// computes the magnitude of a vector, slow

return( (float)sqrtf(va->x*va->x + va->y*va->y + va->z*va->z) );

} // end VECTOR3D_Length

///////////////////////////////////////////////////////////////

float VECTOR3D_Length_Fast(VECTOR3D_PTR va)
{
// computes the magnitude of a vector using an approximation
// very fast
return( Fast_Distance_3D(va->x, va->y, va->z) );

} // end VECTOR3D_Length_Fast

///////////////////////////////////////////////////////////////

void VECTOR3D_Normalize(VECTOR3D_PTR va)
{
// normalizes the sent vector in placew

// compute length
float length = sqrtf(va->x*va->x + va->y*va->y + va->z*va->z);

// test for zero length vector
// if found return zero vector
if (length < EPSILON_E5) 
   return;

float length_inv = 1/length;

// compute normalized version of vector
va->x*=length_inv;
va->y*=length_inv;
va->z*=length_inv;

} // end VECTOR3D_Normalize

///////////////////////////////////////////////////////////////

void VECTOR3D_Normalize(VECTOR3D_PTR va, VECTOR3D_PTR vn)
{
// normalizes the sent vector and returns the result in vn

VECTOR3D_ZERO(vn);

// compute length
float length = VECTOR3D_Length(va);

// test for zero length vector
// if found return zero vector
if (length < EPSILON_E5) 
   return;

float length_inv = 1.0/length;

// compute normalized version of vector
vn->x = va->x*length_inv;
vn->y = va->y*length_inv;
vn->z = va->z*length_inv;

} // end VECTOR3D_Normalize

///////////////////////////////////////////////////////////////

void VECTOR3D_Build(VECTOR3D_PTR init,VECTOR3D_PTR term,VECTOR3D_PTR result)
{
// this function creates a vector from two vectors (or points)
//  in 3D space
result->x = term->x - init->x;
result->y = term->y - init->y;
result->z = term->z - init->z;

} // end VECTOR3D_Build

/////////////////////////////////////////////////////////////

float VECTOR3D_CosTh(VECTOR3D_PTR va, VECTOR3D_PTR vb)
{
// this function returns the cosine of the angle between
// two vectors. Note, we could compute the actual angle,
// many many times, in further calcs we will want ultimately
// compute cos of the angle, so why not just leave it!
return(VECTOR3D_Dot(va,vb)/(VECTOR3D_Length(va)*VECTOR3D_Length(vb)));

} // end VECTOR3D_CosTh

///////////////////////////////////////////////////////////////

void VECTOR3D_Print(VECTOR3D_PTR va, char *name="v")
{
// this function prints out a VECTOR3D

Write_Error("\n%s=[",name);
for (int index=0; index<3; index++)
    Write_Error("%f, ",va->M[index]);
Write_Error("]");

} // end VECTOR3D_Print

////////////////////////////////////////////////////////////////

// these are the 4D version of the vector functions, they
// assume that the vectors are 3D with a w, so w is left
// out of all the operations

void VECTOR4D_Build(VECTOR4D_PTR init, VECTOR4D_PTR term, VECTOR4D_PTR result)
{
// build a 4d vector
result->x = term->x - init->x;
result->y = term->y - init->y;
result->z = term->z - init->z;
result->w = 1;

} // end VECTOR4D_Build

////////////////////////////////////////////////////////////////

void VECTOR4D_Add(VECTOR4D_PTR va, VECTOR4D_PTR vb, VECTOR4D_PTR vsum)
{
// this function adds va+vb and return it in vsum
vsum->x = va->x + vb->x;
vsum->y = va->y + vb->y;
vsum->z = va->z + vb->z;
vsum->w = 1;

} // end VECTOR4D_Add

////////////////////////////////////////////////////////////

VECTOR4D VECTOR4D_Add(VECTOR4D_PTR va, VECTOR4D_PTR vb)
{
// this function adds va+vb and returns the result on 
// the stack
VECTOR4D vsum;

vsum.x = va->x + vb->x;
vsum.y = va->y + vb->y;
vsum.z = va->z + vb->z;
vsum.w = 1;

// return result
return(vsum);

} // end VECTOR4D_Add

////////////////////////////////////////////////////////////

void VECTOR4D_Sub(VECTOR4D_PTR va, VECTOR4D_PTR vb, VECTOR4D_PTR vdiff)
{
// this function subtracts va-vb and return it in vdiff
// the stack
vdiff->x = va->x - vb->x;
vdiff->y = va->y - vb->y;
vdiff->z = va->z - vb->z;
vdiff->w = 1;

} // end VECTOR4D_Sub

////////////////////////////////////////////////////////////

VECTOR4D VECTOR4D_Sub(VECTOR4D_PTR va, VECTOR4D_PTR vb)
{
// this function subtracts va-vb and returns the result on 
// the stack
VECTOR4D vdiff;

vdiff.x = va->x - vb->x;
vdiff.y = va->y - vb->y;
vdiff.z = va->z - vb->z;
vdiff.w = 1;

// return result
return(vdiff);                      

} // end VECTOR4D_Sub

////////////////////////////////////////////////////////////

void VECTOR4D_Scale(float k, VECTOR4D_PTR va)
{
// this function scales a vector by the constant k,
// in place , note w is left unchanged

// multiply each component by scaling factor
va->x*=k;
va->y*=k;
va->z*=k;
va->w = 1;

} // end VECTOR4D_Scale

/////////////////////////////////////////////////////////////

void VECTOR4D_Scale(float k, VECTOR4D_PTR va, VECTOR4D_PTR vscaled)
{
// this function scales a vector by the constant k,
// leaves the original unchanged, and returns the result
// in vres as well as on the stack

// multiply each component by scaling factor
vscaled->x = k*va->x;
vscaled->y = k*va->y;
vscaled->z = k*va->z;
vscaled->w = 1;

} // end VECTOR4D_Scale

//////////////////////////////////////////////////////////////

float VECTOR4D_Dot(VECTOR4D_PTR va, VECTOR4D_PTR vb)
{
// computes the dot product between va and vb
return( (va->x * vb->x) + (va->y * vb->y) + (va->z * vb->z) );
} // end VECTOR4D_DOT

/////////////////////////////////////////////////////////////

void VECTOR4D_Cross(VECTOR4D_PTR va, 
                    VECTOR4D_PTR vb,
                    VECTOR4D_PTR vn)
{
// this function computes the cross product between va and vb
// and returns the vector that is perpendicular to each in vn

vn->x =  ( (va->y * vb->z) - (va->z * vb->y) );
vn->y = -( (va->x * vb->z) - (va->z * vb->x) );
vn->z =  ( (va->x * vb->y) - (va->y * vb->x) ); 
vn->w = 1;

} // end VECTOR4D_Cross

/////////////////////////////////////////////////////////////

VECTOR4D VECTOR4D_Cross(VECTOR4D_PTR va, VECTOR4D_PTR vb)
{
// this function computes the cross product between va and vb
// and returns the vector that is perpendicular to each

VECTOR4D vn;

vn.x =  ( (va->y * vb->z) - (va->z * vb->y) );
vn.y = -( (va->x * vb->z) - (va->z * vb->x) );
vn.z =  ( (va->x * vb->y) - (va->y * vb->x) ); 
vn.w = 1;

// return result
return(vn);

} // end VECTOR4D_Cross

//////////////////////////////////////////////////////////////

float VECTOR4D_Length(VECTOR4D_PTR va)
{
// computes the magnitude of a vector, slow

return(sqrtf(va->x*va->x + va->y*va->y + va->z*va->z) );

} // end VECTOR4D_Length

///////////////////////////////////////////////////////////////

float VECTOR4D_Length_Fast(VECTOR4D_PTR va)
{
// computes the magnitude of a vector using an approximation
// very fast
return( Fast_Distance_3D(va->x, va->y, va->z) );

} // end VECTOR4D_Length_Fast

///////////////////////////////////////////////////////////////

void VECTOR4D_Normalize(VECTOR4D_PTR va)
{
// normalizes the sent vector and returns the result

// compute length
float length = sqrtf(va->x*va->x + va->y*va->y + va->z*va->z);

// test for zero length vector
// if found return zero vector
if (length < EPSILON_E5) 
   return;

float length_inv = 1.0/length;

// compute normalized version of vector
va->x*=length_inv;
va->y*=length_inv;
va->z*=length_inv;
va->w = 1;

} // end VECTOR4D_Normalize

///////////////////////////////////////////////////////////////

void VECTOR4D_Normalize(VECTOR4D_PTR va, VECTOR4D_PTR vn)
{
// normalizes the sent vector and returns the result in vn

VECTOR4D_ZERO(vn);

// compute length
float length = sqrt(va->x*va->x + va->y*va->y + va->z*va->z);

// test for zero length vector
// if found return zero vector
if (length < EPSILON_E5) 
   return;

float length_inv = 1.0/length;

// compute normalized version of vector
vn->x = va->x*length_inv;
vn->y = va->y*length_inv;
vn->z = va->z*length_inv;
vn->w = 1;

} // end VECTOR4D_Normalize

///////////////////////////////////////////////////////////////

float VECTOR4D_CosTh(VECTOR4D_PTR va, VECTOR4D_PTR vb)
{
// this function returns the cosine of the angle between
// two vectors. Note, we could compute the actual angle,
// many many times, in further calcs we will want ultimately
// compute cos of the angle, so why not just leave it!
return(VECTOR4D_Dot(va,vb)/(VECTOR4D_Length(va)*VECTOR4D_Length(vb)));

} // end VECTOR4D_CosTh

////////////////////////////////////////////////////////////

void VECTOR4D_Print(VECTOR4D_PTR va, char *name="v")
{
// this function prints out a VECTOR4D

Write_Error("\n%s[",name);
for (int index=0; index<4; index++)
    Write_Error("%f, ",va->M[index]);
Write_Error("]");

} // end VECTOR4D_Print

////////////////////////////////////////////////////////////////

void Mat_Init_2X2(MATRIX2X2_PTR ma, 
                  float m00, float m01,
                  float m10, float m11)

{
// this function fills a 2x2 matrix with the sent data in 
// row major form
ma->M00 = m00; ma->M01 = m01; 
ma->M10 = m10; ma->M11 = m11; 

} // end Mat_Init_2X2

/////////////////////////////////////////////////////////////////

void Mat_Add_2X2(MATRIX2X2_PTR ma, MATRIX2X2_PTR mb, MATRIX2X2_PTR msum)
{
// this function adds two 2x2 matrices together and stores
// the result in msum
msum->M00 = ma->M00+mb->M00;
msum->M01 = ma->M01+mb->M01;
msum->M10 = ma->M10+mb->M10;
msum->M11 = ma->M11+mb->M11;

} // end Mat_Add_2X2

/////////////////////////////////////////////////////////////////

void Mat_Mul_2X2(MATRIX2X2_PTR ma, MATRIX2X2_PTR mb, MATRIX2X2_PTR mprod)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆福利精品推荐| 国产伦精品一区二区三区视频青涩| 久久精品欧美日韩精品| 日韩精品一区二区三区四区视频| 在线视频观看一区| 在线免费亚洲电影| 欧美三级一区二区| 欧美日韩国产免费| 91麻豆精品久久久久蜜臀| 欧美日韩专区在线| 69精品人人人人| 精品日韩99亚洲| 久久色中文字幕| 国产农村妇女毛片精品久久麻豆| 国产欧美日产一区| 亚洲精品乱码久久久久久黑人 | 91九色02白丝porn| 欧美性受xxxx黑人xyx性爽| 欧美日韩在线播| 精品久久99ma| 日韩毛片视频在线看| 一二三区精品福利视频| 视频在线观看国产精品| 国产精品一线二线三线精华| 成人免费高清在线| 欧美日韩国产免费| 国产亚洲污的网站| 亚洲成人免费在线| 国产一区二区三区久久悠悠色av| 99九九99九九九视频精品| 欧美日韩一区二区在线视频| 精品国产凹凸成av人导航| 中文字幕欧美日韩一区| 亚洲福利视频一区| 国产精品亚洲人在线观看| 在线中文字幕一区二区| 337p日本欧洲亚洲大胆色噜噜| 综合久久久久久| 看电影不卡的网站| 欧美性猛片xxxx免费看久爱| 久久综合视频网| 亚洲主播在线观看| k8久久久一区二区三区| 日韩欧美高清在线| 亚洲国产乱码最新视频| 国产精品2024| 欧美xingq一区二区| 亚洲图片有声小说| 懂色av中文字幕一区二区三区| 欧美疯狂性受xxxxx喷水图片| 欧美国产精品劲爆| 精彩视频一区二区三区| 欧美日韩亚洲综合一区二区三区 | 91黄色激情网站| 国产日韩v精品一区二区| 日韩电影免费在线看| 欧洲一区在线电影| 日韩美女久久久| 成人av电影免费观看| 精品久久人人做人人爽| 人人精品人人爱| 欧美卡1卡2卡| 视频一区二区不卡| 91麻豆精品久久久久蜜臀 | 蜜芽一区二区三区| 欧美色综合网站| 亚洲自拍另类综合| 91一区二区三区在线观看| 日本一区二区三区视频视频| 经典三级一区二区| 精品成人在线观看| 精品一区二区三区香蕉蜜桃| 欧美一区二区黄| 美女一区二区三区在线观看| 91精品福利在线一区二区三区| 亚洲综合色自拍一区| 在线观看免费亚洲| 性久久久久久久| 69堂国产成人免费视频| 日韩av电影天堂| 欧美v国产在线一区二区三区| 麻豆精品一区二区| 久久精品人人做| 99re热视频这里只精品| 一区二区三区在线视频免费| 日本电影亚洲天堂一区| 午夜视频一区二区三区| 日韩午夜激情免费电影| 极品美女销魂一区二区三区| 2020国产精品| www.欧美亚洲| 亚洲狠狠爱一区二区三区| 欧美另类高清zo欧美| 开心九九激情九九欧美日韩精美视频电影| 日韩免费看网站| 成人av在线观| 国产日韩欧美制服另类| www.日本不卡| 全国精品久久少妇| 日本一区二区综合亚洲| 91久久奴性调教| 日本vs亚洲vs韩国一区三区| 久久久久高清精品| 色综合av在线| 日韩理论片中文av| 欧美日韩亚洲国产综合| 国产一区二区三区观看| 国产精品传媒在线| 欧美一级搡bbbb搡bbbb| 波多野结衣在线aⅴ中文字幕不卡| 亚洲免费视频成人| 久久这里只有精品6| 色婷婷激情久久| 韩国成人精品a∨在线观看| 亚洲特黄一级片| 久久婷婷色综合| 91麻豆精品国产自产在线观看一区| 韩国v欧美v亚洲v日本v| 亚洲香蕉伊在人在线观| 91精品欧美福利在线观看| 国产高清精品网站| 日本网站在线观看一区二区三区| 国产无人区一区二区三区| 91精品中文字幕一区二区三区| 福利视频网站一区二区三区| 天堂在线亚洲视频| 亚洲精选视频在线| 国产精品免费aⅴ片在线观看| 制服丝袜亚洲网站| 欧美伊人久久久久久久久影院 | 欧美日本乱大交xxxxx| 成人免费高清视频在线观看| 美女性感视频久久| 丝袜美腿亚洲综合| 亚洲自拍偷拍麻豆| 亚洲欧美日韩国产手机在线| 久久久久久久综合日本| 日韩亚洲欧美在线观看| 色综合天天在线| 成年人国产精品| 国产xxx精品视频大全| 精品一区二区av| 精品一区二区免费在线观看| 青青草国产精品97视觉盛宴| 亚洲va中文字幕| 亚洲午夜激情av| 亚洲图片欧美色图| 亚洲一区二区三区视频在线| 一区二区三区毛片| 亚洲电影激情视频网站| 尤物视频一区二区| 亚洲一级二级在线| 一区二区高清视频在线观看| 亚洲人成精品久久久久| 一区二区三区资源| 亚洲一区二区美女| 午夜成人免费视频| 美脚の诱脚舐め脚责91| 激情深爱一区二区| 国产成人免费视频| 成人免费黄色在线| 色哟哟在线观看一区二区三区| 91丨porny丨蝌蚪视频| 在线观看网站黄不卡| 欧美乱妇20p| 久久综合九色欧美综合狠狠| 久久中文娱乐网| 亚洲视频免费在线| 亚洲韩国一区二区三区| 免费看日韩a级影片| 黄页视频在线91| 99re成人精品视频| 欧美日韩国产综合一区二区| 日韩精品一区二| 综合久久久久综合| 奇米影视一区二区三区小说| 国产精品亚洲午夜一区二区三区 | 337p亚洲精品色噜噜噜| 91黄视频在线| 久久影院电视剧免费观看| 国产精品国产三级国产普通话蜜臀 | 久久精品一区二区三区不卡| 26uuuu精品一区二区| 一区二区三区四区视频精品免费| 香蕉成人伊视频在线观看| 激情小说欧美图片| 欧美在线一区二区| 久久久久亚洲蜜桃| 精品国产三级电影在线观看| **欧美大码日韩| 久久精品国产精品亚洲综合| 成人av网站在线观看| 欧美一区二区三区公司| 亚洲欧洲另类国产综合| 亚洲综合偷拍欧美一区色| 国产成人午夜99999| 在线电影一区二区三区| 久久婷婷色综合| 天堂蜜桃91精品| 日本道色综合久久|