Direct3D学习笔记(二)我们这里可以编写一个完全意义上的Direct3D程序了。

原创 2005年03月02日 02:57:00

首先,我们要认识的是device,这也是Direct3D的基本

The Direct3D 设备

所有的有关绘图的Direct3D类的根就是device类,你可以认为这个类就是你电脑中的真实设备,所有在你所绘制的场景中的的图形对象都是从这个类衍生出来的。

在这里,device有三个构造函数,现在,我们只准备使用其中的一个,在后面的章节中,我们将介绍另外的构造函数。
我们要使用的函数原型和参数说明如下
public Device
(
System.Int32 adapter ,
Microsoft.DirectX.Direct3D.DeviceType deviceType ,
System.Windows.Forms.Control renderWindow ,
Microsoft.DirectX.Direct3D.CreateFlags behaviorFlags, Microsoft.DirectX.Direct3D.PresentParameters presentationParameters
)
第一个是你的物理显示卡的设备豪,一般是0;
第二个参数deviceType,是告诉Direct3d你要建立的设备类型,一般使用DeviceType.Hardware,意思是你建立一个硬件设备类型,还有一个参数值是DeviceType.Reference,标准类型,除非是在进行调试的时候采用这个参数,其他时候是不必要的,因为会使你的程序运行得非常非常的慢。他打开的光栅,或者是在测试显示卡是否支持光栅功能时使用
第三个是enderWindow,他告诉程序使用什么来呈现你所需要的场景,我们一般使用this,这里代表使用本窗口来呈现
第四个behaviorFlags是设备建立以后的表示幅,这样说吧,我们使用的是软件顶点处理,也就是说所有的多边形定点建立都是由cpu来完成的,不用显卡完成,这样的话,速度确实比直接使用显卡完成要慢一些,但是我们还不清楚是否所有使用本程序的人的显卡是否支持这个特性,所以为了安全起见,我们在这里参数中设置为cpu完成模型建立的工作
presentationParameters 比较麻烦,我们这里只是设置的是否全屏显示,其实他还包括一些设置,如后台缓冲区的高度、宽度和像素格式,以及从后台缓冲区复制到前台缓存屏幕显示的方式等等。如果Direct3D采用窗口方式运行,像素格式必须查询当前的显示模式获得


好了,参数也介绍完了,现在我们开始来建立我们的第一个设备吧,首先,和所有c#语言一样,我们必须先申请一个设备,我们可以在frme1类下面申请一个设备
private Device device = null;
然后,我们建立一个初始化函数来初始化我们的设备,这里就要用到刚刚所讲的构造函数了。
public void InitializeGraphics()
{
    // 设置参数

    PresentParameters presentParams = new PresentParameters();

    presentParams.Windowed = true;  //窗口模式
    presentParams.SwapEffect = SwapEffect.Discard;  //交换

    // 创建设备
    device = new Device(0, DeviceType.Hardware, this,
       CreateFlags.SoftwareVertexProcessing, presentParams);
}


在这里,建立设备以前,我们申请了一个presentParams(表达参数),来设置一些我们所关心的地方,比如窗口模式和双缓存,然后建立设备,按照上面的参数,我们建立一个这样的设备,它使用我们的第一块显卡,硬件加速,在本类(也就是我们的windows窗口)中呈现场景,使用cpu建立多边形顶点,并且是窗口模式,使用SwapEffect

接下来,我们要来调用这个函数以便设备的真正建立。
static void Main()
{
    using (Form1 frm = new Form1())
    {
        // 显示窗口并初始化
        frm.Show();
        frm.InitializeGraphics();
        Application.Run(frm);
    }
}

这里代码就不多说了,大家都可以看懂
注意以下,这里修改了.NET默认的代码,使用了using 语句和show(),是为了确保程序的安全性,可以保证在我们建立我们的设备以前,windows窗口已经建立并且加载完全。我建议大家以后写的时候都这样。
好了,现在你可以编译代码了。现在,就是我们所建立的第一个Direct3D程序

