Exemplo n.º 1
0
        private static Face[] trianguliza(Face face, ObjObject obj)
        {
            Face[] retFaces = new Face[face.Nodes - 3];
            uint   faces    = 0;
            uint   node     = 0;

            while (face.Nodes > 3)
            {
                uint right = node + 1;
                right %= face.Nodes;
                uint left = node == 0 ? face.Nodes - 1 : node - 1;
                bool ear  = isEar(node, left, right, face, obj);

                if (ear)
                {
                    retFaces[faces] = new Face(face.FaceId);

                    retFaces[faces].AddNode(face.Node[node]);
                    retFaces[faces].AddNode(face.Node[right]);
                    retFaces[faces].AddNode(face.Node[left]);

                    face.RemoveNode(node);
                    faces++;
                }

                node++;
                node %= face.Nodes;
            }

            return(retFaces);
        }
Exemplo n.º 2
0
        public override bool OnMouse(int button, int state, int x, int y)
        {
            if (button == Glut.GLUT_LEFT_BUTTON && (state == Glut.GLUT_DOWN || state == Glut.GLUT_UP))
            {
//                MouseWorld = RenderLayerGame.ConvertScreenToWorldCoordsNoDepth(x, y, Camera.ViewMatrix, projectionMatrix, Vector3.Zero);
                MouseWorld = RenderLayerGame.ConvertScreenToWorldCoordsNoDepth(x, y, Matrix4.Identity, projectionMatrix,
                                                                               Vector3.Zero, TheRenderStatus);

                foreach (ObjHudPanel aHudObject in theHudPanels)
                {
                    ObjObject tempObj = aHudObject.IsOn((int)MouseWorld.x, (int)MouseWorld.y);
                    if (tempObj != null)
                    {
                        if (tempObj is ObjHudButton)
                        {
                            Tile.TileIds tempTileId;
                            string       tempTileIdName = (string)((ObjHudButton)tempObj).Tag;
                            if (Tile.TileIds.TryParse(tempTileIdName, true, out tempTileId))
                            {
                                selectedTileId = tempTileId;
                                selectedObjHudButton.Material = TheResourceManager.Get("Tile_" + tempTileIdName);
                            }
                        }

                        GameCore.TheGameCore.RaiseMessage("Mouse: [" + x + "," + y + "] on HUD: " + tempObj + ".");
                        return(true);
                    }
                }
            }
            return(false);
        }
Exemplo n.º 3
0
        private static List <ObjObject> GetObjObjects(ShaderProgram aProgram, List <ObjData> tempObjData,
                                                      List <MtlData> tempMtlDatas, string fileDirectory)
        {
            List <ObjObject> temObjObjects = new List <ObjObject>();


            int vertexOffset = 0;
            int uVOffset     = 0;
            int normalOffset = 0;

            foreach (ObjData anObjData in tempObjData)
            {
                MeshData tempMeshData = ParseFromLines(anObjData.Lines, vertexOffset, uVOffset, normalOffset);
                vertexOffset += tempMeshData.Vertices.Length;
                uVOffset     += tempMeshData.TexCoords.Length;
                normalOffset += tempMeshData.Normals.Length;

                ObjObject tempObjObject = tempMeshData.ToObjObject();
                tempObjObject.Name = anObjData.Name;

                // Add the material
                if (tempMtlDatas != null)
                {
                    MtlData     tempMtlData         = tempMtlDatas.Find(x => x.Name == anObjData.UseMtl);
                    ObjMaterial tempMat             = new ObjMaterial(aProgram, tempMtlData);
                    string      tempDiffuseTextPath = Path.Combine(fileDirectory, tempMtlData.DiffuseMapFileName);
                    Texture     tempTexture         = new Texture(tempDiffuseTextPath);
                    tempMat.DiffuseMap     = tempTexture;
                    tempObjObject.Material = tempMat;
                }

                temObjObjects.Add(tempObjObject);
            }
            return(temObjObjects);
        }
Exemplo n.º 4
0
 public ObjObject IsOn(int x, int y)
 {
     foreach (ObjHudButton anHudButton in theHudButtons)
     {
         ObjObject temp = anHudButton.IsOn(x, y);
         if (temp != null)
         {
             return(temp);
         }
     }
     return(theRectangle.Contains(x, y) ? this : null);
 }
