Wrox Programmer Forums
Go Back   Wrox Programmer Forums > C# and C > C# 1.0 > C#
|
C# Programming questions specific to the Microsoft C# language. See also the forum Beginning Visual C# to discuss that specific Wrox book and code.
Welcome to the p2p.wrox.com Forums.

You are currently viewing the C# section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
 
Old December 1st, 2005, 05:29 AM
Registered User
 
Join Date: Jan 2004
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
Default managed directx 9drawsubset problem?

Hello
I work on a little project that load's mesh data from a

custom txt file, in managed way; i also know the other

way to load from .x file.
but this code give me the access violation exception
in Mesh.drawsubset(0) line.
I am using directx 9.0c april 2005 and vs2005.
any ideas can help
I am sorry for throwing my problem to you
[source lang="c#"]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
//using Microsoft.DirectX.Direct3Dx
using System.IO;
namespace MeshDemo
{
    public partial class Meshes : Form
    {
        private float xRotate = 0;
        private float yRotate = 0;
        private float zRotate = 0;
        private float h = 0;
        private Device device = null;
        //private VertexBuffer vertexBuffer = null;
        private Mesh MyMesh = null;
        private int NumberOfVertices;
        private int NumberofIndices;
        PresentParameters presentParams;
        public Int64 iter=0;
        Material mtrl;
        public Meshes()
        {
            InitializeComponent();
        }

        static void Main()
        {

            using (Meshes frm = new Meshes())
            {
                if (!frm.InitializeGraphics()) //

Initialize Direct3D
                {
                    MessageBox.Show("Could not initialize

Direct3D. This tutorial will exit.");
                    return;
                }
                frm.Show();

                // While the form is still valid, render

and process messages
                while (frm.Created)
                {
                    frm.Render();
                    Application.DoEvents();
                }
            }
        }

        public bool InitializeGraphics()
        {
            try
            {
                InitDevice();
                SetupDevice();

                device.DeviceReset += new

EventHandler(OnDeviceReset);
                OnDeviceReset(null, EventArgs.Empty);


// this.OnCreateDevice(device, null);

                return true;
            }
            catch (DirectXException)
            {
                return false;
            }

        }



        private void OnDeviceReset(object sender,

EventArgs e)
        {
            InitDevice();
        }
        private void SetupDevice()
        {
            device.RenderState.Lighting = true;
            device.RenderState.Ambient =

System.Drawing.Color.Yellow;
            device.RenderState.ZBufferEnable = true;
            //device.RenderState.DiffuseMaterialSource =

ColorSource.Material;
            mtrl = new Material();
            Color c = Color.FromArgb(127, 255, 0, 0);

            mtrl.Diffuse = c;
            mtrl.Ambient = c;
            mtrl.Specular = c;
            mtrl.Emissive = c;

            device.Material = mtrl;
        }
        private void InitDevice()
        {
            // Now let's setup our D3D stuff
            presentParams = new PresentParameters();
            presentParams.Windowed = true;
            presentParams.SwapEffect =

SwapEffect.Discard;
            presentParams.DeviceWindow =

this.pictureBox2;
            presentParams.AutoDepthStencilFormat =

DepthFormat.D16;
            presentParams.EnableAutoDepthStencil = true;
            device = new Device(0, DeviceType.Hardware,

this, CreateFlags.SoftwareVertexProcessing,

presentParams);
        }
        protected override void

OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
        {
            if ((int)(byte)e.KeyChar ==

(int)System.Windows.Forms.Keys.Escape)
                this.Close(); // Esc was pressed

        }
        protected override void

OnKeyDown(System.Windows.Forms.KeyEventArgs e)

    {
        if ((int)(byte)e.KeyCode ==

(int)System.Windows.Forms.Keys.Up)
                xRotate += 0.1F;
            if ((int)(byte)e.KeyCode ==

(int)System.Windows.Forms.Keys.Down)
                xRotate -= 0.1f;
            if ((int)(byte)e.KeyCode ==

(int)System.Windows.Forms.Keys.Right)
                yRotate += 0.1f;
            if ((int)(byte)e.KeyCode ==

(int)System.Windows.Forms.Keys.Left)
                yRotate -= 0.1f;
            if ((int)(byte)e.KeyCode ==

(int)System.Windows.Forms.Keys.W)
                zRotate += 0.1f;
            if ((int)(byte)e.KeyCode ==

(int)System.Windows.Forms.Keys.S)
                zRotate -= 0.1f;
            if ((int)(byte)e.KeyCode ==

(int)System.Windows.Forms.Keys.NumPad8)
                h += 1;
            if ((int)(byte)e.KeyCode ==

(int)System.Windows.Forms.Keys.NumPad2)
                h -= 1;

    }

        //protected override void

OnPaint(System.Windows.Forms.PaintEventArgs e)
        //{
        // //Application.DoEvents();
        // //this.Render(); // Render
        // //Application.DoEvents();
        //}


        private void Render()
        {

            if (device == null)
                return;

            //Clear the backbuffer to a blue color (ARGB

= 000000ff)
            device.Clear(ClearFlags.Target,

System.Drawing.Color.WhiteSmoke, 1.0f, 0);
            //Begin the scene

            device.BeginScene();

            Calculate();
            //device.SetStreamSource(0,

MyMesh.VertexBuffer, 0);
            device.VertexFormat =

CustomVertex.PositionColored.Format;

