Exemplo n.º 1
0
        public static CCoordObj RotatePoint(CCoordObj point, CCoordObj center, CCoordObj rotation)
        {
            var cosa = Math.Cos(CCoordObj.DegreesToRadians(-rotation.xPos));
            var sina = Math.Sin(CCoordObj.DegreesToRadians(-rotation.xPos));

            var cosb = Math.Cos(CCoordObj.DegreesToRadians(-rotation.yPos));
            var sinb = Math.Sin(CCoordObj.DegreesToRadians(-rotation.yPos));

            var cosc = Math.Cos(CCoordObj.DegreesToRadians(-rotation.zPos));
            var sinc = Math.Sin(CCoordObj.DegreesToRadians(-rotation.zPos));

            var Axx = cosa * cosb;
            var Axy = cosa * sinb * sinc - sina * cosc;
            var Axz = cosa * sinb * cosc + sina * sinc;

            var Ayx = sina * cosb;
            var Ayy = sina * sinb * sinc + cosa * cosc;
            var Ayz = sina * sinb * cosc - cosa * sinc;

            var Azx = -sinb;
            var Azy = cosb * sinc;
            var Azz = cosb * cosc;

            var endRot = new CCoordObj(Axx * point.xPos + Axy * point.yPos + Axz * point.zPos, Ayx * point.xPos + Ayy * point.yPos + Ayz * point.zPos, Azx * point.xPos + Azy * point.yPos + Azz * point.zPos);

            return(endRot);
        }
Exemplo n.º 2
0
 //render all verts in a face
 void RenderFace(Face face)
 {
     for (int i = 0; i < face.vertices.Count; i++)
     {
         //move object to center before rotating
         var sPos = face.parentObject.cPos;
         face.parentObject.cPos = new CCoordObj(0, 0, 0);
         var pos       = face.vertices[i];
         var summedPos = new CCoordObj(pos.xPos + face.parentObject.cPos.xPos, pos.yPos + face.parentObject.cPos.yPos, pos.zPos + face.parentObject.cPos.zPos);
         //rotate vert around object center
         var rotatedPos = CCoordObj.RotatePoint(summedPos, face.parentObject.cPos, face.parentObject.cRot);
         RenderPosition((int)Math.Round(rotatedPos.xPos + sPos.xPos), (int)Math.Round(rotatedPos.yPos + sPos.yPos));
         //reset object position
         face.parentObject.cPos = sPos;
     }
 }
Exemplo n.º 3
0
 //create new prefab
 RenderObject Instantiate(string type, CCoordObj position, CCoordObj rotation, CCoordObj scale)
 {
     if (type == "plane")
     {
         var o = new RenderObject();
         var f = new Face();
         f.vertices.Add(new CCoordObj(-scale.xPos, -scale.yPos, scale.zPos));
         f.vertices.Add(new CCoordObj(-scale.xPos, scale.yPos, scale.zPos));
         f.vertices.Add(new CCoordObj(scale.xPos, scale.yPos, scale.zPos));
         f.vertices.Add(new CCoordObj(scale.xPos, -scale.yPos, scale.zPos));
         f.parentObject = o;
         o.cPos         = position;
         o.cRot         = rotation;
         o.faces.Add(f);
         return(o);
     }
     if (type == "testobj")
     {
         //plane with a second smaller plane inside
         var o = new RenderObject();
         var f = new Face();
         f.vertices.Add(new CCoordObj(-scale.xPos, -scale.yPos, scale.zPos));
         f.vertices.Add(new CCoordObj(0, scale.yPos, scale.zPos));
         f.vertices.Add(new CCoordObj(scale.xPos, -scale.yPos, scale.zPos));
         f.parentObject = o;
         o.faces.Add(f);
         var f2 = new Face();
         f2.vertices.Add(new CCoordObj(-scale.xPos * 0.2f, -scale.yPos * 0.2f, scale.zPos));
         f2.vertices.Add(new CCoordObj(-scale.xPos * 0.2f, scale.yPos * 0.2f, scale.zPos));
         f2.vertices.Add(new CCoordObj(scale.xPos * 0.2f, scale.yPos * 0.2f, scale.zPos));
         f2.vertices.Add(new CCoordObj(scale.xPos * 0.2f, -scale.yPos * 0.2f, scale.zPos));
         f2.parentObject = o;
         o.cPos          = position;
         o.cRot          = rotation;
         o.faces.Add(f2);
         return(o);
     }
     else
     {
         return(null);
     }
 }