public void RenderModel(Model model) { this.model = model; vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionNormalColored), model.getVertices().Length, device, Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionNormalColored.Format, Pool.Default); vertexBuffer.SetData(model.getVertices(), 0, LockFlags.None); indexBuffer = new IndexBuffer(typeof(ushort), model.getIndices().Length, device, Usage.WriteOnly, Pool.Default); indexBuffer.SetData(model.getIndices(), 0, LockFlags.None); Render(); }
private void openToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "PSSG files|*.pssg|All files|*.*"; dialog.Title = "Select a PSSG file"; if (dialog.ShowDialog() == DialogResult.OK) { closeFile(); StreamReader sr = new StreamReader(dialog.FileName); CPSSGFile f = new CPSSGFile(sr.BaseStream); pssgFile = f; treeView.Nodes.Add(createTreeViewNode(f.rootNode)); listBoxModels.Items.Clear(); Model[] models = new Model[f.findNodes("MATRIXPALETTEJOINTRENDERINSTANCE").Count]; modelView1.renderDataSources = new Dictionary<string,RenderDataSource>(); int i = 0; List<CNode> mpbnNodes = f.findNodes("MATRIXPALETTEBUNDLENODE"); foreach (CNode mpbnNode in mpbnNodes) { List<CNode> mpjnNodes = mpbnNode.findNodes("MATRIXPALETTEJOINTNODE"); foreach (CNode mpjnNode in mpjnNodes) { Matrix transform = getTransform((byte[])mpjnNode.subNodes[0].data); foreach (CNode mpjriNode in mpjnNode.findNodes("MATRIXPALETTEJOINTRENDERINSTANCE")) { string rdsId = mpjriNode.attributes["indices"].value.Substring(1); RenderDataSource renderDataSource; if (!modelView1.renderDataSources.TryGetValue(rdsId, out renderDataSource)) { CNode rdsNode = f.findNodes("RENDERDATASOURCE", "id", rdsId)[0]; CNode dbNode = f.findNodes("DATABLOCK", "id", rdsNode.subNodes[1].attributes["dataBlock"].value.Substring(1))[0]; renderDataSource = createRenderDataSourceFromNodes(rdsNode, dbNode); modelView1.renderDataSources.Add(rdsNode.attributes["id"].value, renderDataSource); } models[i] = new Model(mpjnNode.attributes["id"].ToString() + mpjriNode.attributes["shader"].ToString(), renderDataSource, transform, (int)mpjriNode.attributes["streamOffset"].data, (int)mpjriNode.attributes["elementCountFromOffset"].data, (int)mpjriNode.attributes["indexOffset"].data, (int)mpjriNode.attributes["indicesCountFromOffset"].data); listBoxModels.Items.Add(models[i]); i++; } } } createTreeViewTexturesList(f.rootNode); } else { } }
public void RenderModel(Model model) { this.model = model; vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionNormalColored), model.vertices.Length, device, Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionNormalColored.Format, Pool.Default); vertexBuffer.SetData(model.vertices, 0, LockFlags.None); indexBuffer = new IndexBuffer(typeof(ushort), model.indices.Length, device, Usage.WriteOnly, Pool.Default); indexBuffer.SetData(model.indices, 0, LockFlags.None); device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1f, 50f); device.Transform.View = Matrix.LookAtLH(new Vector3(-3, 3, 3), new Vector3(0, 0, 0), new Vector3(0, 1, 0)); device.RenderState.Lighting = true; device.Lights[0].Type = LightType.Directional; device.Lights[0].Diffuse = Color.White; device.Lights[0].Direction = new Vector3(3, -3, -3); device.Lights[0].Position = new Vector3(-3, 3, 3); device.Lights[0].Enabled = true; Render(); }