C# Managed DirectX 三角形旋转(修改Direct 3D绘制流水线(渲染管线)中代码)
2015-01-27 22:53
549 查看
增加变量:
修改SetupMatrices方法:
程序运行期间,device的两个变换参数要变,因此SetupMatrices方法放入渲染方法中
修改OnResetDevice方法:
修改渲染方法:
增加事件函数:
控制:
从键盘按下左右箭头键,使三角形分别以y轴为中心左右旋转;
从键盘按下上下箭头键,使三角形离观察者越来越远或者越来越近。
若要让三角形连续旋转,首先撤销KeyDown事件,然后修改SetupMatrices方法根据事件变化修改参数angle:
private float angle = 0.0f; private float viewZ = -5.0f;
修改SetupMatrices方法:
private void SetupMatrices() { this.device.Transform.World = Matrix.RotationY(this.angle); this.device.Transform.View = Matrix.LookAtLH( new Vector3(0.0f, 3.0f, this.viewZ), new Vector3(0.0f, 0.0f, 0.0f), new Vector3(0.0f, 1.0f, 0.0f)); this.device.Transform.Projection = Matrix.PerspectiveFovLH( (float) Math.PI / 4, 1.0f, 1.0f, 100.0f); }
程序运行期间,device的两个变换参数要变,因此SetupMatrices方法放入渲染方法中
修改OnResetDevice方法:
public void OnResetDevice(object sender, EventArgs e) { /* * Device参数变化时调用; */ Device dev = (Device) sender; dev.RenderState.CullMode = Cull.None; dev.RenderState.Lighting = false; }
修改渲染方法:
public void Render() { if (this.device == null) return; if (this.pause) //当窗口最小化或者不是可视化时,停止渲染; return; this.device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.WhiteSmoke, 1.0f, 0); this.SetupMatrices(); this.device.BeginScene(); /* * 渲染代码必须放在这里; */ this.device.SetStreamSource(0, this.vertexBuffer, 0); this.device.VertexFormat = CustomVertex.PositionColored.Format; this.device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1); this.device.EndScene(); this.device.Present(); }
增加事件函数:
private void Form1_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.Left: this.angle += 0.1f; break; case Keys.Right: this.angle -= 0.1f; break; case Keys.Down: this.viewZ += 0.1f; break; case Keys.Up: this.viewZ -= 0.1f; break; } }
控制:
从键盘按下左右箭头键,使三角形分别以y轴为中心左右旋转;
从键盘按下上下箭头键,使三角形离观察者越来越远或者越来越近。
若要让三角形连续旋转,首先撤销KeyDown事件,然后修改SetupMatrices方法根据事件变化修改参数angle:
private void SetupMatrices() { int iTime = Environment.TickCount % 1000; this.angle = iTime * (2.0f * (float) Math.PI) / 1000.0f; this.device.Transform.World = Matrix.RotationY(this.angle); this.device.Transform.View = Matrix.LookAtLH( new Vector3(0.0f, 3.0f, this.viewZ), new Vector3(0.0f, 0.0f, 0.0f), new Vector3(0.0f, 1.0f, 0.0f)); this.device.Transform.Projection = Matrix.PerspectiveFovLH( (float) Math.PI / 4, 1.0f, 1.0f, 100.0f); }
相关文章推荐
- Direct 3D绘制流水线(渲染管线)
- Directx 3D编程实例:绘制可变速旋转的三角形
- DirectX 3D_基础之模型表示 顶点格式 三角形 索引 虚拟摄像机 投影窗口 绘制流水线 局部坐标系 观察坐标系 世界坐标系 背面消隐 光照 裁剪 投影 视口变换 光栅化
- 《DirectX 9.0 3D游戏开发编程基础》 第二章 绘制流水线 读书笔记
- DirectX 3D_基础之地形绘制基础 高度图 创建高度图 加载RAW文件 访问和修改高度图 创建地形的几何信息(顶点计算,索引计算,纹理映射,光照,着色,地形中行走)
- DirectX 3D中由窗口改变大小而引发的某些三角形不能绘制的问题
- Directx 3D编程实例:随机绘制的立体图案旋转
- Introduction to 3D Game Programming with DirectX 11学习笔记 5 渲染管线(三)
- C#绘制三角形以及旋转
- Directx 3D - T&L渲染流水线
- 对3D渲染管线(渲染流水线)的理解
- C# Managed DirectX 学习笔记 一 (基础环境,画三角形,输入的处理)
- Introduction to 3D Game Programming with DirectX 11学习笔记 5 渲染管线(二)
- Directx 3D编程实例:随机绘制的立体图案旋转
- Introduction to 3D Game Programming with DirectX 11学习笔记 5 渲染管线(一)
- 3D Terrain Visualisation in Managed DirectX 9 and C#(转载)
- Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(四)渲染状态
- Managed DirectX +C# 开发(入门篇)(六)
- 利用C#编写修改注册表的程序代码
- Managed DirectX +C# 开发(入门篇)(三)