c#/winform Directx编程入门之实现立方体
c# directx编程入门之实现立方体
DirectX并不是一个单纯的图形API,它是由微软公司开发的用途广泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多个组件,它提供了一整套的多媒体接口方案。只是其在3D图形方面的优秀表现,让它的其它方面显得暗淡无光。
DirectX的编程方式包括两种1、采用COM接口的方式。2、采用.NET类库的方式。
这里说的是以c#为开发语言和托管direcx类库结合的方式实现的。
PresentParameters presentParameters = new PresentParameters(); //显示参数private Device device = null;//设备对象
private void InitDirectx(){presentParameters.Windowed = true; //填充显示参数presentParameters.SwapEffect = SwapEffect.Discard;device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParameters); //创建设备2、创建顶点缓存和设备缓存vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionColored), 8, device, 0, CustomVertex.PositionColored.Format, Pool.Default); //创建顶点缓冲,有8个顶点indexBuffer = new IndexBuffer(typeof(int), 36, device, 0, Pool.Default); //创建索引缓存 FillVertexBuffer(); //填充顶点和索引信息}
public void FillVertexBuffer(){CustomVertex.PositionColored[] verts = (CustomVertex.PositionColored[])vertexBuffer.Lock(0, 0); //调用lock方法int[] indexs = (int[])indexBuffer.Lock(0, 0);//立方体顶点verts[0] = new CustomVertex.PositionColored(-10.0f, -10.0f, -10.0f,Color.Red.ToArgb());verts[1] = new CustomVertex.PositionColored(-10.0f, 10.0f, -10.0f, Color.Blue.ToArgb());verts[2] = new CustomVertex.PositionColored(10.0f, 10.0f, -10.0f, Color.Yellow.ToArgb());verts[3] = new CustomVertex.PositionColored(10.0f, -10.0f, -10.0f, Color.Green.ToArgb());verts[4] = new CustomVertex.PositionColored(-10.0f, -10.0f, 10.0f, Color.Red.ToArgb());verts[5] = new CustomVertex.PositionColored(-10.0f, 10.0f, 10.0f, Color.Blue.ToArgb());verts[6] = new CustomVertex.PositionColored(10.0f, 10.0f, 10.0f, Color.Yellow.ToArgb());verts[7] = new CustomVertex.PositionColored(10.0f, -10.0f, 10.0f, Color.Green.ToArgb());//front sideindexs[0] = 0; indexs[1] = 1; indexs[2] = 2;indexs[3] = 0; indexs[4] = 2; indexs[5] = 3;//backsideindexs[6] = 4; indexs[7] = 6; indexs[8] = 5;indexs[9] = 4; indexs[10] = 7; indexs[11] = 6;//left sideindexs[12] = 4; indexs[13] = 5; indexs[14] = 1;indexs[15] = 4; indexs[16] = 1; indexs[17] = 0;//right side indexs[18] = 3; indexs[19] = 2; indexs[20] = 6;indexs[21] = 3; indexs[22] = 6; indexs[23] = 7;//topindexs[24] = 1; indexs[25] = 5; indexs[26] = 6;indexs[27] = 1; indexs[28] = 6; indexs[29] = 2;//bottomindexs[30] = 4; indexs[31] = 0; indexs[32] = 3;indexs[33] = 4; indexs[34] = 3; indexs[35] = 7;vertexBuffer.Unlock();indexBuffer.Unlock();}
3、绘制前准备(绘制流水线)
这一阶段对绘制前 世界坐标系,观察者坐标系,投影等参数进行设置。同时关闭关照和背面消隐。
private void SetupCamera(){device.Transform.World = Matrix.RotationY(angel); // 世界坐标系 沿Y轴旋转 //device.Transform.World = Matrix.RotationX(angel);//沿X轴旋转//device.Transform.World = Matrix.RotationZ(angel);device.Transform.View = Matrix.LookAtLH(new Vector3(0.0f, 0.0f, -40f), new Vector3(0.0f, 0.0f, 0.0f), new Vector3(0.0f, 1.0f, 0.0f)); //观察者坐标系device.Transform.Projection = Matrix.PerspectiveFovLH((float)System.Math.PI*0.5f, 1.0f, 1.0f, 100.0f); //投影device.RenderState.CullMode = Cull.None; //背面消隐关device.RenderState.Lighting = false; //光照关device.RenderState.FillMode = FillMode.WireFrame;//Viewport vp = new Viewport();//视口变换 将顶点坐标从投影窗口转换到屏幕的一个矩形区域中//vp.Width = 600;//vp.Height = 480;//vp.MaxZ = 1;//device.Viewport = vp;}
4、开始绘制过程
public void Render(){if (device == null)return;SetupCamera(); //设置世界,视野和投影矩阵device.Clear(ClearFlags.Target, System.Drawing.Color.Black, 1.0f, 0); //清空设备device.BeginScene(); //开始场景device.SetStreamSource(0, vertexBuffer, 0); //指定数据输入源device.Indices = indexBuffer;device.SetRenderState(RenderStates.ColorVertex, true); //指定渲染方式device.VertexFormat = CustomVertex.PositionColored.Format;device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 8, 0, 12);//device.DrawPrimitives(PrimitiveType.TriangleList, 0, 12); //绘制图形,使用的方法为三角形列表device.EndScene(); //结束场景device.Present(); //更新场景}
c#/winform Directx编程入门之实现立方体相关推荐
- DirectX编程入门
DirectX编程入门 初始化一个D3D对象 #include <d3d9.h> #pragma comment(lib,"d3d9.lib") int WINAPI ...
- 逐梦旅程学习笔记 DirectX开发入门02:旋转的彩色立方体
本文是 系列笔记DirectX部分的第2篇,上一篇参见 逐梦旅程学习笔记 DirectX开发入门01:应用程序基本框架 这个示例增加了一些实际的内容,首先是绘制一个颜色随机变幻的彩色立方体,其二是显示 ...
- winform 判断控件有没有被遮挡_编程入门基础之 winform(2)
在编程入门1中,我们通过WINFORM等控件画出了登录界面,我们今天写登录界面的登录按钮事件. 装修预算小程序登录按钮事件 在上图中,我们看到了,有几个判断 ,在C#中,if ,else是作为条件判断 ...
- DirectX游戏编程入门——前言
本系列文章由 net_assassin 编写,转载请注明出处. http://blog.csdn.net/net_assassin/article/category/1100363 作者:net_as ...
- DirectX游戏编程入门——第一部分(Windows和DirectX游戏编程引言)——认识Windows
本系列文章由 net_assassin 编写,转载请注明出处. http://blog.csdn.net/net_assassin/article/category/1100363 作者:net_as ...
- OpenGL编程入门学习
OpenGL编程入门学习 非常详细的教程,很适合初学者 本文转自:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html === ...
- 用DirectX绘制使用纹理的立方体
下面将学习DirectX的3D渲染基础部分,但不会对3D数学或图形理论有太详细的介绍. 首先要了解DirectX中的坐标系,要记住的是DirectX采用左手坐标系. 在Direct3D中渲染一个场景, ...
- 游戏编程入门(1) -- 精灵 ISprite
对于游戏编程而言,我也是个初学者,这个游戏编程入门系列的文章,就当作是我在学习游戏编程的笔记和阶段小结吧.我们先从最简单的"精灵"开始,暂时我们不需要考虑DirectX或是 ...
- Android 4游戏编程入门经典
<Android 4游戏编程入门经典> 基本信息 原书名:Beginning Android 4 Games evelopment 作者: (美)Mario Zechner Robert ...
最新文章
- WCF技术剖析之三十二:一步步创建一个完整的分布式事务应用
- ADO.NET与XML的结合
- 有一整片蓝天 停住时间。
- 小程序购物车抛物线(贝塞尔曲线实现)
- mysql5.7 设置远程访问
- spring 安全模块在jsp中误用引起的问题
- asp net服务器虚拟路径,asp.net获取服务器虚拟路径
- 实现成长之路——SpringBean三:实例化Bean的姿势都有哪些?
- 个人制作的DNN 5.4 API Document
- 手机运行慢可以刷机吗_为什么手机卡顿,反应变慢怎么解决?一定要刷机吗?...
- python库下载(包括一些pip安装不成功的库下载)
- Blender-UV Mapping
- B站视频下载方法之--手机下载后再转移至电脑
- 迅雷离线下载分享网站
- Java验证身份证号
- C# winform cefsharp 截取网页元素图片
- CentOS6开启BBR加速
- glm::quat 四元数,坑了一下午
- 迪思杰支持mysql_迪思杰Oracle数据库复制产品
- linux中文件大小10,Linux之查看文件大小
热门文章
- 科学计算机可以用多久,科学家公布寿命计算器!3分钟算出你还能活多久
- 网络工程师入门/底层通讯原理-李强强-专题视频课程
- 5.8晚间黄金行情走势分析及短线交易策略
- 【商业分析 04 搜索引擎指标CG,DCG,NDCG】
- 图形图像处理案例2——勾线画生成器,绕线画生成器
- “由于找不到msvcr100d.dll...”和“由于找不到msvcp100d.dll...”的解决方法与相关知识
- ubuntu安装显卡驱动记录(未完待续)
- Autodesk 的 Inventor API培训教材模块
- 值得拥有并收藏的 3个安卓/鸿蒙手机解锁软件
- 欢迎大家来增加我的知识