DirectX&Direct 3D 游戏开发之——构建3D程序基本框架
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); }
本是菜鸟,偶做老鸟,略读半卷书,坐井说天阔。大志无所为,海斗量得失,年到老时方恨晚,怒指生不逢时。