Exemple #1
0
 //============================================================
 // <T>加载配置信息。</T>
 //
 // @param xconfig 配置信息
 //============================================================
 public void LoadSingleConfig(FXmlNode xconfig)
 {
     // 读取设置
     if (xconfig.Contains("translation"))
     {
         SFloatVector3 translation = new SFloatVector3();
         translation.Parse(xconfig.Get("translation"));
         tx = translation.X;
         ty = translation.Y;
         tz = translation.Z;
     }
     if (xconfig.Contains("rotation"))
     {
         SFloatVector3 rotation = new SFloatVector3();
         rotation.Parse(xconfig.Get("rotation"));
         rx = rotation.X;
         ry = rotation.Y;
         rz = rotation.Z;
     }
     if (xconfig.Contains("scale"))
     {
         SFloatVector3 scale = new SFloatVector3();
         scale.Parse(xconfig.Get("scale"));
         sx = scale.X;
         sy = scale.Y;
         sz = scale.Z;
     }
     // 更新数据
     Update();
 }
Exemple #2
0
 //============================================================
 // <T>向量数乘</T>
 //
 // @params value 要相乘的向量
 //============================================================
 public void Move(SFloatVector3 value, float distince)
 {
     tx   += distince * value.X;
     ty   += distince * value.Y;
     tz   += distince * value.Z;
     dirty = true;
 }
Exemple #3
0
        //============================================================
        // <T>标准化<T/>
        //============================================================
        public SFloatVector3 Cross(SFloatVector3 value)
        {
            value.Normalize();
            SFloatVector3 result = new SFloatVector3();

            result.X = (Y * value.Z) - (Z * value.Y);
            result.Y = (Z * value.X) - (X * value.Z);
            result.Z = (X * value.Y) - (Y * value.X);
            result.Normalize();
            return(result);
        }
Exemple #4
0
        //============================================================
        public float Angle(SFloatVector3 value)
        {
            // 计算两单位向量点乘
            SFloatVector3 value1 = new SFloatVector3(X, Y, Z);

            value1.Normalize();
            SFloatVector3 value2 = new SFloatVector3(value.X, value.Y, value.Z);

            value2.Normalize();
            // 计算夹角
            float cos = value1.Dot(value2);

            return((float)Math.Acos(cos));
        }
Exemple #5
0
 //============================================================
 // <T>反序列化数据信息。</T>
 //
 // @param p:input 输入数据流
 //============================================================
 public void UpdateAll(SFloatPoint3 pt, SFloatVector3 pd, SFloatVector3 ps)
 {
     // 读取平移信息
     tx = pt.X;
     ty = pt.Y;
     tz = pt.Z;
     // 读取旋转弧度
     rx = pd.X;
     ry = pd.Y;
     rz = pd.Z;
     // 读取缩放信息
     sx = ps.X;
     sy = ps.Y;
     sz = ps.Z;
     // 更新信息
     UpdateForce();
 }
Exemple #6
0
 //============================================================
 // <T>设置平移内容。</T>
 //============================================================
 public void Transform3x3Vector3(SFloatVector3 output, SFloatVector3 input)
 {
     output.X = (input.X * data[0]) + (input.Y * data[4]) + (input.Z * data[8]);
     output.Y = (input.X * data[1]) + (input.Y * data[5]) + (input.Z * data[9]);
     output.Z = (input.X * data[2]) + (input.Y * data[6]) + (input.Z * data[10]);
 }
Exemple #7
0
 //============================================================
 public float Dot(SFloatVector3 value)
 {
     return((X * value.X) + (Y * value.Y) + (Z * value.Z));
 }
Exemple #8
0
 //============================================================
 public void Add(SFloatVector3 vector)
 {
     X += vector.X;
     Y += vector.Y;
     Z += vector.Z;
 }
Exemple #9
0
 //============================================================
 public void Assign(SFloatVector3 value)
 {
     X = value.X;
     Y = value.Y;
     Z = value.Z;
 }
Exemple #10
0
 //============================================================
 // <T>标准化<T/>
 //============================================================
 public void Cross(SFloatVector3 value, SFloatVector3 result)
 {
     result.X = (Y * value.Z) - (Z * value.Y);
     result.Y = (Z * value.X) - (X * value.Z);
     result.Z = (X * value.Y) - (Y * value.X);
 }