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

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

?? math3d.h

?? direct3d游戲編程基礎源碼
?? H
字號:
/*   ColDet - C++ 3D Collision Detection Library
 *   Copyright (C) 2000   Amir Geva
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 * 
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA  02111-1307, USA.
 *
 * Any comments, questions and bug reports send to:
 *   photon@photoneffect.com
 *
 * Or visit the home page: http://photoneffect.com/coldet/
 */
#ifndef H_MATH3D
#define H_MATH3D

#include <math.h>

struct Vector3D;
struct Matrix3;
struct Matrix3D;
struct Plane; 

inline float flabs(float f) { return (f>=0.0f?f:-f); }
const float epsilon=1e-8f;
inline bool IsZero(float f) { return flabs(f)<epsilon; }

Vector3D operator*(float scalar, const Vector3D& v);
/** Dot product. */
float    operator*(const Vector3D& v1, const Vector3D& v2);
Vector3D operator+(const Vector3D& v1, const Vector3D& v2);
Vector3D operator-(const Vector3D& v1, const Vector3D& v2);
Vector3D CrossProduct(const Vector3D& v1, const Vector3D& v2);
Matrix3D operator*(const Matrix3D& m1, const Matrix3D& m2);
Matrix3D operator*(float scalar, const Matrix3D& m);

struct Vector3D
{
  float x,y,z;
  static const Vector3D Zero;

  Vector3D() {}
  Vector3D(float X, float Y, float Z) : x(X), y(Y), z(Z) {}
  Vector3D(const Vector3D& v) : x(v.x), y(v.y), z(v.z) {}

  Vector3D& operator+=(const Vector3D& v) { x+=v.x; y+=v.y; z+=v.z; return *this; }
  Vector3D& operator*=(float s) { x*=s; y*=s; z*=s; return *this; }
  Vector3D& operator/=(float s) { return *this *= (1.0f/s); }
  bool      operator==(const Vector3D& v) { return x==v.x && y==v.y && z==v.z; }

  Vector3D operator-       () const { return Vector3D(-x,-y,-z); }
  float    SquareMagnitude () const { return x*x+y*y+z*z; }
  float    Magnitude       () const { return (float)sqrt(SquareMagnitude()); }
  Vector3D Normalized      () const { return (1.0f/Magnitude())*(*this); }
  float    operator[] (int i) const { return ((float*)&x)[i]; }
  float&   operator[] (int i)       { return ((float*)&x)[i]; }
};

#define _11 sclr.s11
#define _12 sclr.s12
#define _13 sclr.s13
#define _14 sclr.s14
#define _21 sclr.s21
#define _22 sclr.s22
#define _23 sclr.s23
#define _24 sclr.s24
#define _31 sclr.s31
#define _32 sclr.s32
#define _33 sclr.s33
#define _34 sclr.s34
#define _41 sclr.s41
#define _42 sclr.s42
#define _43 sclr.s43
#define _44 sclr.s44

/** 3x3 matrix */
struct Matrix3
{
  union {
    struct { float s11,s12,s13,
                   s21,s22,s23,
                   s31,s32,s33; } sclr;
    float m[3][3];
  };
  static const Matrix3 Identity;

  Vector3D& baseRow(int i) { return *((Vector3D*)m[i]); }
  float  operator() (int i, int j) const { return m[i][j]; }
  float& operator() (int i, int j)       { return m[i][j]; }
};

/** 4x4 matrix, used for transformations. */
struct Matrix3D
{
  union {
    struct { float s11,s12,s13,s14,
                   s21,s22,s23,s24,
                   s31,s32,s33,s34,
                   s41,s42,s43,s44; } sclr;
    float m[4][4];
  };
  static const Matrix3D Identity;

  Matrix3D() {}

  Matrix3D(float f11, float f12, float f13, float f14,
           float f21, float f22, float f23, float f24,
           float f31, float f32, float f33, float f34,
           float f41, float f42, float f43, float f44)
  {
    _11=f11; _12=f12; _13=f13; _14=f14;
    _21=f21; _22=f22; _23=f23; _24=f24;
    _31=f31; _32=f32; _33=f33; _34=f34;
    _41=f41; _42=f42; _43=f43; _44=f44;
  }

  Matrix3D& operator*= (const Matrix3D& m)
  {
    return *this = *this * m;
  }

  friend Matrix3D PitchMatrix3D(const float theta);
  friend Matrix3D YawMatrix3D(const float theta);
  friend Matrix3D RollMatrix3D(const float theta);
  void rotate(const Vector3D& v);

  Matrix3D Inverse() const;
  Matrix3D Adjoint() const;
  float Determinant() const;

  float  operator() (int i, int j) const { return m[i][j]; }
  float& operator() (int i, int j)       { return m[i][j]; }
};