Exemplo n.º 5
0
        private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
        {
            ObjObject obj = (ObjObject)e.Node.Tag;

            if (obj == null)
            {
                return;
            }
            if (e.Label == null)
            {
                return;
            }
            obj.setName(e.Label);
            TreeNode nodeObject = e.Node.Parent.Parent;

            nodeObject.Text = "Object " + m.getObjectIndex(obj).ToString() + " - \"" + obj.getName() + "\"";
        }
Exemplo n.º 6
0
        public ObjObject ToObjObject()
        {
            Vector3[] verts;
            Vector3[] norms;
            Vector2[] texcoords;
            int[]     indices;
            OpenGLArrays(out verts, out norms, out texcoords, out indices);

            ObjObject tempObjObject = new ObjObject(new ObjectVectors()
            {
                Vertex      = verts,
                Uvs         = texcoords,
                ElementData = indices,
                normalData  = norms
            });

            return(tempObjObject);
        }
Exemplo n.º 7
0
        private static bool isEar(uint p1, uint p2, uint p3, Face face, ObjObject obj)
        {
            bool    isEar = true;
            Vector3 a     = obj.Vertex[face.Node[p1].Vertex];
            Vector3 b     = obj.Vertex[face.Node[p2].Vertex];
            Vector3 c     = obj.Vertex[face.Node[p3].Vertex];

            for (int i = 0; i < face.Nodes && isEar; i++)
            {
                if (i != p1 && i != p2 && i != p3)
                {
                    Vector3 p = obj.Vertex[face.Node[i].Vertex];
                    isEar = !(sameSide(p, a, b, c) &&
                              sameSide(p, b, a, c) &&
                              sameSide(p, c, a, b));
                }
            }

            return(isEar);
        }
Exemplo n.º 8
0
        private void ConvertButton_Click(object sender, RoutedEventArgs e)
        {
            string mshFile = System.IO.Path.ChangeExtension(filePath, "clmsh");

            Progress.IsEnabled = true;
            StatusBlock.Text  += "\r\n";
            StatusBlock.Text  += "\r\nLoading obj-file";
            ObjObject obj = ObjFileHandler.LoadObjFromText(File.ReadAllLines(filePath));

            StatusBlock.Text += "\r\nObject loaded!";
            StatusBlock.Text += "\r\nConverting object to CelestialMesh!";
            Progress.Value   += 25;
            CLMSH mesh = CLMSHLoader.ConvertOBJ(obj);

            StatusBlock.Text += "\r\nObject converted!";
            StatusBlock.Text += "\r\nSaving file to:";
            StatusBlock.Text += "\r\n" + mshFile;
            Progress.Value   += 50;
            CLMSHFileHandler.ExportMesh(mshFile, mesh);
            StatusBlock.Text       += "\r\n";
            StatusBlock.Text       += "\r\n!!File Converted!!";
            Progress.Value         += 25;
            ConvertButton.IsEnabled = false;
        }
