回 帖 发 新 帖 刷新版面

主题:[讨论]c#Direct学习第一步奏

这个是小弟初次学c#里的DIRECTX编程的第一步,当然这仅仅是第一步,主要是看了半天的书没看懂(全部是英文的,但是本人英语不怎么样),原来需要自己创建一个编程的摸板,小弟就照着书开始长征了.首先第一步是创建一个C#的WINDOWS应用程序.我这个是VS2005试用版本.中文版本.
创建完毕后
在引用上面单击右键添加引用,选择Microsoft.DirectX;Microsoft.DirectX.Direct3D;
然后在FORM1上点击右键查看代码,然后就按照我这个输入
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
namespace direct
{
    public partial class directx : Form
    {
        Device device = null;

        public directx()
        {
            InitializeComponent();
        }
        public bool InitializeGraphics()
        {
            try
            {
                PresentParameters presentParams = new PresentParameters();
                presentParams.Windowed = true;
                presentParams.SwapEffect = SwapEffect.Discard;
                device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
                device.DeviceLost += new EventHandler(this.InvalidateDeviceObjects);
                device.DeviceReset += new EventHandler(this.RestoreDeviceObjects);
                device.Disposing += new EventHandler(this.DeleteDeviceObjects);
                device.DeviceResizing += new CancelEventHandler(this.EnvironmentResizeing);
                return true;
            }
            catch (DirectXException)
            {
                return false;
            }
        }
        protected  virtual void InvalidateDeviceObjects(object sender, EventArgs e)
        { }
        protected  virtual void RestoreDeviceObjects(object sender, EventArgs e)
        { }
        protected  virtual void DeleteDeviceObjects(object sender, EventArgs e)
        { }
        protected  virtual void EnvironmentResizeing(object sender, CancelEventArgs e)
        { }
        protected  virtual void FrameMove()
        { }
        protected virtual void Render()
        {
            if (device != null)
            {
                device.Clear(ClearFlags.Target, Color.Blue, 1.0f, 0);
                device.BeginScene();
                device.EndScene();
                device.Present();
            }
        }
        public void Run()
        {
            while (Created)
            {
                FrameMove();
                Render();
                Application.DoEvents();
            }
        }
       protected  override void OnPaint(PaintEventArgs e)
        {
            this.Render();
        }
        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            base.OnKeyPress(e);
            if ((int)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)
            {
                this.Close();
            }
        }
    }
}

回复列表 (共4个回复)

沙发

输入完了后
找到FORM1.Designer.cs这个文件,然后在他的初始化界面的函数中找到FORM1的初始话的地方,修改
            this.ClientSize = new System.Drawing.Size(640, 480);
            this.Text = "Direx3D Project";
然后再打开PROGRAM.cs文件,在他的static void main()
这个函数中,把它原来的初始的3个调用的函数给屏蔽掉.加入咱们自己在FORM1.cs文件中自己写的函数.
      static void Main()
        {
            using (directx form1 = new directx())
            {
                if (!form1.InitializeGraphics())
                {
                    MessageBox.Show("在创建时发生错误");
                    return;
                }
                form1.Show();
                form1.Run();
            }
            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());
        }
最后一布,选择文件,导出摸板,给你的摸板加个特殊的ICO图标了,或者用它默认的图标.然后一直下一步,就可以将你的摸板保存近来了,以后再想创建关于DIRECTX的项目就会事半功倍,不用再输入这么多的代码了,前提是,你的机器上得安装DIRECTX 9.0 SDK才可以哦.用这种方法创建其他各种摸版都可以

板凳

如果你感觉在FORM1.cs里写这么多函数不好,你可以把他们全部剪切进PROGRAM.CS文件中,摸版在附件里.

3 楼

下面我们画一个三角形.
 Microsoft.DirectX.Direct3D.CustomVertex.TransformedColored[] vertexes = null;
用来保存我们即将设置的三角形的各顶点.
public void InitializeGeometry()
        {
            this.vertexes = new CustomVertex.TransformedColored[4];
            vertexes[0].X = screenwidth / 3.0f;
            vertexes[0].Y = screenheight / 3.0f;
            vertexes[0].Z = 0.0f;
            vertexes[0].Color = Color.White.ToArgb();
            vertexes[1].X = (screenwidth / 3.0f) * 2.0f;
            vertexes[1].Y = screenheight / 3.0f;
            vertexes[1].Z = 0.0f;
            vertexes[1].Color = Color.White.ToArgb();
            vertexes[3].X = screenwidth / 3.0f;
            vertexes[3].Y = (screenheight / 3.0f) * 2.0f;
            vertexes[3].Z = 0.0f;
            vertexes[3].Color = Color.White.ToArgb();
            vertexes[2].X = (screenwidth / 3.0f) * 2.0f;
            vertexes[2].Y = (screenheight / 3.0f) * 2.0f;
            vertexes[2].Z = 2.0f;
            vertexes[2].Color = Color.White.ToArgb();
        }用这个函数来初始化三角形的顶点.
最后在    Render()这个函数中在类似的位置添加//中的代码即可                graphics.Clear(Microsoft.DirectX.Direct3D.ClearFlags.Target, Color.Blue, 1.0f, 0);
                    graphics.BeginScene();
                    //
                    graphics.VertexFormat = Microsoft.DirectX.Direct3D.CustomVertex.TransformedColored.Format;
                    this.InitializeGeometry();
                    graphics.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertexes);
                    //
                    graphics.EndScene();
                    graphics.Present();

4 楼

模仿人走路(用DIRECT模仿)
如果有需要的朋友请加QQ253105052

我来回复

您尚未登录,请登录后再回复。点此登录或注册