DirectX&Direct 3D 游戏开发之——构建3D程序基本框架

痞子三分冷 提交于 2019-11-27 06:29:12

Device类

相关参数参考msdn:http://msdn.microsoft.com/zh-cn/library/ms129556(v=vs.90)

构建3D程序基本框架

 

框架中有几个基本的函数:

 

InitializeGraphics()

 

主要是设置Device类参数,初始化相关自定义的方法和事件

 

代码:

InitializeGraphics
 1         public bool InitializeGraphics()
 2         {
 3             try
 4             {
 5                 PresentParameters presentParams = new PresentParameters();
 6                 presentParams.Windowed = true;//在一个窗口显示,本框架不能全屏显示
 7                 presentParams.SwapEffect = SwapEffect.Discard;//后备缓存交换的方式
 8                 presentParams.EnableAutoDepthStencil = true;//允许使用自动深度测试
 9                 presentParams.AutoDepthStencilFormat = DepthFormat.D16;//深度缓存区单元为16位二进制数
10 
11                 device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);//建立设备类对象
12 
13                 //设置设备重置事件(device.DeviceReset)事件函数为this.OnResetDevice
14                 device.DeviceReset += new EventHandler(OnResetDevice);
15 
16                 this.OnCreateDevice(device, null);//自定义方法,初始化Device的工作放到这个方法中
17                 this.OnResetDevice(device, null);//调用设备重置事件(device.DeviceReset)事件函数
18 
19             }//设备重置事件函数要设置Device参数,初始化函数中必须调用该函数
20             catch (DirectXException)
21             {
22                 return false;
23             }
24             return true;
25         }

OnCreateDevice ()

自定义方法,初始化Device的工作在此方法中,仅在InitializeGraphics()中调用该方法,即只调用一次。

代码:

        public void OnCreateDevice(object sender, EventArgs e)
        {}

OnResetDevice()

事件Handle函数,该函数中重新设置Device类因窗口模式变化的参数。

代码:

        void OnResetDevice(object sender, EventArgs e)
        {}

Render()

渲染方法,每次调用一次Render方法,将在显示器屏幕上显示一幅图像,一般称作一帧图像。

代码:

渲染Render
 1         public void Render()
 2         {
 3             if (device == null)
 4                 return;
 5             if (pause)
 6                 return;
 7             device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0);//將檢視區或檢視區中的一組矩形清除成指定的 RGBA 色彩、清除深度緩衝區,並清除模板緩衝區
 8             device.BeginScene();//开始渲染
 9             device.EndScene();//渲染结束
10             device.Present();//更新显示区域,把后备缓存的图形送到屏幕显示区中显示
11         }//每调用一次Render方法,将在显示器屏幕上显示一幅图像,一般称作一帧图片

Form1_Paint()

窗体事件Handle函数,在函数中利用绘图工具绘制图形。

代码:

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            this.Render();
        }

Form1_Resize()

窗体事件Handle函数,在调整控件大小时发生。

代码:

        private void Form1_Resize(object sender, EventArgs e)
        {
            pause = ((this.WindowState == FormWindowState.Minimized) || !this.Visible);
        }

 

 

 

转载于:https://www.cnblogs.com/suguoqiang/archive/2012/07/18/2598323.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!