Exemplo n.º 9
0
        public static CLMSH ConvertOBJ(ObjObject obj)
        {
            tempVertex[] newVertices = new tempVertex[obj.Vertices];
            bool[]       inited      = new bool[obj.Vertices];
            uint         indices     = 256;

            uint[] indexBuffer = new uint[256];
            uint   index       = 0;

            Vector3 maxData = obj.Vertex[0];
            Vector3 minData = obj.Vertex[0];

            for (uint i = 0; i < obj.Vertices; i++)
            {
                inited[i] = false;

                if (maxData.x < obj.Vertex[i].x)
                {
                    maxData.x = obj.Vertex[i].x;
                }

                if (maxData.y < obj.Vertex[i].y)
                {
                    maxData.y = obj.Vertex[i].y;
                }

                if (maxData.z < obj.Vertex[i].z)
                {
                    maxData.z = obj.Vertex[i].z;
                }

                if (minData.x > obj.Vertex[i].x)
                {
                    minData.x = obj.Vertex[i].x;
                }

                if (minData.y > obj.Vertex[i].y)
                {
                    minData.y = obj.Vertex[i].y;
                }

                if (minData.z > obj.Vertex[i].z)
                {
                    minData.z = obj.Vertex[i].z;
                }
            }

            Vector3 dims = new Vector3();

            dims.x = maxData.x - minData.x;
            dims.y = maxData.y - minData.y;
            dims.z = maxData.z - minData.z;

            for (uint i = 0; i < obj.Faces; i++)
            {
                uint faceId   = index / 3;
                Face faceHere = obj.Face[i];

                for (uint k = 0; k < faceHere.Nodes; k++)
                {
                    FaceNode node = faceHere.Node[k];

                    if (!inited[node.Vertex])
                    {
                        inited[node.Vertex]                  = true;
                        newVertices[node.Vertex]             = new tempVertex(obj.Vertex[node.Vertex], obj.NormalVertex[node.NormalVertex], obj.TextureVertex[node.TextureVertex], faceId, faceHere.FaceId);
                        newVertices[node.Vertex].position.x /= dims.x;
                        newVertices[node.Vertex].position.y /= dims.y;
                        newVertices[node.Vertex].position.z /= dims.z;
                    }

                    newVertices[node.Vertex].AddFace(obj.NormalVertex[node.NormalVertex], faceId, faceHere.FaceId);

                    if (index >= indices)
                    {
                        indices += 256;
                        Array.Resize <uint>(ref indexBuffer, (int)indices);
                    }

                    indexBuffer[index] = node.Vertex;
                    index++;
                }
            }

            CLMSH retVal = new CLMSH(dims);

            for (uint i = 0; i < obj.Vertices; i++)
            {
                float normalLength = (float)Math.Sqrt(
                    Math.Pow(newVertices[i].normal.x, 2) +
                    Math.Pow(newVertices[i].normal.y, 2) +
                    Math.Pow(newVertices[i].normal.z, 2));

                newVertices[i].normal.x /= normalLength;
                newVertices[i].normal.y /= normalLength;
                newVertices[i].normal.z /= normalLength;

                Vertex v = new Vertex();
                v.pos  = newVertices[i].position;
                v.uv   = newVertices[i].uv;
                v.norm = newVertices[i].normal;
                retVal.AddVertex(v);
            }

            for (uint i = 0; i < index; i++)
            {
                tempVertex tv       = newVertices[indexBuffer[i]];
                uint       faceHere = i / 3;
                uint       next     = faceHere * 3 + ((i + 1) % 3);
                retVal.AddIndex(indexBuffer[i]);
                bool foundNeighbour = false;
                uint nIndex         = 0;

                for (uint k = 0; k < tv.nrFaces && !foundNeighbour; k++)
                {
                    uint faceStart = tv.faces[k] * 3;

                    for (uint j = 0; j < 3 && !foundNeighbour; j++)
                    {
                        foundNeighbour = indexBuffer[faceStart + j] == indexBuffer[next] &&
                                         tv.faces[k] != faceHere;

                        if (foundNeighbour)
                        {
                            for (int h = 0; h < 3; h++)
                            {
                                if (indexBuffer[faceStart + h] != indexBuffer[i] &&
                                    indexBuffer[faceStart + h] != indexBuffer[next])
                                {
                                    nIndex = indexBuffer[faceStart + h];
                                }
                            }
                        }
                    }
                }

                if (!foundNeighbour)
                {
                    nIndex = indexBuffer[i];
                }

                retVal.AddIndex(nIndex);
            }

            return(retVal);
        }