/** 3D Plane.  Used in conjunction with triangles. */
struct Plane
{
  Vector3D normal;
  float    d;

  Plane(const Vector3D& a, const Vector3D& b, const Vector3D& c)
  {
    normal = CrossProduct(b - a, c - a).Normalized();
    d = -normal * a;
  }

  float Classify(const Vector3D& v)
  {
    return v * normal + d;
  }
};

inline Vector3D operator* (float scalar, const Vector3D& v)
{
  return Vector3D(scalar*v.x,scalar*v.y,scalar*v.z);
}

inline Vector3D operator+ (const Vector3D& v1, const Vector3D& v2)
{
  return Vector3D(v1.x+v2.x,v1.y+v2.y,v1.z+v2.z);
}

inline Vector3D operator- (const Vector3D& v1, const Vector3D& v2)
{
  return Vector3D(v1.x-v2.x,v1.y-v2.y,v1.z-v2.z);
}

inline float operator* (const Vector3D& v1, const Vector3D& v2)
{
  return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
}

inline Vector3D CrossProduct(const Vector3D& v1, const Vector3D& v2)
{
  return Vector3D(v1.y*v2.z-v2.y*v1.z,
                  v1.z*v2.x-v2.z*v1.x,
                  v1.x*v2.y-v2.x*v1.y);
}

inline Vector3D Transform(const Vector3D& v, const Matrix3D& m)
{
  return Vector3D(v.x*m._11 + v.y*m._21 + v.z*m._31 + m._41,
                  v.x*m._12 + v.y*m._22 + v.z*m._32 + m._42,
                  v.x*m._13 + v.y*m._23 + v.z*m._33 + m._43);
}

inline Vector3D rotateVector(const Vector3D& v, const Matrix3D& m)
{
  return Vector3D(v.x*m._11 + v.y*m._21 + v.z*m._31,
                  v.x*m._12 + v.y*m._22 + v.z*m._32,
                  v.x*m._13 + v.y*m._23 + v.z*m._33);
}

inline Matrix3D operator*(float scalar, const Matrix3D& m)
{
  return Matrix3D(scalar*m(0,0),scalar*m(0,1),scalar*m(0,2),scalar*m(0,3),
                  scalar*m(1,0),scalar*m(1,1),scalar*m(1,2),scalar*m(1,3),
                  scalar*m(2,0),scalar*m(2,1),scalar*m(2,2),scalar*m(2,3),
                  scalar*m(3,0),scalar*m(3,1),scalar*m(3,2),scalar*m(3,3));
}

inline Matrix3D operator*(const Matrix3D& m1, const Matrix3D& m2)
{
  return Matrix3D(
    m1._11*m2._11 + m1._12*m2._21 + m1._13*m2._31 + m1._14*m2._41,
    m1._11*m2._12 + m1._12*m2._22 + m1._13*m2._32 + m1._14*m2._42,
    m1._11*m2._13 + m1._12*m2._23 + m1._13*m2._33 + m1._14*m2._43,
    m1._11*m2._14 + m1._12*m2._24 + m1._13*m2._34 + m1._14*m2._44,
    m1._21*m2._11 + m1._22*m2._21 + m1._23*m2._31 + m1._24*m2._41,
    m1._21*m2._12 + m1._22*m2._22 + m1._23*m2._32 + m1._24*m2._42,
    m1._21*m2._13 + m1._22*m2._23 + m1._23*m2._33 + m1._24*m2._43,
    m1._21*m2._14 + m1._22*m2._24 + m1._23*m2._34 + m1._24*m2._44,
    m1._31*m2._11 + m1._32*m2._21 + m1._33*m2._31 + m1._34*m2._41,
    m1._31*m2._12 + m1._32*m2._22 + m1._33*m2._32 + m1._34*m2._42,
    m1._31*m2._13 + m1._32*m2._23 + m1._33*m2._33 + m1._34*m2._43,
    m1._31*m2._14 + m1._32*m2._24 + m1._33*m2._34 + m1._34*m2._44,
    m1._41*m2._11 + m1._42*m2._21 + m1._43*m2._31 + m1._44*m2._41,
    m1._41*m2._12 + m1._42*m2._22 + m1._43*m2._32 + m1._44*m2._42,
    m1._41*m2._13 + m1._42*m2._23 + m1._43*m2._33 + m1._44*m2._43,
    m1._41*m2._14 + m1._42*m2._24 + m1._43*m2._34 + m1._44*m2._44);
}

inline void
Matrix3D::rotate(const Vector3D& v)
{
   if (v.x!=0.0f) *this = PitchMatrix3D(v.x) * (*this);
   if (v.y!=0.0f) *this = YawMatrix3D  (v.y) * (*this);
   if (v.z!=0.0f) *this = RollMatrix3D (v.z) * (*this);
}

