C#游戏开发教程(D3D)

游戏开发 专栏收录该内容
1 篇文章 0 订阅
本文适合有一定编程基础的爱好者!本文不会涉及基本的语法等内容,本文适合所有游戏开发初学者,本文从Microsoft DirectX 9.0 SDK (Summer 2004)中的D3D下Tutorials文件夹下的例子开始!!
    关键字:c#  游戏开发  3D  教程
    C#(读作“C sharp”)是一种简单、现代、面向对象且类型安全的编程语言。C 和 C++ 程序员能很快熟悉它。C# 同时具备“应用程序快速开发”(RAD) 语言的高效率和 C++ 固有的强大能力。(c#语言标准参考如是说)废话少说,进入主题,开始我们的c#游戏开发之旅!(翻译有误请多原谅)


第一章 组建我们的设备
    1。建立一个DX程序,首先你需要下载Microsoft DirectX  SDK(最好事9.0一下简称DX),安装。然后事要保证你安装了Visual Studio .NET开发产品套件(一下简称vs.net),这是最小环境,然后你就可以进行游戏开发了。
建立一个DX设备。打开DX中的Tutorials文件夹下的Tutorials1例子并打开编译!下面是运行结果:
 
创建了一个DX窗口!
 下面是代码:

//-----------------------------------------------------------------------------
// file: CreateDevice.cs
// 创建设备
// Desc: This is the first tutorial for using Direct3D. In this tutorial, all
//       we are doing is creating a Direct3D device and using it to clear the
//       window.
// 注释:这是第一个使用D3D的教学例子,在这个例子中,我们要作的仅仅是创建以个D3D“设备”和刷新窗口
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace DeviceTutorial
{
public class CreateDevice : Form
{
// Our global variables for this project
Device device = null; // Our rendering device
                              //我们的绘图设备
public CreateDevice()
{
// Set the initial size of our form
//设置窗体的初始值
this.ClientSize = new System.Drawing.Size(400,300);
// And it's caption
//设置窗体标题
this.Text = "D3D Tutorial 01: CreateDevice";
}

public bool InitializeGraphics()
{
try
{
// Now let's setup our D3D stuff
//现在我们设置D3D的一些选项
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed=true;//标志着程序运行时窗口模式
presentParams.SwapEffect = SwapEffect.Discard;//返回或设置交换区选项????
device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
//?,设备的类型(这里选择了硬件),创建图形设备的窗体,创建类型,创建实体);
//创建设备实例
return true;
}
catch (DirectXException)//捕捉DX异常
            { 
                return false; 
            }
}
private void Render()//刷新模块
{
if (device == null) 
return;

//Clear the backbuffer to a blue color 
//将设备窗口刷成绿色
device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
//clear(刷屏的参数这里选的是目标,使用的颜色,深度(可能用于模板),模板(0)因为没有使用模板)
//Begin the scene
//开始渲染场景,(因为没有场景所以一下句是空的就直接结束了场景的渲染)
device.BeginScene();

// Rendering of scene objects can happen here
//可以在这里渲染场景
    
//End the scene
//结束场景的渲染
device.EndScene();
device.Present();
}      
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)  //重写OnPaint方法
{
//this.Render(); // Render on painting
//循环的刷新窗口
}
protected override void onKeyPress(System.Windows.Forms.KeyPressEventArgs e)//重写onKeyPress方法
{
if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)
this.Close(); // Esc was pressed
//如果按下了ESC则退出程序
}

/// <summary>
/// The main entry point for the application.
/// 程序的主函数,入口点
/// </summary>
static void Main() 
{
            //使用USING语句创建对象保证对象的销毁
            using (CreateDevice frm = new CreateDevice())
            {
                if (!frm.InitializeGraphics()) // Initialize Direct3D
                {
                    MessageBox.Show("Could not initialize Direct3D.  This tutorial will exit.");
                    return;
                }
                frm.Show();

                // While the form is still valid, render and process messages
//消息循环
                while(frm.Created)
                {
                    frm.Render();
                    Application.DoEvents();
                }
            }
}
}
}
代码中有加入的注释!
首先是:
using System;using System.Drawing;using System.Windows.Forms;using Microsoft.DirectX;using Microsoft.DirectX.Direct3D;
       