Exemplo n.º 10
0
        public static ObjGroupSkyBox GetNewSkyBox1(ShaderProgram program)
        {
            ObjGroupSkyBox tempObjGroupSkyBox = new ObjGroupSkyBox(program);

            tempObjGroupSkyBox.ClearObjects();


            ObjMaterial tempMat =
                GameCore.TheGameCore.TheRendererManager.TheRenderer.TheResourceManager.GetFromFile(program,
                                                                                                   @".\SkyBoxes\SkyBox-Clouds-Few-Noon.png", false);

            float dist   = 0.5f;
            float distz  = 0.45f;
            float distz0 = -0.05f;


            ObjectVectors tempVectors = new ObjectVectors(); // TOP ?

            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz, -dist),
                new Vector3(dist, distz, -dist),
                new Vector3(-dist, distz, dist),
                new Vector3(dist, distz, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(0.25, 0.25),
                new Vector2(0.75, 0.25),
                new Vector2(0.25, 0.75),
                new Vector2(0.75, 0.75),
            };

            ObjObject tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };

            tempObjGroupSkyBox.AddObject(tempObj);

            tempVectors            = new ObjectVectors(); // Left
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz0, -dist),
                new Vector3(-dist, distz, -dist),
                new Vector3(-dist, distz0, dist),
                new Vector3(-dist, distz, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(0.0, 0.25),
                new Vector2(0.25, 0.25),
                new Vector2(0.0, 0.75),
                new Vector2(0.25, 0.75),
            };

            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);

            tempVectors            = new ObjectVectors(); // Back
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz0, -dist),
                new Vector3(-dist, distz, -dist),
                new Vector3(dist, distz0, -dist),
                new Vector3(dist, distz, -dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(0.25, 0.0),
                new Vector2(0.25, 0.25),
                new Vector2(0.75, 0.0),
                new Vector2(0.75, 0.25),
            };

            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);


            tempVectors            = new ObjectVectors(); // Right
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(dist, distz0, -dist),
                new Vector3(dist, distz, -dist),
                new Vector3(dist, distz0, dist),
                new Vector3(dist, distz, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(1.0, 0.25),
                new Vector2(0.75, 0.25),
                new Vector2(1.0, 0.75),
                new Vector2(0.75, 0.75),
            };

            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);


            tempVectors            = new ObjectVectors(); // Front
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz0, dist),
                new Vector3(-dist, distz, dist),
                new Vector3(dist, distz0, dist),
                new Vector3(dist, distz, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(0.25, 1.0),
                new Vector2(0.25, 0.75),
                new Vector2(0.75, 1.0),
                new Vector2(0.75, 0.75),
            };

            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);

            return(tempObjGroupSkyBox);
        }
Exemplo n.º 11
0
        /// <summary>
        ///     Loads a single image texture into the skybox this will probably always result in visibale seams.
        ///     Image 4x3
        ///     |       |       |
        ///     |  Top  |       |
        ///     -------------------------------
        ///     Left   | Front | Right | Back
        ///     |       |       |
        ///     -------------------------------
        ///     |Bottom |       |
        ///     |       |       |
        /// </summary>
        /// <param name="program"></param>
        /// <returns></returns>
        public static ObjGroupSkyBox GetNewSkyBox2(ShaderProgram program)
        {
            ObjGroupSkyBox tempObjGroupSkyBox = new ObjGroupSkyBox(program);

            tempObjGroupSkyBox.ClearObjects();


//            ObjMaterial tempMat =
//                GameCore.TheGameCore.TheRendererManager.TheRenderer.theResourceManager.GetFromFile(program,
//                    @".\SkyBoxes\Day_Skybox.png", false);
            ObjMaterial tempMat =
                GameCore.TheGameCore.TheRendererManager.TheRenderer.TheResourceManager.GetFromFile(program,
                                                                                                   @".\SkyBoxes\Above_The_Sea.jpg", false);

            float dist   = 0.5f;
            float distz  = 0.5f;
            float distz0 = -0.5f;


            ObjectVectors tempVectors = new ObjectVectors(); // TOP ?

            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz, -dist),
                new Vector3(dist, distz, -dist),
                new Vector3(-dist, distz, dist),
                new Vector3(dist, distz, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            double aThird   = 0.33;
            double twoThird = 0.66;

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(0.25, aThird),
                new Vector2(0.5, aThird),
                new Vector2(0.25, 0.0),
                new Vector2(0.5, 0.0),
            };


            ObjObject tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };

            tempObjGroupSkyBox.AddObject(tempObj);


            tempVectors            = new ObjectVectors(); // Left
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz0, -dist),
                new Vector3(-dist, distz, -dist),
                new Vector3(-dist, distz0, dist),
                new Vector3(-dist, distz, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(0.25, twoThird),
                new Vector2(0.25, aThird),
                new Vector2(0.0, twoThird),
                new Vector2(0.0, aThird),
            };


            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);

            tempVectors            = new ObjectVectors(); // Back
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz0, -dist),
                new Vector3(-dist, distz, -dist),
                new Vector3(dist, distz0, -dist),
                new Vector3(dist, distz, -dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(0.25, twoThird),
                new Vector2(0.25, aThird),
                new Vector2(0.5, twoThird),
                new Vector2(0.5, aThird),
            };

            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);


            tempVectors            = new ObjectVectors(); // Right
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(dist, distz0, -dist),
                new Vector3(dist, distz, -dist),
                new Vector3(dist, distz0, dist),
                new Vector3(dist, distz, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(0.5, twoThird),
                new Vector2(0.5, aThird),
                new Vector2(0.75, twoThird),
                new Vector2(0.75, aThird),
            };

            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);


            tempVectors            = new ObjectVectors(); // Front
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz0, dist),
                new Vector3(-dist, distz, dist),
                new Vector3(dist, distz0, dist),
                new Vector3(dist, distz, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(1, twoThird),
                new Vector2(1, aThird),
                new Vector2(0.75, twoThird),
                new Vector2(0.75, aThird),
            };

            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);

            tempVectors            = new ObjectVectors(); // Bottom ?
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz0, -dist),
                new Vector3(dist, distz0, -dist),
                new Vector3(-dist, distz0, dist),
                new Vector3(dist, distz0, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(0.25, twoThird),
                new Vector2(0.5, twoThird),
                new Vector2(0.25, 1.0),
                new Vector2(0.5, 1.0),
            };


            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);


            return(tempObjGroupSkyBox);
        }