inline Matrix3D
TranslateMatrix3D(const Vector3D& v)
{
  return Matrix3D(1.0f,0.0f,0.0f,0.0f,
                  0.0f,1.0f,0.0f,0.0f,
                  0.0f,0.0f,1.0f,0.0f,
                   v.x, v.y, v.z,1.0f);
}


inline Matrix3D
ScaleMatrix3D(const Vector3D& v)
{
   return Matrix3D( v.x,0.0f,0.0f,0.0f,
                   0.0f, v.y,0.0f,0.0f,
                   0.0f,0.0f, v.z,0.0f,
                   0.0f,0.0f,0.0f,1.0f);
}


inline Matrix3D
ScaleMatrix3D(const float s)
{
   return ScaleMatrix3D(Vector3D(s,s,s));
}


inline Matrix3D
PitchMatrix3D(const float c, const float s)
{
   return Matrix3D(1.0f, 0.0f, 0.0f, 0.0f,
                   0.0f,    c,   -s, 0.0f,
                   0.0f,    s,    c, 0.0f,
                   0.0f, 0.0f, 0.0f, 1.0f);
}


inline Matrix3D
PitchMatrix3D(const float theta)
{
   return PitchMatrix3D((float) cos(theta), (float) sin(theta));
}


inline Matrix3D
YawMatrix3D(const float c, const float s)
{
   return Matrix3D(   c, 0.0f,    s, 0.0f,
                   0.0f, 1.0f, 0.0f, 0.0f,
                     -s, 0.0f,    c, 0.0f,
                   0.0f, 0.0f, 0.0f, 1.0f);
}


inline Matrix3D
YawMatrix3D(const float theta)
{
   return YawMatrix3D((float) cos(theta), (float) sin(theta));
}


inline Matrix3D
RollMatrix3D(const float c, const float s)
{
   return Matrix3D(c,   -s,    0.0f, 0.0f,
                   s,    c,    0.0f, 0.0f,
                   0.0f, 0.0f, 1.0f, 0.0f,
                   0.0f, 0.0f, 0.0f, 1.0f);
}


inline Matrix3D
RollMatrix3D(const float theta)
{
   return RollMatrix3D((float) cos(theta), (float) sin(theta));
}


template<class T>
inline T Max(T a, T b)
{
  return (a>b ? a : b);
}

template<class T>
inline T Min(T a, T b)
{
  return (a<b ? a : b);
}

#undef _11
#undef _12
#undef _13
#undef _14
#undef _21
#undef _22
#undef _23
#undef _24
#undef _31
#undef _32
#undef _33
#undef _34
#undef _41
#undef _42
#undef _43
#undef _44