使用命3名空间!注意的是,在程序的Main主程序中使也用了USING,注意这是c#中的一条语句,using 语句定义一个范围,在此范围的末尾将处理对象。
接着Device device = null;这句是申请了Device类的对象device但并未创建实例对象,实例对象的创建必须使用new语句创建。public bool InitializeGraphics() 函数 的作用是初始化DX,private void Render() 函数是渲染函数,其中的device.BeginScene(); 是开始渲染,device.EndScene();
device.Present(); 结束渲染,就如同翻页!可以在BeginScene();和EndScene();函数之中添加图像的显示或文字的显示等其它工作!程序最后的
while(frm.Created)                {                    frm.Render();                    Application.DoEvents();                }
是检测程序是否在执行,是则使用frm实例对象的方法Render();来渲染屏幕,Application.DoEvents();是执行消息循环!
这样!一个简单的DX窗口就建立好了!


  • 0
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

网络视频资源,如有侵权请留言/举报,资源过大上传乃是下载链接!!!------ 『课程介绍』:1 S/ V q2 z {+ ~( j 相信男生们都喜欢玩爽快的赛车类游戏,那么你是否想要自己开发这样的一款游戏呢?在这里你将使用unity的开发技术,自己创建一个开发的,竞争性的赛车世界。同时可以让用户对汽车进行换装。- P8 z# u5 t' z1 @' w# c - F1 c. D: y3 c: o 『课程目录』: 任务1: 游戏演示 04:01 任务2: 创建工程,添加环境,添加车. n& c' W: j) [0 N 06:07 任务3: 给车添加碰撞器1 k: n' t- s0 ?7 _- |: }' e! O 03:17 任务4: 车的阴影设置* J, e. b0 _1 P( A7 C' x 03:29 任务5: 给车添加投影/ a5 \& I9 i& ~% d- R4 O 07:47 任务6: 关于WheelCollider车轮碰撞器% ^2 O% b' E" ?; U) K7 L1 O 06:10 任务7: 给车子添加车轮 05:29 任务8: 控制车子的前后行进 任务9: 控制车子的左右转向 04:51 # C6 v5 _/ O1 V& q5 c 任务10: 控制摄像机的跟随移动2 J( j: W' N3 D( y) B 06:51 任务11: 控制摄像机的平滑跟随5 d( P' H# L' |9 F: R7 F+ p 09:31 任务12: 解决车子侧翻的问题7 l" J8 q3 T: u! V 06:01 3 {1 V6 c8 K% c6 B/ ?" O+ C 任务13: 显示车子的速度( c2 L4 C& @" T, I+ f- J$ E 13:24 任务14: 使用仪表盘显示速度# J/ n; ~/ R7 | 12:18 8 v+ V8 u4 x0 J, O8 M+ ? 任务15: 控制轮子的转动- M* [) D$ D; I* z" ~1 A 08:22 任务16: 控制轮子的转向 06:08 任务17: 控制车的最大速度和最小速度; u+ p" j$ z" A; h ? 08:42 任务18: 给车添加刹车的功能3 M* x1 q6 ^2 r' \ 05:26 任务19: 给游戏添加背景声音 03:21 3 m0 A* G' S+ Z 任务20: 给车子添加引擎声音$ F4 O8 y# Z7 ~: M9 u 07:02 + W$ S* Z" i/ h$ Q 任务21: 添加引擎加速效果的声音7 p' T8 }) r- |, M 07:34 任务22: 控制车子的漂移 05:48 任务23: 添加漂移的声音! j" b* {, k) T, F: } 02:42 + {5 J, }5 K* }* j5 `; i6 O | 任务24: 添加漂移的条件,判断轮子是否着地 07:02 任务25: 添加倒车的警示灯 04:41 任务26: 添加赛车到达终点的判定 11:57 ' D3 e) h1 i2 J4 ?/ E 任务27: 添加倒计时效果! x, y6 I( y! ?9 j- @; E$ ?! I 07:27 ! J0 F9 H; F% | 任务28: 开发计时期间的引擎发动效果5 \; v) f" w' F6 _! a+ g) ?2 B# o! i. M 10:16 任务29: 设计游戏开始的界面 07:02 1 r0 w- P; i# ^; l, c& E& I: a. H 任务30: 处理游戏用户名的存储和按钮的事件( O0 d7 p" _2 l, l4 l 06:06 5 {& N: C3 E* r; i5 n 任务31: 开发赛车选择界面, m; s q4 O# i1 {' v; p 10:44 任务32: 开发赛车的总用时计时 08:18 1 }$ x0 C% ^! i4 V7 k 任务33: 游戏数据的存储,把最快的时间存储起来 07:12 7 O) P8 \: C4 y9 r. D 任务34: 控制轮子位置随着悬挂系统的弹簧的伸缩而伸缩, d# `8 b5 x" j9 J 12:49 任务35: 添加车子的划痕! L$ A. Y" b1 j- b1 U3 R 19:31 任务36: 处理车子和墙体之间的碰撞! [5 I% d/ Z! M# ~: L8 g 04:21 . b) N! L% a% O! x 任务37: 实现第一人称视野的控制' n( R0 Y& h2 I4 C# _$ d 05:01 任务38: 学习Terraintoolkit地形编辑插件 10:23 ' w% J* U" f% y5 d3 b" l0 h8 r 任务39:
DirectX 是开发三维场景的利器,也是目前大多三维游戏采用的开发平 台。国内外关于 DirectX 开发的书籍不是非常多,而且大多数书籍都是针对 Visual C++语言来介绍的。在安装 DirectX SDK 时可以选择安装例子和教程, 微软为开发者提供了许多较为实用的例子供大家学习。本文结合计算机三维图 形学和 DirectX 的开发帮助,并参考国内外关于 DirectX 开发的书籍和网站资 料等,主要介绍如何采用Visual C# 语言对DirectX进行三维图形开发。本文 共分十六章,以“由易到难、由简单到复杂”为主线,以介绍 DirectX 开发方 法为主,并穿插介绍相关的计算机三维图形知识等。限于作者水平有限,文中 难免存在错误和缺点,敬请读者朋友不吝指正。 目 录 一、配置环境 1 二、DirectX 9.0 简介 2 三、第一个DirectX程序 3 1、新建项目 3 2、新建项 3 3、添加窗体 4 4、添加引用 4 5、定义全局变量 5 6、设置窗体初始状态 5 7、定义初始化函数 5 8、定义渲染函数 6 9、定义程序入口 6 10、设置运行方式 6 四、绘制一个三角形 8 五、摄像机基础 9 1、定义视图变换 9 2、定义投影变换 9 3、设置绘图设备投影及视图矩阵 10 4、绘制三角形 10 5、显示线框 13 六、输入事件 14 1、键盘输入 14 2、鼠标输入 15 七、二维显示 19 1、显示图片 19 2、二维图片动画 22 3、显示二维文字 23 八、矩阵应用 25 1、常用矩阵及算法 25 2、视图矩阵 27 3、透视投影矩阵 29 4、仿射投影矩阵 36 5、常用矩阵变换 38 九、四元数理论及其应用 42 1、四元数定义 42 2、四元数运算 42 3、四元数的共轭、矩、迹、模、倒数 42 4、四元数的三角形式 43 5、在三维计算机图形中的应用 44 十、摄像机变换 46 1、准备场景 46 2、旋转摄像机 53 3、通过键盘控制摄像机旋转 54 4、通过键盘控制摄像机缩放 57 5、通过鼠标控制摄像机旋转 59 6、通过鼠标滚轮控制摄像机缩放 60 7、通过鼠标控制摄像机移动 61 十一、地形 64 1、索引编号 64 2、规则三角网 67 3、通过高度图生成三角网 69 4、地形贴图 70 5、设置深度缓冲 72 十二、三维显示控件设计 75 1、准备工作 75 2、上一视图与下一视图 85 3、附视图、左视图及前视图的实现 86 4、常用浏览功能 89 5、工具栏控件 92 十三、绘制基本图元 99 1、绘制离散点 100 2、绘制分段直线 102 3、绘制折线 103 4、绘制独立三角形 104 5、绘制扇形三角形 106 6、绘制三角形带 107 7、四种绘制图元方法比较 109 8、绘制六面体 120 9、绘制球体 123 10、绘制圆 128 11、绘制圆锥 134 12、绘制圆柱 139 十四、Mesh网格 146 1、创建基本几何体网格 146 2、使用构造函数创建网络 150 3、从文件导入网格 156 4、导入X文件的网格贴图 156 5、将网格导出为X文件 158 6、三维字体 159 7、子集、属性、邻接、复制 160 8、渐进网格 163 9、世界矩阵 165 十五、碰撞检测 168 1、包围体 168 2、点击射线 174 3、拾取对象 176 十六、材质、贴图与灯光 182 1、材质 182 2、贴图 184 3、灯光 190
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值