Exemplo n.º 12
0
        public static ObjGroupSkyBox GetTexturedBox3(ShaderProgram program,
                                                     Dictionary <RenderObjects.BoxSides, Bitmap> aBmpList)
        {
            ObjGroupSkyBox tempObjGroupSkyBox = new ObjGroupSkyBox(program);
            float          dist   = 0.5f;
            float          distz  = 0.5f;
            float          distz0 = -0.5f;


            ObjectVectors tempVectors = new ObjectVectors(); // TOP ?

            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz, -dist),
                new Vector3(dist, distz, -dist),
                new Vector3(-dist, distz, dist),
                new Vector3(dist, distz, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(0.0, 1.0),
                new Vector2(1.0, 1.0),
                new Vector2(0.0, 0.0),
                new Vector2(1.0, 0.0),
            };

            ObjMaterial tempMat = GetObjMaterial(program, aBmpList[RenderObjects.BoxSides.Top]);

            ObjObject tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };

            tempObjGroupSkyBox.AddObject(tempObj);


            tempVectors            = new ObjectVectors(); // Left
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz0, -dist),
                new Vector3(-dist, distz, -dist),
                new Vector3(-dist, distz0, dist),
                new Vector3(-dist, distz, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(1.0, 1.0),
                new Vector2(1.0, 0.0),
                new Vector2(0.0, 1.0),
                new Vector2(0.0, 0.0),
            };

            tempMat = GetObjMaterial(program, aBmpList[RenderObjects.BoxSides.Left]);

            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);

            tempVectors            = new ObjectVectors(); // Back
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz0, -dist),
                new Vector3(-dist, distz, -dist),
                new Vector3(dist, distz0, -dist),
                new Vector3(dist, distz, -dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(0.0, 1.0),
                new Vector2(0.0, 0.0),
                new Vector2(1.0, 1.0),
                new Vector2(1.0, 0.0),
            };

            tempMat = GetObjMaterial(program, aBmpList[RenderObjects.BoxSides.Back]);


            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);

            tempVectors            = new ObjectVectors(); // Right
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(dist, distz0, -dist),
                new Vector3(dist, distz, -dist),
                new Vector3(dist, distz0, dist),
                new Vector3(dist, distz, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(0.0, 1.0),
                new Vector2(0.0, 0.0),
                new Vector2(1.0, 1.0),
                new Vector2(1.0, 0.0),
            };

            tempMat = GetObjMaterial(program, aBmpList[RenderObjects.BoxSides.Right]);

            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);

            tempVectors            = new ObjectVectors(); // Front
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz0, dist),
                new Vector3(-dist, distz, dist),
                new Vector3(dist, distz0, dist),
                new Vector3(dist, distz, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(1.0, 1.0),
                new Vector2(1.0, 0.0),
                new Vector2(0.0, 1.0),
                new Vector2(0.0, 0.0),
            };


            tempMat = GetObjMaterial(program, aBmpList[RenderObjects.BoxSides.Front]);


            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);

            tempVectors            = new ObjectVectors(); // Bottom ?
            tempVectors.Vertex     =
                tempVectors.Vertex = new[]
            {
                new Vector3(-dist, distz0, -dist),
                new Vector3(dist, distz0, -dist),
                new Vector3(-dist, distz0, dist),
                new Vector3(dist, distz0, dist),
            };

            tempVectors.ElementData = new[]
            {
                0, 1, 2,
                1, 3, 2,
            };

            tempVectors.Uvs = new Vector2[]
            {
                new Vector2(0.0, 0.0),
                new Vector2(1.0, 0.0),
                new Vector2(0.0, 1.0),
                new Vector2(1.0, 1.0),
            };

            tempMat = GetObjMaterial(program, aBmpList[RenderObjects.BoxSides.Bottom]);

            tempObj = new ObjObject(tempVectors)
            {
                Material = tempMat
            };
            tempObjGroupSkyBox.AddObject(tempObj);

            return(tempObjGroupSkyBox);
        }
