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); }
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); }
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); }
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); }
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() + "\""; }
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); }
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); }
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; }
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); }
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); }
/// <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); }
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); }
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); } }
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); } }
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); }