呵呵,这里程序虽然十分的简单,但是它已经是一个完整意义上的Direct3D程序了,在DirectX9.c发布以后,通过c#语言这样的描述,Direct3D程序编写起来比用c++要简单得过了,而且随着.net平台的主导地位逐渐加强,这种感觉将越来越明显。
不过,老美的东西仍旧是老美的东西,我们再怎么样,现在看来也不过是个民工,别人给好了图纸,我们只是砌房子,这点,在我找资料的时候就发现了,中文文档,连翻译的都非常非常少,更别说原创的了。所以,我在这里把我看得英文文档逐渐翻译过来,希望能给大家帮助,让我们之中也多几个画图纸的而不是砌房子的。呵呵~~~~~

版权声明:本文为博主原创文章,未经博主允许不得转载。

DirectX学习笔记(二):Direct3D初始化详解

前言: Direct3D是一套底层的API,即:应用程序接口。Direct3D主要用来开启硬件加速功能来绘制3D场景,它可以看做是应用程序和图形设备(3D硬件)交互的中介: Application...
  • lishuzhai
  • lishuzhai
  • 2016年09月11日 19:10
  • 3659

【DirecX 教程】Lesson 7:初始化Direct3D

 Lesson 7:初始化Direct3D 课程z
  • neilol
  • neilol
  • 2014年11月17日 14:27
  • 491

第一次使用Direct3D

生命不止,奋斗不息,我无法让自己的思想停留下来,无法忍受自己虚度光阴,无所事事,我一直不看好满足现状,不求进取的人,也正因为如此,我一直在使自己变得完美,只要不会,只要有机会学,当然只要有时间,我都会...
  • lixiang987654321
  • lixiang987654321
  • 2016年06月05日 17:46
  • 788

Directx Sample Browser中的DXUT例子Failed Creating Direct3d Device 的解决方案

最近有幸在做D3D的相关程序,于是就从微软官网下载了D
  • wangdongjie1993
  • wangdongjie1993
  • 2014年10月26日 12:02
  • 1053

基于win32创建的direct3d程序

源代码:#pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.lib") #include #include LPDIRECT3...
  • fanzhousihai
  • fanzhousihai
  • 2012年11月03日 19:53
  • 212

Direct3D基础概念和模型整理

模型主要是物理组成,数据传输和固定图形管道模型;概念主要包括IDirect3D, Adapter, Device, swap chain,surface后台缓存、前台缓存、深度和模板缓存,资源,资源类...
  • Blues1021
  • Blues1021
  • 2014年11月14日 00:32
  • 2133

Direct3D 11 教程1:Direct3D 11基础

概览 在第一个教程中,我们学习了创建一个最小Direct3D 11应用程序所需的元素,每个Direct3D 11应用程序必须包含这些元素才能正常工作,这些元素包括创建一个窗口和设备对象,然后才能在窗...
  • jake2012
  • jake2012
  • 2014年04月23日 15:18
  • 1220

Direct3D补充篇:表面缓冲区技术实现动画的流畅显示

本篇讲的是我们开始一些工程之前所需要掌握了解的东西。只要是补充篇基本都不涉及代码,只是对某些重要属性的分析和基础的普及。我会从多个方面去引入,刚入门的同学也能看明白。 表面缓冲区是Direct3D中比...
  • mao_xiao_feng
  • mao_xiao_feng
  • 2016年10月05日 20:25
  • 728

Direct3D9的学习历程三:Direct3D9中的纹理贴图

Texture coordinates are used to define a triangle on the texture that gets mapped to the 3D triangle...
  • weiming28cn
  • weiming28cn
  • 2005年04月04日 08:56
  • 1048

【阅读笔记】关于Direct3D初始化的一个完整工程及介绍

Direct3D初始化工程           初次接触Direct3D,初始化过程是一个比较令人烦心的问题。下面就该工程做些介绍。   一、框架       1. WinMain函数,对...
  • chenwu_843402773
  • chenwu_843402773
  • 2012年10月16日 17:29
  • 1460
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Direct3D学习笔记(二)我们这里可以编写一个完全意义上的Direct3D程序了。
举报原因:
原因补充:

(最多只允许输入30个字)