Exemplo n.º 13
0
        public override void OnLoad()
        {
            GameCore.TheGameCore.TheGameEventHandler += TheGameCore_TheGameEventHandler;


            // create our shader program
            program = new ShaderProgram(VertexShader, FragmentShader);

//            SetupCamera();
//            Camera.SetDirection(new Vector3(0, 0, -1));

            // set up the projection and view matrix
            program.Use();
            projectionMatrix = Matrix4.CreatePerspectiveFieldOfView(TheRenderStatus.Fov,
                                                                    (float)TheRenderStatus.Width / TheRenderStatus.Height, TheRenderStatus.ZNear,
                                                                    TheRenderStatus.ZFar);
            program["projection_matrix"].SetValue(projectionMatrix);
            program["model_matrix"].SetValue(Matrix4.Identity);
            program["light_direction"].SetValue(theEnvironment.LightDirection);
            program["enable_lighting"].SetValue(theEnvironment.Lighting);
            program["ambient"].SetValue(theEnvironment.LightAmbient);

            materialPoint      = TheResourceManager.GetPlainColor(program, "GamePlainRed", Color.Red);
            materialLineMarker = TheResourceManager.GetPlainColor(program, "GamePlainGreenYellow", Color.GreenYellow);

            objMeshs = new List <IObjGroup>();

            ObjGroup tempObjMesh2 = ObjLoader.LoadObjFileToObjMesh(program, @"./Resources/Models/Turret1.obj");

            tempObjMesh2.Location = new Vector3(10, 0, 10);
            tempObjMesh2.Scale    = Vector3.UnitScale * 0.3f;
            objMeshs.Add(tempObjMesh2);

            ObjMaterial tempMaterial = TheResourceManager.GetPlainColor(program, "GamePlainGreen", Color.Green);

            tileTextures = RenderObjects.RenderObjects.CreateTileTextures(new Size(20, 20), program);


            ObjGroup  tempObjGroup = new ObjGroup(program);
            ObjObject tempObj      =
                new ObjObject(ObjectPrimitives.CreateCube(new Vector3(0, 0, 0), new Vector3(1, 1, 1), true))
            {
                Material = tileTextures[Tile.TileIds.Grass].Material
            };

//            ObjObject tempObj = CreateCube(program, new Vector3(1, 1, 1), new Vector3(0, 0, 0));
            tempObjGroup.AddObject(tempObj);
            objMeshs.Add(tempObjGroup);


            tempObjGroup = new ObjGroup(program);
//            tempObj = new ObjObject(ObjectPrimitives.CreateCube(new Vector3(2, 0, 0), new Vector3(3, 1, 1), true))
            tempObj = new ObjObject(ObjectPrimitives.CreateCube(new Vector3(0, 0, 0), new Vector3(1, 1, 1), true))
            {
                Material = tileTextures[Tile.TileIds.Road].Material
            };

            tempObjGroup.AddObject(tempObj);
            tempObjGroup.Location    = new Vector3(1, 0, 5);
            tempObjGroup.Orientation = Quaternion.FromAngleAxis((float)(Math.PI * 0.25), Vector3.Up);
            objMeshs.Add(tempObjGroup);


            tempObjGroup = new ObjGroup(program);
            tempObj      =
                new ObjObject(ObjectPrimitives.CreateSquareWithNormalsYorZ(new Vector3(5, 1, 1), new Vector3(4, 0, 1),
                                                                           true))
            {
                Material = tempMaterial
            };
            tempObjGroup.AddObject(tempObj);

            tempObj =
                new ObjObject(ObjectPrimitives.CreateSquareWithNormalsYorZ(new Vector3(-1, 1, 1), new Vector3(-2, 0, 0),
                                                                           true));
            tempObjGroup.AddObject(tempObj);
            objMeshs.Add(tempObjGroup);


//            tempObjGroup = new ObjGroup(program);
//            theTileObjects = GetTileObjects();
//            tempObjGroup.AddObjects(theTileObjects);
//            objMeshs.Add(tempObjGroup);
//
            objMeshs.AddRange(GetGameObjects());

            thePaths = new ObjGroupPaths(program);
            objMeshs.Add(thePaths);

            Gl.UseProgram(0);
            Gl.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
            Gl.BindBuffer(BufferTarget.ArrayBuffer, 0);

            if (UseObjMap)
            {
                objTileMap = new ObjMap(TheGameStatus.TheMap, TheCamera);
            }
        }
