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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? glhelpers.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//TEMP: ripped from nate robins : http://www.xmission.com/~nate/tutors.htmlextern "C" bool matInverse(float inverse[16], const float src[16]){double t;    int i, j, k, swap;    float tmp[4][4];        matIdentity(inverse);        for (i = 0; i < 4; i++) {        for (j = 0; j < 4; j++) {            tmp[i][j] = src[i*4+j];        }    }        for (i = 0; i < 4; i++) {        /* look for largest element in column. */        swap = i;        for (j = i + 1; j < 4; j++) {            if (fabs(tmp[j][i]) > fabs(tmp[i][i])) {                swap = j;            }        }                if (swap != i) {            /* swap rows. */            for (k = 0; k < 4; k++) {                t = tmp[i][k];                tmp[i][k] = tmp[swap][k];                tmp[swap][k] = t;                                t = inverse[i*4+k];                inverse[i*4+k] = inverse[swap*4+k];                inverse[swap*4+k] = t;            }        }                if (tmp[i][i] == 0) {        /* no non-zero pivot.  the matrix is singular, which           shouldn't happen.  This means the user gave us a bad            matrix. */            return false;        }                t = tmp[i][i];        for (k = 0; k < 4; k++) {            tmp[i][k] /= t;            inverse[i*4+k] /= t;        }        for (j = 0; j < 4; j++) {            if (j != i) {                t = tmp[j][i];                for (k = 0; k < 4; k++) {                    tmp[j][k] -= tmp[i][k]*t;                    inverse[j*4+k] -= inverse[i*4+k]*t;                }            }        }    }    return true;}/***************** Virdi added this set of code***********/// m3=m1*m2extern "C" void matMultl(float* m3, const float* m1, const float* m2) {               m3[0] = m2[0]*m1[0] + m2[4]*m1[1] + m2[8]*m1[2] + m2[12]*m1[3];       m3[1] = m2[1]*m1[0] + m2[5]*m1[1] + m2[9]*m1[2] + m2[13]*m1[3];       m3[2] = m2[2]*m1[0] + m2[6]*m1[1] + m2[10]*m1[2] + m2[14]*m1[3];       m3[3] = m2[3]*m1[0] + m2[7]*m1[1] + m2[11]*m1[2] + m2[15]*m1[3];              m3[4] = m2[0]*m1[4] + m2[4]*m1[5] + m2[8]*m1[6] + m2[12]*m1[7];       m3[5] = m2[1]*m1[4] + m2[5]*m1[5] + m2[9]*m1[6] + m2[13]*m1[7];       m3[6] = m2[2]*m1[4] + m2[6]*m1[5] + m2[10]*m1[6] + m2[14]*m1[7];       m3[7] = m2[3]*m1[4] + m2[7]*m1[5] + m2[11]*m1[6] + m2[15]*m1[7];              m3[8] = m2[0]*m1[8] + m2[4]*m1[9] + m2[8]*m1[10] + m2[12]*m1[11];       m3[9] = m2[1]*m1[8] + m2[5]*m1[9] + m2[9]*m1[10] + m2[13]*m1[11];       m3[10] = m2[2]*m1[8] + m2[6]*m1[9] + m2[10]*m1[10] + m2[14]*m1[11];       m3[11] = m2[3]*m1[8] + m2[7]*m1[9] + m2[11]*m1[10] + m2[15]*m1[11];              m3[12] = m2[0]*m1[12] + m2[4]*m1[13] + m2[8]*m1[14] + m2[12]*m1[15];       m3[13] = m2[1]*m1[12] + m2[5]*m1[13] + m2[9]*m1[14] + m2[13]*m1[15];       m3[14] = m2[2]*m1[12] + m2[6]*m1[13] + m2[10]*m1[14] + m2[14]*m1[15];       m3[15] = m2[3]*m1[12] + m2[7]*m1[13] + m2[11]*m1[14] + m2[15]*m1[15];}extern "C" void matMult(float* m3, const float* m1, const float* m2) {               m3[0] = m1[0]*m2[0] + m1[4]*m2[1] + m1[8]*m2[2] + m1[12]*m2[3];       m3[1] = m1[1]*m2[0] + m1[5]*m2[1] + m1[9]*m2[2] + m1[13]*m2[3];       m3[2] = m1[2]*m2[0] + m1[6]*m2[1] + m1[10]*m2[2] + m1[14]*m2[3];       m3[3] = m1[3]*m2[0] + m1[7]*m2[1] + m1[11]*m2[2] + m1[15]*m2[3];              m3[4] = m1[0]*m2[4] + m1[4]*m2[5] + m1[8]*m2[6] + m1[12]*m2[7];       m3[5] = m1[1]*m2[4] + m1[5]*m2[5] + m1[9]*m2[6] + m1[13]*m2[7];       m3[6] = m1[2]*m2[4] + m1[6]*m2[5] + m1[10]*m2[6] + m1[14]*m2[7];       m3[7] = m1[3]*m2[4] + m1[7]*m2[5] + m1[11]*m2[6] + m1[15]*m2[7];              m3[8] = m1[0]*m2[8] + m1[4]*m2[9] + m1[8]*m2[10] + m1[12]*m2[11];       m3[9] = m1[1]*m2[8] + m1[5]*m2[9] + m1[9]*m2[10] + m1[13]*m2[11];       m3[10] = m1[2]*m2[8] + m1[6]*m2[9] + m1[10]*m2[10] + m1[14]*m2[11];       m3[11] = m1[3]*m2[8] + m1[7]*m2[9] + m1[11]*m2[10] + m1[15]*m2[11];              m3[12] = m1[0]*m2[12] + m1[4]*m2[13] + m1[8]*m2[14] + m1[12]*m2[15];       m3[13] = m1[1]*m2[12] + m1[5]*m2[13] + m1[9]*m2[14] + m1[13]*m2[15];       m3[14] = m1[2]*m2[12] + m1[6]*m2[13] + m1[10]*m2[14] + m1[14]*m2[15];       m3[15] = m1[3]*m2[12] + m1[7]*m2[13] + m1[11]*m2[14] + m1[15]*m2[15];}//transform the vector x,y,z  with the transformation matrix mextern "C" void vecMult(const float* m, float x, float y, float z){        float xo,yo,zo;       xo = m[0] * x + m[4] * y + m[8] * z + m[12];       yo = m[1] * x + m[5] * y + m[9] * z + m[13];       zo = m[2] * x + m[6] * y + m[10] * z + m[14];              x=xo;       y=yo;       z=zo;}//will update the current matrix' m' with the tranalation vector x,y,zextern "C" void matTranslate(float* m, const float x, const float y, const float z  ){       m[12] = m[0] * x + m[4] *y + m[8]* z + m[12];       m[13] = m[1] * x + m[5] *y + m[9]* z + m[13];       m[14] = m[2] * x + m[6] *y + m[10]* z + m[14];       m[15] = m[3] * x + m[7] *y + m[11]* z + m[15];}  //rotate about arbit axisextern "C" bool matRotate(float* m, float DEGAngle, float x, float y, float z){               float Sq = sqrt(x*x + y*y + z*z);       float inv;       if(Sq > -FLT_EPSILON && Sq < FLT_EPSILON) //chk for divide by zero......           return false;       inv = 1.0f/Sq;           x = x * inv;          y = y * inv;       z = z * inv;       float radian = PI_OVER_180 * DEGAngle;       float f32c = (float)cos(radian); //TODO!! Optimize me       float f32s = (float)sin(radian);       float f32OneMinC = 1 - f32c;                float RotMat[16];       RotMat[0] = f32c + f32OneMinC * x * x;       RotMat[1] = (f32OneMinC * x * y) + (z * f32s);       RotMat[2] = (f32OneMinC * x * z) - (y * f32s);       RotMat[3] = 0.0;       RotMat[4] = (f32OneMinC * x * y) - (z * f32s);       RotMat[5] = f32c + f32OneMinC * y * y;       RotMat[6] = (f32OneMinC * y * z) + (x * f32s);       RotMat[7] = 0.0;       RotMat[8] = (f32OneMinC * x * z) + (y * f32s);       RotMat[9] = (f32OneMinC * y * z) - (x * f32s);       RotMat[10] = f32c + f32OneMinC * z * z;       RotMat[11] = RotMat[12] =RotMat[13] = RotMat[14] = 0.0;RotMat[15] =1.0f;       float t[16];       matMult( &t[0] ,  m , &RotMat[0]);       for(int i = 0; i < 16; ++i)        m[i] = t[i];              return true;}//will update the current matrix' m' with the tranalation vector x,y,zextern "C" void matTranslatel(float* m, const float x, const float y, const float z  ){       m[3] = m[0] * x + m[1] *y + m[2]* z + m[3];       m[7] = m[4] * x + m[5] *y + m[6]* z + m[7];       m[10] = m[8] * x + m[9] *y + m[10]* z + m[11];       m[15] = m[12] * x + m[13] *y + m[14]* z + m[15];}  //rotate about arbit axisextern "C" bool matRotatel(float* m, float DEGAngle, float x, float y, float z){               float Sq = sqrt(x*x + y*y + z*z);       float inv;       if(Sq > -FLT_EPSILON && Sq < FLT_EPSILON) //chk for divide by zero......           return false;       inv = 1.0f/Sq;           x = x * inv;          y = y * inv;       z = z * inv;       float radian = PI_OVER_180 * DEGAngle;       float f32c = (float)cos(radian); //TODO!! Optimize me       float f32s = (float)sin(radian);       float f32OneMinC = 1 - f32c;                float RotMat[16];       RotMat[0] = f32c + f32OneMinC * x * x;       RotMat[4] = (f32OneMinC * x * y) + (z * f32s);       RotMat[8] = (f32OneMinC * x * z) - (y * f32s);       RotMat[12] = 0.0;       RotMat[1] = (f32OneMinC * x * y) - (z * f32s);       RotMat[5] = f32c + f32OneMinC * y * y;       RotMat[9] = (f32OneMinC * y * z) + (x * f32s);       RotMat[13] = 0.0;       RotMat[2] = (f32OneMinC * x * z) + (y * f32s);       RotMat[6] = (f32OneMinC * y * z) - (x * f32s);       RotMat[10] = f32c + f32OneMinC * z * z;       RotMat[14] = RotMat[3] = RotMat[7] = RotMat[11] = 0.0;RotMat[15] =1.0f;       float t[16];       matMult( &t[0] ,  m , &RotMat[0]);       for(int i = 0; i < 16; ++i)        m[i] = t[i];              return true;}extern "C" void matScale(float*m, float x, float y, float z){    m[0] *= x ; m[4] *= y ; m[8] *= z ;// m[12] *= x ;      m[1] *= x ; m[5] *= y ; m[9] *= z ; //m[13] *= y ;      m[2] *= x ; m[6] *= y ; m[10] *= z ; //m[14] *= z ;  }//like glfrustumextern "C" bool matFrustum(float* m,float f32Left, float f32Right,float f32Bottom, float f32Top, float f32ZNear, float f32ZFar){    float diff = f32Right - f32Left;    if(diff > -FLT_EPSILON && diff < FLT_EPSILON) //chk for divide by zero......        return false;        diff = f32Top - f32Bottom;    if(diff > -FLT_EPSILON && diff < FLT_EPSILON) //chk for divide by zero......        return false;            diff = f32ZFar - f32ZNear;    if(diff > -FLT_EPSILON && diff < FLT_EPSILON) //chk for divide by zero......        return false;                      m[0] = float(2.0*f32ZNear/(f32Right-f32Left));       m[1] = m[2] = m[3] = 0;       m[4] = 0;       m[5] = float(2.0*f32ZNear/(f32Top-f32Bottom));       m[6] = m[7] = 0;       m[8] = (f32Right + f32Left) / (f32Right - f32Left);       m[9] = (f32Top + f32Bottom) / (f32Top - f32Bottom);       m[10] = -( (f32ZNear + f32ZFar) / (f32ZFar - f32ZNear)  );       m[11] = -1;              m[12] = m[13] =0;       m[14] = -( (2*f32ZNear*f32ZFar) / (f32ZFar-f32ZNear));       m[15] = 0;       return true;}//like gluperspective matrix         extern "C" bool matPerspective(float* m ,float fieldOfViewDegree, float aspectRatio, float zNear, float zFar){   if(fieldOfViewDegree <= 0.0f || fieldOfViewDegree >=180.0f)      //fieldOfViewDegree = 45.0f;   //assign FOV to 45 deg if value passed is not in proper range        return false;   float FOVrad = float(PI_OVER_180*fieldOfViewDegree*0.5f);//angle divided by 2 !!!   float f32top = float( zNear*tan(FOVrad) );   float f32Right = aspectRatio*f32top;   return matFrustum(m,-f32Right,f32Right,-f32top,f32top,zNear,zFar);}  //like glorthoextern "C" bool matOrtho(float* m,float f32Left, float f32Right,float f32Top, float f32Bottom, float f32ZNear, float f32ZFar){    float diff = f32Right - f32Left;    if(diff > -FLT_EPSILON && diff < FLT_EPSILON) //chk for divide by zero......        return false;        diff = f32Top - f32Bottom;    if(diff > -FLT_EPSILON && diff < FLT_EPSILON) //chk for divide by zero......        return false;            diff = f32ZFar - f32ZNear;    if(diff > -FLT_EPSILON && diff < FLT_EPSILON) //chk for divide by zero......        return false;            m[0] = float(2.0/(f32Right-f32Left));   m[1] = m[2] = m[3] = 0;   m[4] = 0;   m[5] = float(2.0/(f32Top-f32Bottom));   m[6] = m[7] = 0;   m[8] = m[9] = 0;   m[10] = -float(2.0/(f32ZFar - f32ZNear));   m[11] = 0;      m[12] = -((f32Right+f32Left)/(f32Right-f32Left));   m[13] = -((f32Top+f32Bottom)/(f32Top-f32Bottom));   m[14] = -((f32ZNear+f32ZFar)/(f32ZFar-f32ZNear));   m[15] = 1;   return true;}extern "C" bool vecNormalize(float& x, float& y, float& z){       float Sq = sqrt(x*x + y*y + z*z);       float inv;       if(Sq > -FLT_EPSILON && Sq < FLT_EPSILON) //chk for divide by zero......           return false;       inv = 1.0f/Sq;           x = x * inv;          y = y * inv;       z = z * inv;       return true;}//vector x = x1 cross y1extern "C" void vecCrossProduct(float& x,float& y, float& z , float x1,float y1, float z1 ,float x2,float y2, float z2){    //x= y1*z2 - y1*z2;    x= y1*z2 - y2*z1;    y= z1*x2 - z2*x1;    z= x1*y2 - x2*y1;}         //like gluLookAtextern "C" void matLookAt(float* m, float px, float py, float pz,float tx, float ty, float tz, float ux, float uy, float uz) {    float sx,sy,sz;    float uux,uuy,uuz;    float M[16];    float zx = tx-px;    float zy = ty-py;    float zz = tz-pz;    vecNormalize(zx,zy,zz);    vecNormalize(ux,uy,uz);    vecCrossProduct(sx,sy,sz,zx,zy,zz,ux,uy,uz);    vecCrossProduct(uux,uuy,uuz,sx,sy,sz,zx,zy,zz);    vecNormalize(sx,sy,sz);    vecNormalize(uux,uuy,uuz);    M[0]=sx; M[4]=sy; M[8]=sz; M[12]=0;    M[1]=uux; M[5]=uuy; M[9]=uuz; M[13]=0;    M[2]=-zx; M[6]=-zy; M[10]=-zz; M[14]=0;    M[3]=0; M[7]=0; M[11]=0; M[15]=1.0;    matTranslate(M,-px,-py,-pz); }extern "C" void matPrint(float* m){    for(int i=0; i<16; i++)    {        if(i%4 == 0) printf("\n");        printf("%f  ",m[i]);    }    printf("\n");}extern "C" unsigned int simpleCheckSum(const unsigned int* bin, int length){    int i;    unsigned int cs = 0;    unsigned char* cbin =(unsigned char *) bin;        //added shariq    for(i=0; i< length ; i++)    {        cs ^= cbin[i];    }    return cs;}extern "C" void isCheckSumValid(const unsigned int* bin, int len, int checkSum, const char* name){    int cs = simpleCheckSum(bin,len);        if(cs != checkSum)    {                //printf("Checksum MISMATCH! for %s\n", name);        return;    }        //printf("Checksum PASS! for %s\n",name);    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆福利精品推荐| 精品久久久久久久久久久院品网| 欧美精品一级二级三级| 久久久久久97三级| 日本成人在线看| 99国产精品久| 国产精品你懂的| 久久精品国产久精国产爱| 欧美主播一区二区三区美女| 中文一区一区三区高中清不卡| 久久99国产精品免费| 欧美日韩一级二级| 有码一区二区三区| 91免费观看视频在线| 久久久久久久久久久久久久久99| 老司机午夜精品| 欧美日韩黄色影视| 一区av在线播放| 精品少妇一区二区三区视频免付费| 一区二区在线看| 成人的网站免费观看| 日本一区免费视频| 粉嫩一区二区三区在线看| 精品99一区二区| 麻豆中文一区二区| 欧美一级免费大片| 石原莉奈在线亚洲二区| 欧美日韩一区二区三区在线看| 亚洲精品久久久蜜桃| 91在线无精精品入口| 综合激情成人伊人| 99精品久久只有精品| 亚洲天堂精品在线观看| 91在线视频网址| 一区二区三区蜜桃| 欧美剧情片在线观看| 日韩影院免费视频| 日韩精品影音先锋| 国产精品一级黄| 国产精品午夜春色av| 色婷婷av一区二区三区大白胸 | 欧美日韩极品在线观看一区| 亚洲大片精品永久免费| 欧美福利视频一区| 麻豆91精品91久久久的内涵| 精品91自产拍在线观看一区| 国产福利精品导航| 一色屋精品亚洲香蕉网站| 97se亚洲国产综合自在线| 亚洲综合一区二区| 日韩欧美精品在线| 国产成人av在线影院| 日韩美女视频19| 3atv在线一区二区三区| 国内精品在线播放| 中文字幕在线一区二区三区| 欧洲精品在线观看| 麻豆91在线播放免费| 国产精品久久夜| 欧美精品在线视频| 国产成人精品亚洲777人妖| 1024国产精品| 欧美一区二区视频免费观看| 国产精品一区二区三区四区| 亚洲精品国久久99热| 欧美一卡二卡三卡四卡| 不卡av免费在线观看| 免费人成网站在线观看欧美高清| 国产亚洲综合性久久久影院| 色网站国产精品| 狠狠色狠狠色综合系列| 一区二区三区精品| 久久精品视频在线看| 欧美日韩久久久久久| proumb性欧美在线观看| 日本不卡在线视频| 亚洲日本青草视频在线怡红院| 日韩欧美一区二区久久婷婷| 不卡视频在线看| 91久久精品一区二区| 国产综合色产在线精品| 一区二区三区波多野结衣在线观看| 久久综合色8888| 5566中文字幕一区二区电影| 91影院在线免费观看| 韩国欧美国产1区| 午夜精品久久久久久久久久久| 亚洲国产成人午夜在线一区| 91精品国产入口| 欧美性猛片aaaaaaa做受| 国产精品一区二区久久不卡 | 寂寞少妇一区二区三区| 亚洲综合免费观看高清完整版| 欧美精品一区二区三区一线天视频 | 国产91丝袜在线播放0| 亚洲sss视频在线视频| 亚洲色图制服诱惑 | 国产精品亚洲一区二区三区妖精 | 91精品国产乱码久久蜜臀| 欧美专区日韩专区| 99久久精品国产观看| 粉嫩aⅴ一区二区三区四区| 久久精品国产99国产精品| 爽爽淫人综合网网站| 一区二区三区国产精华| 中文字幕一区二区三区不卡| 国产欧美日韩中文久久| 久久综合九色综合欧美亚洲| 欧美va亚洲va香蕉在线| 日韩欧美一区二区在线视频| 欧美美女直播网站| 欧美日本不卡视频| 欧美色综合网站| 欧美三级日韩三级国产三级| 精品视频一区 二区 三区| 欧美午夜精品一区| 欧美日韩精品一区二区三区四区| 欧美午夜精品久久久久久超碰 | 色香蕉成人二区免费| 99re免费视频精品全部| 91网站在线播放| 欧美日韩一区中文字幕| 欧美日韩一本到| 日韩欧美久久久| 精品国产免费人成电影在线观看四季| 精品日产卡一卡二卡麻豆| 欧美精品一区二区三区蜜桃视频| 久久人人爽爽爽人久久久| 国产日韩成人精品| 亚洲色图欧美激情| 亚洲高清视频在线| 蜜臀av一区二区| 丁香啪啪综合成人亚洲小说 | 日韩欧美成人激情| 久久影院视频免费| 国产精品久久久久久久久免费樱桃 | 国产精品美女久久久久久久| 亚洲特级片在线| 亚洲午夜精品久久久久久久久| 免费看欧美美女黄的网站| 国产成人免费视频| 欧美午夜视频网站| 日韩午夜中文字幕| 国产精品国产三级国产普通话三级| 亚洲麻豆国产自偷在线| 日韩成人免费电影| 成人丝袜高跟foot| 欧美日韩久久一区二区| 久久色中文字幕| 亚洲综合自拍偷拍| 极品美女销魂一区二区三区 | 日韩欧美资源站| 国产精品对白交换视频| 日韩高清在线电影| 成+人+亚洲+综合天堂| 欧美一区二区三区精品| 国产精品欧美经典| 久久9热精品视频| 欧美在线不卡视频| 国产人妖乱国产精品人妖| 亚洲一区二区三区精品在线| 国产精品一级片| 日韩一级黄色大片| 亚洲午夜免费视频| 福利一区二区在线观看| 日韩欧美一区二区三区在线| 亚洲黄色性网站| 国产高清精品网站| 欧美一级在线观看| 亚洲一二三区视频在线观看| 成人精品国产福利| 精品国偷自产国产一区| 一个色在线综合| 成人动漫在线一区| 国产亚洲综合在线| 麻豆中文一区二区| 777xxx欧美| 亚洲成av人片在www色猫咪| 成人免费不卡视频| 国产日韩亚洲欧美综合| 精久久久久久久久久久| 日韩一区二区三区四区五区六区| 一区二区三区美女视频| 一本色道久久综合亚洲91| 国产精品久久久久国产精品日日| 黄色小说综合网站| 日韩欧美的一区| 精久久久久久久久久久| 日韩视频一区二区三区在线播放 | 国产99久久久国产精品免费看| 日韩午夜激情av| 麻豆成人91精品二区三区| 这里是久久伊人| 日韩1区2区3区| 欧美一级一区二区| 老司机精品视频一区二区三区| 日韩欧美你懂的| 精品一区精品二区高清| 精品剧情在线观看| 国产在线观看一区二区|