#endif // H_MATH3D

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆成人免费电影| 亚洲欧美电影一区二区| 亚洲va欧美va人人爽| 91麻豆视频网站| 国产精品二区一区二区aⅴ污介绍| 国产美女在线精品| 久久久影视传媒| 国产乱子轮精品视频| 久久久久高清精品| 大胆欧美人体老妇| 中文字幕日本不卡| 91福利精品视频| 亚洲成人中文在线| 91精品久久久久久蜜臀| 秋霞电影网一区二区| 日韩亚洲欧美一区二区三区| 美美哒免费高清在线观看视频一区二区 | 国产精品久久久久久亚洲毛片 | 无码av免费一区二区三区试看 | 欧美日韩免费观看一区三区| 亚洲成人一区在线| 欧美一区二区三区四区视频| 麻豆国产欧美一区二区三区| 久久久久久久一区| 波多野结衣91| 亚洲电影你懂得| 欧美v国产在线一区二区三区| 国产一区二区不卡老阿姨| 亚洲国产成人午夜在线一区 | 成人av在线播放网址| 亚洲女人小视频在线观看| 欧美性一二三区| 久久精品国产免费看久久精品| 国产欧美综合色| 在线观看av不卡| 九九九久久久精品| 欧美激情中文字幕一区二区| 色婷婷国产精品久久包臀 | 成人免费三级在线| 亚洲国产精品欧美一二99| 日韩精品一区二区三区中文不卡| 国产凹凸在线观看一区二区| 亚洲午夜久久久久中文字幕久| 精品国产制服丝袜高跟| 色哟哟精品一区| 伦理电影国产精品| 亚洲欧美日韩精品久久久久| 精品国精品自拍自在线| 一本大道久久精品懂色aⅴ| 久久av资源网| 一级日本不卡的影视| 久久综合久久99| 欧美日韩一区精品| 成人午夜看片网址| 蜜桃精品在线观看| 亚洲国产欧美在线| 国产精品狼人久久影院观看方式| 91麻豆精品国产自产在线 | 亚洲在线观看免费| 欧美极品aⅴ影院| 精品久久久影院| 欧美日本一区二区在线观看| 成人动漫一区二区| 精品在线一区二区| 日日嗨av一区二区三区四区| 亚洲欧美在线视频| 久久久久久久久岛国免费| 67194成人在线观看| 色欧美片视频在线观看| 国产成人av自拍| 国内精品伊人久久久久av一坑| 亚洲成年人影院| 亚洲男帅同性gay1069| 国产精品视频一二三区 | 亚洲国产美女搞黄色| 亚洲图片激情小说| 亚洲国产精品精华液2区45| 精品欧美一区二区在线观看| 4438x成人网最大色成网站| 欧美色综合网站| 91九色最新地址| 99国产精品久久久久久久久久 | 亚洲国产精品t66y| 26uuu精品一区二区| 日韩欧美一区二区不卡| 宅男在线国产精品| 这里只有精品视频在线观看| 欧美撒尿777hd撒尿| 欧美色网站导航| 欧美三级视频在线观看| 在线精品视频一区二区| 色婷婷国产精品综合在线观看| 99麻豆久久久国产精品免费 | 亚洲国产精品一区二区尤物区| 一区二区三区四区视频精品免费 | 国产精品一线二线三线| 激情文学综合丁香| 韩国成人精品a∨在线观看| 美日韩一区二区| 国产精品综合在线视频| 国产成人在线色| 成人爱爱电影网址| 91在线观看污| 欧美日韩一区二区欧美激情| 在线播放中文字幕一区| 日韩精品在线网站| 中文字幕第一区| 亚洲欧美日本韩国| 午夜私人影院久久久久| 奇米色一区二区三区四区| 国内精品免费**视频| 国产一区二区在线影院| 成人性色生活片免费看爆迷你毛片| 成人毛片在线观看| 欧美性色黄大片| 日韩欧美精品在线视频| 日本一区二区三区高清不卡| 亚洲日本va午夜在线影院| 亚洲风情在线资源站| 久久99这里只有精品| 成人影视亚洲图片在线| 欧美色综合影院| 久久久久久一级片| 国产精品久久久久久久久快鸭 | 粉嫩av一区二区三区在线播放| 91女厕偷拍女厕偷拍高清| 欧美日韩亚洲综合| 久久天堂av综合合色蜜桃网| 亚洲人成精品久久久久久| 日韩高清电影一区| 风间由美一区二区三区在线观看 | 香蕉乱码成人久久天堂爱免费| 麻豆国产欧美一区二区三区| 波多野结衣中文一区| 欧美精品丝袜中出| 欧美高清在线视频| 日韩二区三区四区| 成人深夜视频在线观看| 在线不卡一区二区| 成人免费在线播放视频| 美女在线视频一区| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 26uuu亚洲综合色| 亚洲妇熟xx妇色黄| 国产福利一区二区三区视频在线| 欧美三级日韩在线| 最新久久zyz资源站| 久久www免费人成看片高清| 色综合久久综合中文综合网| 精品国产露脸精彩对白| 午夜精品一区二区三区电影天堂 | 亚洲狠狠爱一区二区三区| 国产成人免费视频网站高清观看视频| 欧美午夜在线一二页| 国产精品乱码一区二区三区软件| 欧美aa在线视频| 欧美午夜精品免费| 亚洲女爱视频在线| 国产成人精品免费一区二区| 欧美一区二区视频在线观看2020 | 欧美一区二区三区视频| 亚洲乱码国产乱码精品精的特点| 国产夫妻精品视频| 精品国产乱码久久久久久牛牛| 午夜精品视频在线观看| 在线精品视频免费播放| 自拍偷自拍亚洲精品播放| 成人国产视频在线观看| 中文字幕乱码久久午夜不卡| 狠狠色丁香婷婷综合久久片| 日韩一区二区三区三四区视频在线观看| 综合在线观看色| 91在线观看成人| 亚洲欧美日韩久久精品| 不卡欧美aaaaa| 国产精品麻豆网站| 成人h动漫精品| 国产精品污污网站在线观看| 国模大尺度一区二区三区| 精品少妇一区二区三区视频免付费| 五月综合激情网| 欧美一区二区三区在| 肉丝袜脚交视频一区二区| 欧美手机在线视频| 激情五月播播久久久精品| 91精品国产综合久久香蕉的特点 | 91麻豆精品国产91久久久资源速度 | 97超碰欧美中文字幕| 亚洲欧洲成人精品av97| 99国产精品久久| 一个色在线综合| 欧美日韩精品三区| 日韩精品91亚洲二区在线观看 | 欧美电影免费观看高清完整版在 | 91看片淫黄大片一级| 亚洲自拍偷拍网站| 91精品国产综合久久小美女| 麻豆精品在线看| 久久无码av三级| 99久久99久久免费精品蜜臀|