Exemplo n.º 14
0
        private void loadModel(string fileName)
        {
            treeView1.Nodes.Clear();
            m = new WavefrontOBJ();
            m.loadObjModel(fileName);

            TreeNode nodeObjects = new TreeNode("Objects (" + m.getNumObjects() + ")");

            for (int i = 0; i < m.getNumObjects(); i++)
            {
                ObjObject o          = m.getObject(i);
                TreeNode  nodeObject = new TreeNode("Object " + i + " - \"" + o.getName() + "\"");
                // object name
                TreeNode nodeObjectName      = new TreeNode("Name");
                TreeNode nodeObjectNameValue = new TreeNode(o.getName());
                nodeObjectNameValue.Tag = o;
                nodeObjectName.Nodes.Add(nodeObjectNameValue);
                nodeObject.Nodes.Add(nodeObjectName);
                // first face
                TreeNode nodeObjectFirstFace      = new TreeNode("First face");
                TreeNode nodeObjectFirstFaceValue = new TreeNode(o.getFirstFace().ToString());
                nodeObjectFirstFace.Nodes.Add(nodeObjectFirstFaceValue);
                nodeObject.Nodes.Add(nodeObjectFirstFace);
                // face count
                TreeNode nodeObjectNumFaces      = new TreeNode("Faces count");
                TreeNode nodeObjectNumFacesValue = new TreeNode(o.getNumFaces().ToString());
                nodeObjectNumFaces.Nodes.Add(nodeObjectNumFacesValue);
                nodeObject.Nodes.Add(nodeObjectNumFaces);

                nodeObjects.Nodes.Add(nodeObject);
            }
            treeView1.Nodes.Add(nodeObjects);
            TreeNode nodeGroups = new TreeNode("Groups (" + m.getNumGroups() + ")");

            for (int i = 0; i < m.getNumGroups(); i++)
            {
                ObjGroup o         = m.getGroup(i);
                TreeNode nodeGroup = new TreeNode("Group " + i + " - \"" + o.getName() + "\"");
                // object name
                TreeNode nodeGroupName      = new TreeNode("Name");
                TreeNode nodeGroupNameValue = new TreeNode(o.getName());
                nodeGroupNameValue.Tag = o;
                nodeGroupName.Nodes.Add(nodeGroupNameValue);
                nodeGroup.Nodes.Add(nodeGroupName);
                // first face
                TreeNode nodeGroupFirstFace      = new TreeNode("First face");
                TreeNode nodeGroupFirstFaceValue = new TreeNode(o.getFirstFace().ToString());
                nodeGroupFirstFace.Nodes.Add(nodeGroupFirstFaceValue);
                nodeGroup.Nodes.Add(nodeGroupFirstFace);
                // face count
                TreeNode nodeGroupNumFaces      = new TreeNode("Faces count");
                TreeNode nodeGroupNumFacesValue = new TreeNode(o.getNumFaces().ToString());
                nodeGroupNumFaces.Nodes.Add(nodeGroupNumFacesValue);
                nodeGroup.Nodes.Add(nodeGroupNumFaces);

                nodeGroups.Nodes.Add(nodeGroup);
            }
            treeView1.Nodes.Add(nodeGroups);
            TreeNode nodeFaces = new TreeNode("Faces (" + m.getNumFaces() + ")");

            for (int i = 0; i < m.getNumFaces(); i++)
            {
                ObjFace  f        = m.getFace(i);
                TreeNode nodeFace = new TreeNode("Face " + i);
                // number of vertices

                /*TreeNode nodeFaceNumFaceVerts = new TreeNode("FaceVerts count");
                 * TreeNode nodeFaceNumFaceVertsValue = new TreeNode(f.getNumVerts().ToString());
                 * nodeFaceNumFaceVerts.Nodes.Add(nodeFaceNumFaceVertsValue);
                 * nodeFace.Nodes.Add(nodeFaceNumFaceVerts);*/
                // vertices
                TreeNode nodeFaceFaceVerts = new TreeNode("FaceVerts (" + f.getNumVerts() + ")");
                for (int j = 0; j < f.getNumVerts(); j++)
                {
                    TreeNode nodeFaceFaceVert = new TreeNode("FaceVert " + j + " (abs " + (j + f.getFirstVert()) + ")");
                    nodeFaceFaceVerts.Nodes.Add(nodeFaceFaceVert);
                }
                nodeFace.Nodes.Add(nodeFaceFaceVerts);

                nodeFaces.Nodes.Add(nodeFace);
            }
            treeView1.Nodes.Add(nodeFaces);
            TreeNode nodePositions = new TreeNode("XYZs (" + m.getNumXYZs() + ")");

            for (int i = 0; i < m.getNumXYZs(); i++)
            {
                TreeNode nodePosition      = new TreeNode("XYZ " + i);
                TreeNode nodePositionValue = new TreeNode(m.getXYZ(i).ToString());
                nodePosition.Nodes.Add(nodePositionValue);
                nodePositions.Nodes.Add(nodePosition);
            }
            treeView1.Nodes.Add(nodePositions);
            if (m.getNumTexCoords() > 0)
            {
                TreeNode nodeTexCoords = new TreeNode("TexCoords (" + m.getNumTexCoords() + ")");
                for (int i = 0; i < m.getNumTexCoords(); i++)
                {
                    TreeNode nodeTexCoord      = new TreeNode("TexCoord " + i);
                    TreeNode nodeTexCoordValue = new TreeNode(m.getTexCoord(i).ToString());
                    nodeTexCoord.Nodes.Add(nodeTexCoordValue);
                    nodeTexCoords.Nodes.Add(nodeTexCoord);
                }
                treeView1.Nodes.Add(nodeTexCoords);
            }
            ;
            if (m.getNumNormals() > 0)
            {
                TreeNode nodeNormals = new TreeNode("Normals (" + m.getNumNormals() + ")");
                for (int i = 0; i < m.getNumNormals(); i++)
                {
                    TreeNode nodeNormal      = new TreeNode("Normal " + i);
                    TreeNode nodeNormalValue = new TreeNode(m.getNormal(i).ToString());
                    nodeNormal.Nodes.Add(nodeNormalValue);
                    nodeNormals.Nodes.Add(nodeNormal);
                }
                treeView1.Nodes.Add(nodeNormals);
            }
        }