            iter += 1;
            SetupMatrices();
            //MyMesh.LockVertexBuffer(LockFlags.None);
            //MyMesh.LockIndexBuffer(LockFlags.None);
            //MyMesh.LockAttributeBuffer(LockFlags.None);
            MyMesh.DrawSubset(0);
            //Geometry.ComputeBoundingBox
           // MyMesh.UnlockAttributeBuffer();
           // MyMesh.UnlockIndexBuffer();
            //MyMesh.UnlockVertexBuffer();


//device.DrawPrimitives(PrimitiveType.TriangleList, 0,

1);
            //End the scene
            device.EndScene();
            device.Present();
        }

        private void SetupMatrices()
        {
            // For our world matrix, we will just rotate

the object about the y-axis.

            // Set up the rotation matrix to generate 1

full rotation (2*PI radians)
            // every 1000 ms. To avoid the loss of

precision inherent in very high
            // floating point numbers, the system time is

modulated by the rotation
            // period before conversion to a radian

angle.
            //float fangle;
            //int iTime = Environment.TickCount % 1000;
            //fangle = iTime * (2.0f * (float)Math.PI) /

1000.0f;
            //device.Transform.World =

Matrix.RotationY(fangle);

            device.Transform.World =

Matrix.RotationX(xRotate);
            //device.Transform.World =

Matrix.RotationY(yRotate);
            //device.Transform.World =

Matrix.RotationZ(zRotate);
            // Set up our view matrix. A view matrix can

be defined given an eye
            // point, a point to lookat, and a direction

for which way is up. Here,
            // we set the eye five units back along the

z-axis and up three units,
            // look at the origin, and define "up" to be

in the y-direction.

            device.Transform.View = Matrix.LookAtLH(
                new Vector3(0.0f, 3.0f, -5.0f),
                new Vector3(0.0f, 0.0f, 0.0f),
                new Vector3(0.0f, 1.0f, 0.0f));

            // For the projection matrix, we set up a

perspective transform (which
            // transforms geometry from 3D view space to

2D viewport space, with
            // a perspective divide making objects

smaller in the distance). To build
            // a perpsective transform, we need the field

of view (1/4 pi is common),
            // the aspect ratio, and the near and far

clipping planes (which define
            // at what distances geometry should be no

longer be rendered).
            device.Transform.Projection =

Matrix.PerspectiveFovLH(
                (float)Math.PI / 4,
                1.0f,
                0.4f,
                10000.0f);
        }


        private void Calculate()
        {


            try
            {
                String line;

                int color,index1;
                float x, y, z;

                #region vertices creation

                using (StreamReader sr = new

StreamReader(@"Mesh.txt"))
                {
                    if (MyMesh != null)
                    {
                        MyMesh.Dispose();
                        MyMesh = null;
                    }
                    NumberOfVertices =

int.Parse(sr.ReadLine());

                    MyMesh =new Mesh(NumberOfVertices/3,

NumberOfVertices,


MeshFlags.VbManaged|MeshFlags.IbManaged,

CustomVertex.PositionColored.Format, device);
                    //
                       CustomVertex.PositionColored[]

arrayVertices =
                            new

CustomVertex.PositionColored[NumberOfVertices];

                    for (int arrayIndex = 0; arrayIndex <

NumberOfVertices; arrayIndex++)
                    {
                            line = sr.ReadLine();
                            x = float.Parse(line);
                            line = sr.ReadLine();
                            y = float.Parse(line);
                            line = sr.ReadLine();
                            z = float.Parse(line);
                            line = sr.ReadLine();
                            color = int.Parse(line);

                            CustomVertex.PositionColored

vertex = new CustomVertex.PositionColored(x, y, z,

color);

                            arrayVertices[arrayIndex] =

vertex;

                    }


                    line = sr.ReadLine();
                    NumberofIndices=int.Parse(line);
                    int[] arrayIndices = new

int[NumberofIndices];
                    for (int arrayIndex = 0; arrayIndex <

NumberofIndices; arrayIndex++)
                    {
                        line = sr.ReadLine();
                        index1 = int.Parse(line);

                        arrayIndices[arrayIndex] =

index1;

                    }
                    AttributeRange attributeRange = new

AttributeRange();
                    // There is only one attribute value

for this mesh.
                    // By specifying an attribute range

the DrawSubset function
                    // does not have to scan the entire

mesh for all faces that are
                    // are marked with a particular

attribute id.
                    attributeRange.AttributeId = 0;
                    attributeRange.FaceStart = 0;
                    attributeRange.FaceCount =

arrayIndices.Length / 3;
                    attributeRange.VertexStart = 0;
                    attributeRange.VertexCount =

arrayVertices.Length;


MyMesh.VertexBuffer.SetData(arrayVertices, 0,

LockFlags.None);


MyMesh.IndexBuffer.SetData(arrayIndices, 0,

LockFlags.None);


//MyMesh.LockAttributeBuffer(LockFlags.None);
                    MyMesh.SetAttributeTable(new

AttributeRange[] { attributeRange });
                    //MyMesh.UnlockAttributeBuffer();

                }
                #endregion

            }
            catch (Direct3DXException e)
            {
                MessageBox.Show("Error in vertex

creatioin:{0}", e.ToString());
            }
        }

    }
}

[/source]






Similar Threads
Thread Thread Starter Forum Replies Last Post
about directx Innaorouk C# 2 August 27th, 2007 08:39 PM
Calling managed code from un-managed code David_0223 C# 7 August 21st, 2007 09:32 AM
Help. How to play media files using DirectX dextergaisie Pro VB 6 0 May 15th, 2007 06:09 AM
How to speed up 10 times using directX? czw6296 C++ Programming 2 October 19th, 2005 10:47 PM
directx programing bcmaverik VB.NET 5 January 28th, 2004 07:07 AM





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.