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...

Direct3D学习笔记(二)——精灵动画(Sprite)

一、MyDirectX.h #pragma once //header files #define WIN32_EXTRA_LEAN #define DIRECTINPUT_VERSIO...

DirectX 9 UI设计学习笔记之二:第2章Introducing DirectX+第3章Introducing Direct3D

此文由哈利_蜘蛛侠原创,转载请注明出处!有问题欢迎联系本人!        邮箱:2024958085@qq.com   上一期的地址: DX 9 UI设计学习笔记之一       ...

DirectX 9.0c游戏开发手记之“龙书”第二版学习笔记之2: Chap4: Direct3D Initialization

从这一期开始,我们正式来研究“龙书”第二版的课后习题啦!这一次讲的是第4章的习题。可能有人会奇怪:为何从第4章开始呢?手头有书的同学大概没有这样的疑问,因为前面3章是讲述3D图形的数学知识的,基本上就...

Practical Rendering and Computation with Direct3D 11学习笔记(2.1.1)

Practical Rendering and Computation with Direct3D 11学习笔记 第二章 Direct3D 11  资源 2.1 资源概述 资源:分两种  每种有几个子...

DirectX 9 UI设计学习笔记之三:第4章Introducing DirectInput+第5章Wrapping Direct3D

此文由哈利_蜘蛛侠原创,转载请注明出处!有问题欢迎联系本人!        邮箱:2024958085@qq.com          上一期的地址: DX 9 UI设计学习笔记之二  ...

direct3D 学习笔记

DirectX SDK 2006学习笔记1——框架2008-01-31 13:20友情提醒:所谓的框架是指SDK目录下/Samples/C++/Common路径下的DXUT系列函数包装。学习框架的前提...

DirectX学习笔记(六):Direct3D中模拟实现光照下的物体绘制

前言:一般来讲,光照的使用有助于增强场景的真实感,也有助于描述实体的形状和立体感。在Direct3D中,Direct3D会将顶点送入光照计算引擎,依据光源类型,材质,以及物体表面想对与光源的朝向,计算...

DirectX学习笔记(八):Direct3D融合技术详解及物体透明效果的实现

前言: 融合技术,将当前要进行光栅化的像素的颜色与先前已经光栅化并处于同一位置的像素的颜色进行合成,即:将正在处理的图元颜色值与存储在后台缓存中的像素颜色值进行合成,利用该技术,可以获得很多种效果...

DirectX 9.0c游戏开发手记之“龙书”第二版学习笔记之5: Chap7: Drawing in Direct3D ---- Part I

这一章终于开始讲绘制3D图形的内容了!这一章讲的是非shader方法,也是“龙书”第一版大部分时候所用的方法。 但是值得注意的是,这里的顶点声明是用D3DVERTEXELEMENT9数组实现的,而不...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Direct3D学习笔记(二)我们这里可以编写一个完全意义上的Direct3D程序了。
举报原因:
原因补充:

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