Exemplo n.º 15
0
        public static ObjObject LoadObjFromText(string[] obj)
        {
            ObjObject retObj = new ObjObject();
            uint      faceId = 0;

            for (uint i = 0; i < obj.Length; i++)
            {
                string[] words = obj[i].Split(' ');

                if (words[0] == "v" || words[0] == "vt" || words[0] == "vn")
                {
                    Vector3 v = new Vector3();
                    v.x = float.Parse(words[1]);
                    v.y = float.Parse(words[2]);

                    if (words[0] != "vt")
                    {
                        v.z = float.Parse(words[3]);

                        if (words[0] == "v")
                        {
                            retObj.AddVertex(v);
                        }
                        else
                        {
                            retObj.AddNormalVertex(v);
                        }
                    }
                    else
                    {
                        retObj.AddTextureVertex(v);
                    }
                }
                else if (words[0] == "f")
                {
                    Face f = new Face(faceId);
                    faceId++;

                    for (uint k = 1; k < words.Length; k++)
                    {
                        FaceNode node      = new FaceNode();
                        string[] faceWords = words[k].Split('/');
                        int      points    = words[k].Length - words[k].Replace("/", "").Length;

                        if (faceWords[0] != "")
                        {
                            node.Vertex = uint.Parse(faceWords[0]) - 1;
                        }

                        if (faceWords[1] != "")
                        {
                            node.TextureVertex = uint.Parse(faceWords[1]) - 1;
                        }

                        if (faceWords[2] != "")
                        {
                            node.NormalVertex = uint.Parse(faceWords[2]) - 1;
                        }

                        f.AddNode(node);
                    }

                    retObj.AddFace(f);

                    if (f.Nodes > 3)
                    {
                        Face[] faces = trianguliza(f, retObj);

                        for (int k = 0; k < faces.Length; k++)
                        {
                            retObj.AddFace(faces[k]);
                        }
                    }
                }
            }

            return(retObj);
        }