Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > DirectX SDC


Автор: allahtaskbar 9.4.2008, 10:55
собстно какойто экзампл простой

Код

using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace Chapter1Code
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        private Device device = null;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;
        private float angle = 0.0f;

        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            this.Size = new Size(800, 600);
            this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
        }

        /// <summary>
        /// We will initialize our graphics device here
        /// </summary>
        public void InitializeGraphics()
        {
            // Set our presentation parameters
            PresentParameters presentParams = new PresentParameters();

            presentParams.Windowed = true;
            presentParams.SwapEffect = SwapEffect.Discard;

            // Create our device
            device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
        }

        private void SetupCamera()
        {
            device.RenderState.CullMode = Cull.None;
            device.Transform.World = Matrix.RotationAxis(new Vector3(angle / ((float)Math.PI * 2.0f), angle / ((float)Math.PI * 4.0f), angle / ((float)Math.PI * 6.0f)),  angle / (float)Math.PI);
            angle += 0.1f;

            device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1.0f, 100.0f);
            device.Transform.View = Matrix.LookAtLH(new Vector3(0,0, 5.0f), new Vector3(), new Vector3(0,1,0));
            device.RenderState.Lighting = true;
        }

        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            device.Clear(ClearFlags.Target, System.Drawing.Color.CornflowerBlue, 1.0f, 0);

            SetupCamera();

            CustomVertex.PositionNormalColored[] verts = new CustomVertex.PositionNormalColored[3];
            //2005/07/10, TheZbuffer.com, Updated for June SDK
            //verts[0].SetPosition(new Vector3(0.0f, 1.0f, 1.0f));
            //verts[0].SetNormal(new Vector3(0.0f, 0.0f, -1.0f));

            verts[0].Position=new Vector3(0.0f, 1.0f, 1.0f);
            verts[0].Normal=new Vector3(0.0f, 0.0f, -1.0f);
            verts[0].Color = System.Drawing.Color.White.ToArgb();
            //2005/07/10, TheZbuffer.com, Updated for June SDK
            //verts[1].SetPosition(new Vector3(-1.0f, -1.0f, 1.0f));
            //verts[1].SetNormal(new Vector3(0.0f, 0.0f, -1.0f));
            verts[1].Position=new Vector3(-1.0f, -1.0f, 1.0f);
            verts[1].Normal=new Vector3(0.0f, 0.0f, -1.0f);
            verts[1].Color = System.Drawing.Color.White.ToArgb();
            //2005/07/10, TheZbuffer.com, Updated for June SDK
            //verts[2].SetPosition(new Vector3(1.0f, -1.0f, 1.0f));
            //verts[2].SetNormal(new Vector3(0.0f, 0.0f, -1.0f));
            verts[2].Position=new Vector3(1.0f, -1.0f, 1.0f);
            verts[2].Normal=new Vector3(0.0f, 0.0f, -1.0f);
            verts[2].Color = System.Drawing.Color.White.ToArgb();

            device.Lights[0].Type = LightType.Point;
            device.Lights[0].Position = new Vector3();
            device.Lights[0].Diffuse = System.Drawing.Color.White;
            device.Lights[0].Attenuation0 = 0.2f;
            device.Lights[0].Range = 10000.0f;

            //2005/07/10, TheZbuffer.com, Updated for June SDK
            //device.Lights[0].Commit();
            device.Lights[0].Enabled = true;

            device.BeginScene();
            device.VertexFormat = CustomVertex.PositionNormalColored.Format;
            device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, verts);
            device.EndScene();

            device.Present();

            this.Invalidate();
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null) 
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.Size = new System.Drawing.Size(300,300);
            this.Text = "Form1";
        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main() 
        {
            using (Form1 frm = new Form1())
            {
                // Show our form and initialize our graphics engine
                frm.Show();
                frm.InitializeGraphics();
                Application.Run(frm);
            }
        }
    }
}


Вызалит оно:

"Error    1    The type 'Microsoft.DirectX.Direct3D.Device' exists in both 'd:\WINDOWS\assembly\GAC\Microsoft.DirectX.Direct3D\1.0.900.0__31bf3856ad364e35\Microsoft.DirectX.Direct3D.dll' and 'd:\WINDOWS\assembly\GAC_32\Microsoft.DirectX\2.0.900.0__31bf3856ad364e35\Microsoft.DirectX.dll'    E:\omg\material\kniggi\programming\MDXKickstartCSAug05\c# Aug 05\Chapter 1\Lights\Form1.cs    15    17    Lights"

Автор: vponomarov 9.4.2008, 11:16
allahtaskbar, нужно явни указать namespace объекта, который ты юзаешь: либо Microsoft.DirectX.Direct3D либо Microsoft.DirectX.
вроде так smile 

Автор: mr.DUDA 10.4.2008, 09:27
Похоже что в проекте лишний референс - либо Microsoft.DirectX.Direct3D.dll (версии 1.0 кстати), либо Microsoft.DirectX.dll (версии 2.0). Или референс на Microsoft.DirectX.dll надо было добавлять на версию 1.0

Автор: allahtaskbar 10.4.2008, 21:51
точняк - это несовместимость в версиях была. поставил и там и там v1 и запахало.

большой спасиб smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)