Direct3D9 初级教程
Directx9.0学习教程1-第一个程序
Directx9.0学习教程1-第一个程序Directx9.0 学习教程1 - 第一个程序在图书馆选了N本书,还是觉得直接讲代码的书更适合我,一个完整的列子加上些许注释,比那些一上来就是一大段一大段的文字阐述的教程容易懂的多。
因此我的笔记也开始用这种方式记录。
写在开头: dx(我对directx简称) dx的版本主要有9 和11这两种系列。
API和功能差异还是笔记大的。
但是手头dx9的书笔记齐全。
就开始看dx9 了。
而且学习从来都是学习他的思想,尽管可能换版本要换配置环境,或者换api ,但是大概思想是不变的。
学了总有好处。
下面是学习这本书的第一个列子。
说白了就是个vc++的小框架。
然后有一点dx的代码。
但是这个小框架以后可以自己慢慢丰富。
可能对MFC抵触的童鞋觉得里面的win32 api晦涩难懂,但是完全没必要注意哪些细节,这个小框架只是为了显示一个窗口展示dx ,还有消息处理。
所以会用就行了。
转自/cq361106306/article/details/39549091 先介绍下win32下dx主要工作流程:1.winMain 函数这个是整个工程的入口函数,看代码也是从这里开始看[cpp] view plaincopy1.//先定义窗口类2.WNDCLASSEX wc={...} //细节不用管,你也记不住3.4.//注册窗口类5.RegisterClassEx(&wc);6.7.//然后就是创建窗口类8.HWND hwnd=CreateWindow(....)//里面的参数主要是窗口大小和标题,可以自己改改9.10.//---------以上是win32窗口的东西11.//---------以下就开始d3d的初始化了12.13.//源代码里有很多if这些只看流程我就省略了14.15.//首先把窗口传给D3D。
16.InitD3D(hwnd); //这个函数里面的东西在后面讲。
先记住大概流程就行了17.18.//然后装载模型19.InitGeometry();//这个也后面讲20.21.//初始化完了。
Direct3D9初级教程
//调用方法 IDirect3D9::CreateDevice 创建设备对象,并获取 //接口 IDirect3DDevice9 的指针,我们将通过该指针操作设备对象
m_pD3D->CreateDevice(
D3DADAPTER_DEFAULT, //使用缺省的显卡
D3DDEVTYPE_HAL,
//指定设备类型为 HAL
(D3DWnd.cpp) int CD3DWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) {
if (CWnd::OnCreate(lpCreateStruct) == -1) return -1;
InitD3D(); //初始化 Direct3D return 0; }
为类 CD3DWnd 添加下列成员: (D3DWnd.h)
... ... #include <d3d9.h> #include <d3dx9math.h> class CD3DWnd : public CWnd { protected:
LPDIRECT3D9 m_pD3D; //Direct3D 对象的接口指针 LPDIRECT3DDEVICE9 m_pDevice; //设备对象的接口指针 void InitD3D(); //该函数用于初始化 Direct3D ... ...
输入初始化函数 InitD3D 的代码: (D3DWnd.cpp)
void CD3DWnd::InitD3D() {
//创建 Direct3D 对象,并获取接口 IDirect3D9 的指针, //我们将通过该指针操作 Direct3D 对象。 m_pD3D = ::Direct3DCreate9(D3D_SDK_VERSION);
DirectX 9 SDK编程的教程
DirectX 9 SDK编程的教程2008-11-11 14:19译:kevin-y程序代码:下载导言欢迎来到我的第一个关于DirectX编程的教程,我们使用的是DirectX 9 SDK。
很大一部分的C#开发人员都等待这个版本。
在此这前,C#开发人员都是通过DirectX 7 或 8 的VB组件,使用COM接口的方式,来进行DirectX的开发。
新版本的DirectX组件提供的更好的性能、更容易的编程。
该教程适合DirectX编程的新手(如我),还有其他使用COM接口进行DirectX开发的人员。
在这教程里,我们将重建一个Super Metroid的游戏(我们就叫她做Managed metroid吧)。
我们将要应用所有DirectX编程中的方方面面(DirectDraw,DirectSound,DirectInput,Direct3D,DirectPlay 和AudioVideoPlayback)。
在第一节我们将要学习在全屏下绘制文字和窗口标题,以此灌输一些基本的DirectDraw知识。
我们所需要的-Microsoft Windows NT4 SP6, Windows 2000, Windows XP Pro(只是编译所需) -Visual C# .NET or Visual Studio .NET-DirectX 9 SDK Full or only C# Part(没有的话要到这Microsoft)-Image editing tool(可选但很有用)-SNES Emulator with Super Metroid ROM(可选)第一节:标题窗口1.加入DirectX 的命名空间到project中。
在引用(reference)中加入Microsoft.DirectX.dll andMicrosoft.DirectX.DirectDraw.dllusing Microsoft.DirectX;using Microsoft.DirectX.DirectDraw;2.加入变量一开始,我们需要建立DirectDraw Device,接着建立Surfaces。
《DirectX9.03D游戏开发编程基础》学习笔记#0序言
《DirectX9.03D游戏开发编程基础》学习笔记#0序⾔ 这⼀系列的笔记将结合教材《DirectX 9.0 3D游戏开发编程基础》,也就是⼈们常说的龙书,介绍DirectX 9.0 (后⽂简称D9)常⽤的基础知识,并记录学习过程中遇到的⼀些问题。
1.为什么是D9⽽不是D11? DirectX是微软公司制作的⼀套底层图形API (应⽤程序编程接⼝),借助它,可以利⽤硬件加速功能绘制3D场景,被⼴泛应⽤于Microsoft Windows、Microsoft Xbox和Microsoft Xbox 360平台上的游戏开发。
在上述3个平台中,显然Windows平台上的⽤户最多,⽽Windows平台中,XP还占有⾮常⼤的⽐例,且XP只⽀持D9,因此,尽管D11版本更新,且具有⼀些新特性,但在⽬前还不能完全取代D9,主流的PC游戏通常兼顾D9和D11。
再者,D11虽然是D9的升级版本,但两者有很⼤区别,不可以等同。
综上,我们选择从较为基础的D9开始,后续再在D9的基础上学习D11的新特性。
2.开发环境 操作系统:Windows,笔者使⽤的是win8.1 编程语⾔:C++ 编译环境:推荐VS系列 (为啥,和上⾯软件保持⼀致,都⽤微软家的,没⽑病),笔者使⽤的是VS2010,下载链接 (旗舰版,电驴链接,可⽤迅雷下载,32和64位系统都可以安装):ed2k://|file|cn_visual_studio_2010_ultimate_x86_dvd_532347.iso|2685982720|4AE6228933DDE49D9BFA4C3467C831C2|/3.环境安装及测试3.1 环境安装 环境的安装并不复杂,这⾥就不再赘述,有两点注意事项做下简要说明: a. Win8.1下安装VS2010的过程中,弹出了提⽰“由于兼容性问题⽆法使⽤此驱动程序 VSPerf Profiling Control Driver”,该项是性能分析器,并不影响我们后续的学习,因此可忽略这个问题。
详解DX9下3D游戏编程1
Introduction to 3D Game Programming with DirectX 9.0原著: Frank D. Luna第二部分第一章 D3D初始化D3D的初始化以前一直被认为是一项乏味琐碎的工作。
幸运的是8.0版本简化了初始化模式并且DX9.0也使用和它相同的模式。
然而,在这个过程中仍需要我们熟知图形学的基础知识和D3D的基本类型,本章的前几节将讲述这方面的内容。
在余下的小节里将解释初始化的过程。
目的:1.学习D3D怎样与图形硬件交互作用2.弄懂COM在D3D中所扮演的角色3.学习基础图形学知识,如2D图片是如何存储的、页面切换和深度缓冲4.学习如何初始化D3D5.熟悉本书例程中的一些常用的结构1.1 Direct3D概述D3D是一种低层图形API,它主要使用3D硬件加速来进行3D世界的渲染。
我们可以把D3D看作是应用程序和图形设备之间的中介。
例如通知图形设备清空屏幕,应用程序将调用D3D的IDirect3DDevice9::Clear 方法。
图1.1显示了应用程序、D3D和图形设备之间的关系。
此图片被缩小显示,点击查看大图图1.1:应用程序、D3D和硬件间的关系。
图中所表示的D3D是已定义的供程序员使用的D3D接口和函数的集合。
这些接口和函数代表了当前版本的D3D所支持的全部特性集。
注意:仅仅因为D3D支持某种特性,并不意味着你使用的显卡会支持它。
如图1.1所示,在D3D和图形设备之间有一层中介——叫做硬件抽象层(HAL,Hardware Abstraction Layer)。
D3D不能直接作用于图形设备,因为现在市面上的显卡种类实在是太多了并且每种显卡都有不同的性能和处理事件的方式。
例如,两种不同的显卡实现清屏的方式也可能是不同的。
因此,D3D要求设备制造商实现HAL。
HAL是一组指示设备执行某种操作的特殊设备代码的集合。
用这种方法,D3D避免了必须去了解某个设备的特殊细节,使它能够独立于硬件设备而存在。
3ds Max 9中文版基础教程09第九章
物体建模阶段
设置材质阶段
设置灯光和摄影机阶段
设定动画阶段
渲染合成阶段
9.2 基础动画入门
本节首先以一个有趣的UFO飞行动画为例,重点介绍三维动画的 制作过程,使读者大致了解三维动画的基本操作过程。关于物体的制作 方法及参数解释将在以后的章节中详细介绍。
UFO飞行动画
9.3 动画制作与调节
在3ds Max 9中有两种动画记录模式:自动关键点记录模式和设置 关键点记录模式。这两种记录方式虽然方法不同,但结果是相同的。本 节将介绍这两种动画记录方式的使用方法以及关键点编辑方法和循环动 画的制作方法。
第9章 动画与粒子系统
1
三维动画制作原理及流程
2
基础动画入门3动画制作与调节 Nhomakorabea4
【反射】贴图通道
5
【多维/子对象】材质
6
制作镜面反射效果
9.1 三维动画制作原理及流程
在制作三维动画前,应先了解有关动画制作的原理及常规流程,这 将有助于更好地理解许多三维动画方面的概念,同时也可以搭建起一个 制作三维动画的基本框架,从而能够提纲挈领地掌握三维动画制作中不 同阶段所需的工作。
茶壶倒水动画
9.4 粒子系统
粒子系统可以用来创建雨、雪、灰尘、火花以及喷泉等,是三维 动画中不可缺少的一部分。在3ds Max 9中有多种粒子物体,合理调节 它们的参数,就可得到千变万化的效果。本节介绍粒子系统的使用方法。
海底水泡及鱼群游动效果
9.5 综合实训一 ──制作链接约束动画
利用一个圆锥体和一个球体,制作链接约束动画。
链接约束动画效果
9.6 综合实训二 ──制作球体爆炸
本节利用粒子阵列、重力空间扭曲物体和导向器,制作一个球体 的爆炸动画。
DirectX9入门
第一章DirectX 是在管理游戏应用程序编程接口 (API) 为 Windows 平台。
就在几年前游戏者而斗争所产生的硬件的不兼容的问题,使得人人不能享有他们的游戏。
随着后来Microsoft 推出DirectX。
它提供了一个单一的、几乎去除了API 将写入的游戏人员保证兼容性跨不同的 PC 硬件的问题。
多年以来的 DirectX 版本的 Windows 下运行的游戏数量急剧增加。
这是在这一章中,您将学习:■什么 DirectX 是■为什么 DirectX 是有用■的组件组成,DirectX API 什么是DirectX 吗?DirectX 是 Microsoft 集合的 api,旨在为游戏开发人员提供到运行 Windows 的计算机硬件的低级别的接口。
当前版本 9.0,DirectX API 的每个组件提供不同方面的声音,包括图形和一个标准接口,通过访问网络化的硬件。
此接口允许开发人员编写他们使用一组功能而不用管他们用什么的硬件在运行的游戏。
3组件的 DirectX API 拆分成多个的组件,每一名代表在系统的不同方面。
每个 API 可用于单独,从而只需要你的游戏的功能。
下面是组件:■ DirectX 图形。
这是处理所有图形输出的组件。
此 API 提供用于处理绘图,以及初始化和设置您的游戏的决议的 2D 和 3D 图形的函数。
■ DirectInput。
所有用户输入通过此 API 处理。
此组件包括对设备如键盘、鼠标、游戏板和游戏杆的支持。
DirectInput 现在还添加了对反馈功能的支持。
■ DirectPlay。
DirectPlay 通过增加了您的游戏的网络支持。
网络功能提供允许多人玩的其他计算机的通信。
DirectPlay 给您一个高级别接口网络,让你不必执行网络通信的每个方面。
■ DirectSound。
当需要添加声音效果或背景音乐时,这是使用的 API。
DirectSound 的功能可以加载和播放的一个或多个 WAV 文件同时提供了对他们完全控制如何播放。
direct3d9基本流程
Direct3D 9基本流程详解一、引言Direct3D9是微软开发的一套用于渲染三维图形的API(应用程序编程接口),广泛应用于游戏开发、多媒体应用以及三维图形渲染等领域。
本文将详细介绍使用Direct3D9进行三维图形渲染的基本流程,包括初始化、资源加载、渲染循环以及资源释放等步骤。
二、初始化在使用Direct3D9进行三维图形渲染之前,需要进行一系列的初始化工作,包括创建Direct3D设备、设置渲染目标等。
具体步骤如下:1.创建Direct3D对象:通过调用Direct3DCreate9函数创建一个IDirect3D9对象,这是与Direct3D9API进行交互的起点。
2.枚举硬件设备:使用IDirect3D9对象的GetAdapterCount和GetAdapterIdentifier方法枚举系统中的显示适配器,并获取其相关信息。
3.创建设备:根据获取到的显示适配器信息,调用IDirect3D9对象的CreateDevice方法创建一个IDirect3DDevice9对象,即Direct3D设备。
在创建设备时,需要指定设备的类型(如窗口设备或全屏设备)、渲染目标以及其他相关参数。
4.设置渲染目标:在创建完设备后,需要为其设置渲染目标,即将渲染结果输出到哪个窗口或纹理上。
这通常通过调用IDirect3DDevice9对象的SetRenderTarget方法实现。
三、资源加载在初始化完成后,可以开始加载所需的资源,如纹理、模型数据等。
这些资源通常存储在外部文件中,如图像文件、模型文件等。
加载资源的一般步骤如下:1.读取文件:使用文件I/O操作读取外部文件中的资源数据。
2.创建资源对象:根据读取到的资源数据,调用相应的Direct3D9API函数创建对应的资源对象,如纹理对象、顶点缓冲对象等。
3.设置资源属性:根据需要设置资源的属性,如纹理的过滤方式、顶点缓冲的顶点格式等。
4.将资源数据上传到GPU:调用资源对象的相应方法,将资源数据从CPU内存上传到GPU内存,以便在渲染时使用。
DirectX 9 SDK编程的教程
DirectX 9 SDK编程的教程2008-11-11 14:19译:kevin-y程序代码:下载导言欢迎来到我的第一个关于DirectX编程的教程,我们使用的是DirectX 9 SDK。
很大一部分的C#开发人员都等待这个版本。
在此这前,C#开发人员都是通过DirectX 7 或 8 的VB组件,使用COM接口的方式,来进行DirectX的开发。
新版本的DirectX组件提供的更好的性能、更容易的编程。
该教程适合DirectX编程的新手(如我),还有其他使用COM接口进行DirectX开发的人员。
在这教程里,我们将重建一个Super Metroid的游戏(我们就叫她做Managed metroid吧)。
我们将要应用所有DirectX编程中的方方面面(DirectDraw,DirectSound,DirectInput,Direct3D,DirectPlay 和AudioVideoPlayback)。
在第一节我们将要学习在全屏下绘制文字和窗口标题,以此灌输一些基本的DirectDraw知识。
我们所需要的-Microsoft Windows NT4 SP6, Windows 2000, Windows XP Pro(只是编译所需) -Visual C# .NET or Visual Studio .NET-DirectX 9 SDK Full or only C# Part(没有的话要到这Microsoft)-Image editing tool(可选但很有用)-SNES Emulator with Super Metroid ROM(可选)第一节:标题窗口1.加入DirectX 的命名空间到project中。
在引用(reference)中加入Microsoft.DirectX.dll andMicrosoft.DirectX.DirectDraw.dllusing Microsoft.DirectX;using Microsoft.DirectX.DirectDraw;2.加入变量一开始,我们需要建立DirectDraw Device,接着建立Surfaces。
3ds Max 9中文版基础教程10第十章
【渲染】对话框
渲染结果
【区域】渲染结果
【裁剪】渲染结果
【放大】渲染结果
10.2 默认【扫描线】渲染器
【扫描线】渲染器通过连续的水平线方式渲染场景,是3ds max从Video Post或渲染场景对话框渲染场景时默认的渲染器,材质编辑器也通过它来显示 材质和贴图的情况。渲染结果通过渲染帧窗口显示出来。Leabharlann 【AVI 文件压缩设置】对话框
第10章 渲染系统
1
常用渲染工具
2
默认【扫描线】渲染器
10.1 常用渲染工具
在3ds max9界面的工具行右侧提供了几个专门用于渲染工作的按钮, 分别是 按钮、 按钮和 按钮。
• • • (渲染场景对话框)按钮:该按钮用来进行场景渲染,它是标准的渲染工具。单击 此按钮,可打开【渲染场景】窗口,进行参数设置后完成渲染工作。它的快捷键为 F10。 (快速渲染)按钮:按默认设置快速渲染当前激活窗口中的场景。它的快捷键为 Shift+Q。 (交互式渲染)按钮:在 按钮上按住鼠标左键不放,在弹出的按钮组中可看到 按钮,它提供了一个渲染的预览视图,当改变场景中物体的材质及灯光时,它可以自 动反映到渲染图上。
win10安装directx9的图文安装步骤教程directx9无法安装解决方法
win10安装directx9的图⽂安装步骤教程directx9⽆法安装解决⽅法win10 如何安装directx9?directx9是⼀款系统级⼯具软件,简便易⽤,有了它可获得更好的图像显⽰质量,使多⼈游戏具可伸缩性,包括更棒的⾳频效果。
默认情况下,win10系统没有安装directx9,需要⼿动安装,那么怎么才能更好的⼿动安装directx9呢?如果在安装directx9的过程中出现⽆法安装的情况⼜该如何解决呢?下⾯就让⼩编给⼤家详细的介绍directx9的安装步骤和解决办法吧!DirectX修复⼯具(检测修复DirectX Repair) v4.0.0.35152 增强版类型:系统其它⼤⼩:118MB语⾔:简体中⽂时间:2021-02-16查看详情DirectX9.0c 最新官⽅多语⾔完全安装版Win9x/ME/2000/XP/2003)类型:系统增强⼤⼩:109MB语⾔:简体中⽂时间:2013-02-16查看详情具体⽅法如下:1、下载DirectX9.0安装程序到电脑上,根据电脑系统版本下载对应的DirectX9.0。
2、双击DirectX9.0程序,启动安装。
弹出界⾯中单击“下⼀步”。
3、单击“下⼀步”后程序开始安装,如图所⽰。
4、直到安装完成即可。
在界⾯中单击“完成”。
5、Win+R打开运⾏输⼊dxdiag。
查看DirectX版本。
Win10系统安装directX9失败应该如何解决?解决⽅法:1、⾸先,按Win+S组合快捷键,在搜索:启⽤或关闭Windows功能,在点击打开;2、然后,在打开的Windows功能界⾯展开旧版组件,在勾选 DirectPlay,在点击确定保存设置,就会开始⾃动安装;3、在等待安装完成后确定退出查看是否可以正常运⾏程序,若还是提⽰缺少⽂件的话则可以使⽤Windows10 DircetX修复⼯具|DirectX Repair 3.3增强版进⾏修复100%解决问题了。
directx9.0怎么安装的详细教程
directx9.0怎么安装的详细教程
DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。
小提示:有许多游戏,如果不安装DirectX,运行游戏可能会有如下报错:如《永恒之塔》
对于每一台安装《永恒之塔》客户端的PC机,安装DirectX9.0C以上版本都是必须的。
以下是DirectX的下载及安装步骤:
1、首先请下载DirectX
2、运行directx_nov2008_redist.exe
3、点击Yes。
4、这步需要指定一个文件夹来解压安装包中的安装文件。
5、在空白处输入D:DX9(路径只是举例),然后点击OK。
6、提示D:DX9文件夹不存在,是否需要创建,点击是(Y)。
7、正在解压安装文件中。
8、打开D:DX9,找到DXSETUP.exe,双击运行。
9、选择“我接受此协议”,点击下一步。
10、再次点击下一步。
11、安装过程中。
12、安装完成,点击完成。
DIRECTX9 入门手册
技术文档(Document)作者:yanjun来自:yanjun_1982的专栏DirectX9.0 入门手册这一章我先不写有关DX的东西,我先从最基本的窗口创建讲起,然后再慢慢讲解使用DX的一些内容.我写这个指南的主要目的是为了学习。
我希望自己可以通过写这个指南更快地学会DirectX。
同时,我也希望为其他想学习的同伴提供一些学习资料。
在编程方面,我并不是很强的人,再加上人总是会犯错的,如果我这些文字给贻笑大方的话,我接受大家对我提出有建设性的批评,如果你有更好的想法要和我交流,可以联系我:fowenler@下面正式开始吧,先讲窗口类,创建窗口,销毁窗口,窗口消息处理函数.窗口类WNDCLASSstruct WNDCLASS {UINT style;WNDPROC lpfnWndProc;int cbClsExtra;int cbWndExtra;HINSTANCE hInstance;HICON hIcon;HCURSOR hCursor;HBRUSH hbrBackground;LPCSTR lpszMenuName;LPCSTR lpszClassName;};style:用来定义窗口的行为。
如果打算共同使用GDI和D3D的话,可以使用CS_OWNDC作为参数。
lpfnWndProc:一个函数指针,指向与这个窗口类绑定在一起的处理窗口消息的函数。
cbClsExtra和cbWndExtra:为窗口和为分配内存空间。
很少使用到这两个参数,一般设为0;hInstance:应用程序的实例句柄。
你可以使用GetModuleHandle()来得到它,也可以从Win32程序的入口函数WinMain那里得到它。
当然,你也可以把它设为NULL(不知有什么用)hIcon,hCursor,hbrBackground:设置默认的图标、鼠标、背景颜色。
不过在这里设置这些其实并不怎么重要,因为我们可以在后面定制自己的渲染方法。
DIRECTX 9 SDK 安装设定教学
DIRECTX 9 SDK 安裝設定教學V1.1下載DirectX Software Development Kit 1.下載連結DIRECTX 9 march SDK2.執行安裝安裝過程會有是否要新的directx的訊息通知,自行選擇在此我選全部都安裝安裝好便可以在工具列找到,在此是WIN 7的示範畫面3.開啟VISUAL STUDIO 2008(2005)這邊示範的是2008 英文版本4.Add Include Directory(包含DXUT)開啟tool->optionsProjects and solution->VC++ Directories選Include filesAdd Include Directory-----------------C:\Program Files\Microsoft DirectX SDK (March 2009)\IncludeC:\Program Files\Microsoft DirectX SDK (March 2009)\Samples\C++\DXUT\Core C:\Program Files\Microsoft DirectX SDK (March 2009)\Samples\C++\DXUT\Opt -----------------5.Add Library Directory開啟DIRECTX 安裝目錄C:\Program Files\Microsoft DirectX SDK (March2009)\Samples\C++\DXUT進入CORE目錄->選擇DXUTCore_2008.sln(請依VS版本選擇)選擇Debug 接著build solution產生C:\Program Files\Microsoft DirectX SDK (March 2009)\Samples\C++\DXUT\Core\Debug(也可以多弄Release)接著進入Optional目錄進行一樣動作產生C:\Program Files\Microsoft DirectX SDK (March2009)\Samples\C++\DXUT\Optional\Debug(也可以多弄Release)再到tool->options->Projects and solution->VC++ DirectoriesAdd Library Directory-----------------C:\Program Files\Microsoft DirectX SDK (March 2009)\Lib\x86C:\Program Files\Microsoft DirectX SDK (March 2009)\Samples\C++\DXUT\Core\Debug C:\Program Files\Microsoft DirectX SDK (March 2009)\Samples\C++\DXUT\Opt\Debug-----------------6.到這邊之後就可以開始進入DIRECTX的世界囉~進sample Browser 可以下載範例來練習。
3ds Max 9中文版基础教程08第八章
8.6 【反射】贴图通道
在3ds Max 9的材质中,反射效果最能表现质感,因为多数反射贴图都是 根据真实的物理反射原理设计出来的,所以它的真实感最强。有一些程序贴图 是专用于【反射】贴图通道的,它们的效果和用法都有所区别。
反射效果
8.7 【多维/子对象】材质
【多维/子对象】材质可将多个材质组合成为一种复合材质,分别指定给一 个物体的不同子物体。下面就以一个圆柱体为例,来介绍【多维/子对象】材质 的制作方法。
多维子材质
顶底材质
8.8 综合实训──制作镜面反射效果
【多维/子对象】材质可将多个材质组合成为一种复合材质,分别指定给一 个物体的不同子物体。下面就以一个圆柱体为例,来介绍【多维/子对象】材质 的制作方法。
反世界中没有哪个物体是绝对光滑的,其表面总是有不同的凹凸效果, 在三维空间中创建出来的表面都是绝对纯平的,缺乏真实感,因此【凹凸】贴 图通道对表现物体的真实感起到很大作用。这种方法的优点是渲染速度快,缺 点是不会产生阴影。对于一般的砖墙、路面等,利用它可以产生真实的效果。
凹痕效果加深后的墙体材质效果
第8章 3ds Max 9的材质应用
1
基础材质的使用
2
贴图训练
3
基础材质
4
程序贴图
5
【凹凸】贴图通道
6
【反射】贴图通道
7
【多维/子对象】材质
8
制作镜面反射效果
8.1 基础材质的使用
在3ds Max 9中,单击菜单栏中的 按钮(快捷方式为按键盘上的M键)可 开或关【材质编辑器】窗口,所有材质的调节工作都在此窗口中完成。
【材质编辑器】窗口形态
8.2 贴图训练
在使用材质时,往往需要用到各种各样的贴图。3ds Max 9提供了多种贴 图方法,以便用户制作丰富多彩的材质,如大理石、金属、玻璃和云雾等。常 用贴图方式可分为以下两类。
DirectX9 NVSDK QuerySample 用户指南说明书
User Guide QuerySampleIntroduction What Is theQuerySample?The NVSDK QuerySample shows how to use the various query types exposed inDirectX9. DirectX9 supports the following queries (see also DirectX SDKdocumentation, ‘Queries’):Vertex Cache Size (D3DQUERYTYPE_VCACHE)Resource Stats (D3DQUERYTYPE_RESOURCEMANAGER)Vertex Stats (D3DQUERYTYPE_VERTEXSTATS)Event (D3DQUERYTYPE_EVENT)Occlusion (D3DQUERYTYPE_OCCLUSION)Timstamp (D3DQUERYTYPE_TIMESTAMP)Timestamp Disjoint (D3DQUERYTYPE_TIMESTAMPDISJOINT)Timestamp Frequency (D3DQUERYTYPE_TIMESTAMPFREQ)Pipeline Timings (D3DQUERYTYPE_PIPELINETIMINGS)Interface Timings (D3DQUERYTYPE_INTERFACETIMINGS)Vertex Timings (D3DQUERYTYPE_VERTEXTIMINGS)Pixel Timings (D3DQUERYTYPE_PIXELTIMINGS)Cache Utilization (D3DQUERYTYPE_CACHEUTILIZATION)This document discusses how to use the sample and then goes into detail whatinformation the different query types provide.Using this Sample After starting the QuerySample, it displays on the left side of the screen a slowly rotating pinwheel. On the right side of the screen it shows the results of issuing the various query types. See Figure 1.Figure 1. QuerySample on Start-upThe sample provides a standard set of UI elements for choosing rendering and display parameters. Table 1 summarizes the keyboard shortcuts to these elements.The “Render Load” slider in the upper right corner increases the render load of thescene. At the left most settings the polygons in the pinwheel are rendered once. Atthe right most setting the same draw call is repeated 20,001 times. Since the z-test isset to ‘less’ all pixels in the pinwheel are drawn exactly once on-screen, even withthe slider at the right most setting.Right-click dragging the mouse rotates the pinwheel; the mouse wheel zooms thecamera in and out.Table 1. Keyboard CommandsDescriptionKeyF1 Toggle help textF2 Change DeviceF3 Toggle RefH Toggle UIAlt + Enter Toggle Full screen modeEsc ExitKnown BugsNone.What this Sample Shows This section describes in detail what the various queries measure and what isnecessary to access a query’s data. The sample comes with full source code andhence serves as a working example as how to use and access each of the query’sdata.Vertex Cache SizeThe vertex cache query returns hints as to how to best optimize a mesh’s vertexlayout for the GPU’s PostTnL cache. It returns the optimization method to use(longest strips versus vertex cache usage), and the size of the vertex cache.All current NVIDIA GPUs prefer the vertex cache usage and have a PostTnL cachethat is a strict FIFO. The cache size is 16 vertices for GeForce 1, GeForce 2, andGeForce 4 MX architectures and 24 vertices in all GeForce 3, GeForce 4, GeForceFX, and GeForce 6 architectures. For more information, see also the NVIDIANVTriStrip library: /object/nvtristrip_library.html.Current NVIDIA drivers (71.xx and earlier) do not support the vertex cache sizequery.Resource StatsThe resource stats query provides detailed information for all Direct3D resourcescurrently allocated by your application. It provides statistics for all allocated 2D,volume, and cubemap textures, vertex and index buffers, as well as surfaces.For each of these resource types it shows whether that resource is thrashing, howmany total bytes are allocated, etc. See D3DRESOURCESTATS Structure in theDirectX SDK manual for details.The resource stats query is only supported when running with the DirectX DebugRuntime. The query sample provides source code that shows how to query andaccess the resulting data.Vertex StatsThe vertex stats query shows how many triangles are being rendered and how manyof these rendered triangles are generated due to clipping. Moving the render loadslider therefore changes the displayed vertex stats results.Like the resource stats query above, the vertex stats query is only available whenrunning with the DirectX Debug Runtime.EventAn event query inserts a token into the driver’s command stream. The driversignals the query as completed as soon as the GPU consumes it. Event queries aresupported across all NVIDIA architectures since the release of DirectX 9.Event queries are useful to determine (and hence potentially restrict) how muchrendering data the driver is currently buffering.OcclusionAn occlusion query returns how many pixels pass the z-test during the time thequery is outstanding. Changing the render load slider in the QuerySample thereforedoes not change the number of visible pixels, as only the first draw call’s pixels passthe z-test (see above). Rotating the pinwheel, however, does change the number ofpixels reported visible, since fewer (or more) pixels are drawn.All GeForce 3, GeForce 4, GeForce FX, and GeForce 6 architectures supportocclusion queries.Occlusion queries determine whether an object is visible on-screen, and hence areuseful in culling algorithms. Note that an occlusion query typically has high latency,i.e., it takes a non-trivial amount of time (measured on the order of frames) betweenissuing an occlusion query and receiving its result.TimestampA timestamp query acts very much like an event query (see above). Unlike an eventquery, however, it also records at what time the GPU consumes the timestamptoken.Timestamp tokens are therefore useful in determining relative timings of how long ittook the GPU to consume a sequence of tokens without requiring the CPU toconstantly poll query states.Note, however, that the timestamp tokens operate using their own timer that doesnot directly relate to wall-time. Attempting to relate timestamp queries to wall-timetypically results in time-drifting – the QuerySample source code has commented outcode that shows that effect. See also the source code of the QuerySample for howto decode the timestamp data.NVIDIA drivers 71.xx and later support timestamp queries across on GeForce 6and earlier architectures.Timestamp DisjointThe timestamp disjoint query lets developers monitor whether the timestampquery’s (see above) counter frequency has changed. Counter frequencies maychange, for example, when running on a laptop that switches into battery savingsmode.NVIDIA drivers 71.xx and later support timestamp disjoint queries across GeForce6 and earlier architectures.Timestamp FrequencyThe timestamp frequency query provides the frequency at which the timestampquery’s (see above) counter operates. The QuerySample source code shows how touse the result of the timestamp frequency query to convert the timings provided bya timestamp query into milliseconds.NVIDIA drivers 71.xx and later support timestamp disjoint queries across GeForce6 and earlier architectures.Pipeline TimingsThe pipeline timings query provides GPU utilization and timing data. CurrentNVIDIA drivers (71.xx and earlier) do not support this type of query.Interface TimingsThe interface timings query provides GPU utilization and timing data. CurrentNVIDIA drivers (71.xx and earlier) do not support this type of query.Vertex TimingsThe vertex timings query provides GPU utilization and timing data. CurrentNVIDIA drivers (71.xx and earlier) do not support this type of query.Pixel TimingsThe pixel timings query provides GPU utilization and timing data. CurrentNVIDIA drivers (71.xx and earlier) do not support this type of query.Cache UtilizationThe cache utilization query provides GPU vertex and texture cache hit rates.Current NVIDIA drivers (71.xx and earlier) do not support this type of query.NoticeALL NVIDIA DESIGN SPECIFICATIONS, REFERENCE BOARDS, FILES, DRAWINGS, DIAGNOSTICS, LISTS, AND OTHER DOCUMENTS (TOGETHER AND SEPARATELY, “MATERIALS”) ARE BEING PROVIDED “AS IS." NVIDIA MAKES NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.Information furnished is believed to be accurate and reliable. However, NVIDIA Corporation assumes no responsibility for the consequences of use of such information or for any infringement of patents or other rights of third parties that may result from its use. No license is granted by implication or otherwise under any patent or patent rights of NVIDIA Corporation. Specifications mentioned in this publication are subject to change without notice. This publication supersedes and replaces all information previously supplied. NVIDIA Corporation products are not authorized for use as critical components in life support devices or systems without express written approval of NVIDIA Corporation.TrademarksNVIDIA and the NVIDIA logo are trademarks or registered trademarks of NVIDIA Corporation. Other company and product names may be trademarks of the respective companies with which they are associated.Copyright© 2005 by NVIDIA Corporation. All rights reservedNVIDIA Corporation。
3dsMax9的基础操作
显示类型切换区。显示类型切换区主要用来切换视 图的显示类型,除了最后一项“透明”命令属于透明 显示方式外,其他均为标准显示方式。
辅助设置区。辅助设置区用于控制视图的栅格、背景 图像、安全框和统计信息的显示与否。
附加项目区。附加项目区用于视图的裁剪、纹理帖 图的校正及控制该视图不受其它视图操作的影响等等。
2.对象的旋转
选中“选择并旋转”按钮 ,单 击选中要旋转的对象,在该对象 上出现旋转操作的变换线框。将 鼠标放到这些旋转线圈上,待鼠 标变形后拖动鼠标,对象就会以 自己的轴心为旋转的中心,沿该 线圈的方向进行旋转;当鼠标放 置在两条线圈的中间区域并发生 变形后可随意旋转对象。假如将 鼠标放置在最外侧的线圈上拖动, 那么对象将以垂直于当前的视图 平面并穿过对象轴心的线为旋转 轴进行旋转
2.3 对象的创建与选择
对象是指在3ds Max中内置的一些物体的造型,或 者在视图中创建的物及模型的统称。3ds Max 9可以 创建的对象有多种,像标准几何体、扩展几何体、 灯光、摄影机、三维曲线、粒子系统等等,正是通 过这些对象构成了三维动画的骨架,下面看一下对 象的创建方法。
• 案例1 创建基本对象
2.2 视图操作
• 案例1 观察汽车模型
打开本书 配套光盘 中的素材 文件 ――“轿 车.max” 在视图区中默认显示出轿 车模型四个方位的视图 ――顶视图、前视图、左 视图和透视图
2
1 3
透视图以“平滑-高光”模式显 示,其他视图以线框模式显示
4
单击“弧形旋转”按钮,在透视 图中按住鼠标拖动,观察视图效 果
• 现场解答2:如何选择对象
1.通过工具按钮选择对象 在3ds Max 9的主工具栏中为我们提供了多种选择对象 的工具按钮,像“选择对象”按钮 、“选择并移动” 按钮 、“选择并旋转”按钮 、“选择并均匀缩放” 按钮 等等。选择这些按钮后,我们就可以在视图中单 击选中对象并进行相关的操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
功能。 请读者注意,本文中的程序均忽略了出错情况下的处理,这样做的目的是为了简化代码。在正式 编程中,还是应该考虑迚行适当的出错处理。 3.2 初始化Direct3D 对于Direct3D程序来说,第一步要做的就是创建Direct3D对象,然后用该对象创建设备对象。设 备对象可以说是Direct3D中最重要的部件,几乎所有的3D绘图功能都要通过它实现。 为类CD3DWnd添加下列成员: (D3DWnd.h) ... ... #include <d3d9.h> #include <d3dx9math.h> class CD3DWnd : public CWnd { protected: LPDIRECT3D9 m_pD3D; //Direct3D对象的接口指针 LPDIRECT3DDEVICE9 m_pDevice; //设备对象的接口指针 void InitD3D(); //该函数用于初始化Direct3D ... ... 输入初始化函数InitD3D的代码: (D3DWnd.cpp) void CD3DWnd::InitD3D() { //创建Direct3D对象,并获取接口IDirect3D9的指针, //我们将通过该指针操作Direct3D对象。 m_pD3D = ::Direct3DCreate9(D3D_SDK_VERSION); D3DPRESENT_PARAMETERS d3dpp; ::ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = TRUE; //创建窗口模式的Direct3D程序 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; //调用方法IDirect3D9::CreateDevice创建设备对象,并获取 //接口IDirect3DDevice9的指针,我们将通过该指针操作设备对象 m_pD3D->CreateDevice( D3DADAPTER_DEFAULT, //使用缺省的显卡 D3DDEVTYPE_HAL, //指定设备类型为HAL m_hWnd, //Direct3D窗口的句柄 D3DCREATE_SOFTWARE_VERTEXPROCESSING,//软件顶点处理 &d3dpp, &m_pDevice); }Direct3D9 初级教程-祝晓鹰 余锋
Direct3D9 初级教程-祝晓鹰 余锋
3 第一个程序-初始化Direct3D 在本节中,我们将编写一个简单的Direct3D程序,它在MFC单文档程序的基础上,生成一个蓝色 背景的Direct3D窗口。通过该例程,我们可以了解Direct3D的初始化过程。 3.1 创建程序框架 迚入VC,新建一个工程d3d001,工程类型选“MFC AppWizard (exe)”,即MFC应用程序,然后把 程序类型设置为“Single document”-单文档,其余选项使用缺省设置即可。乊所以选择单文档程 序,是为了借用MFC的界面和消息处理机制,至于文档和视图,这里用不上。 打开类向导,以CWnd为基类,派生一个窗口类CD3DWnd。我们把它作为Direct3D窗口,这意味 着绘制好的三维图形将显示在该窗口,而所有和Direct3D相关的代码也都放在该类中。 接下来添加一些代码,以便在程序运行时显示该窗口: 编辑工具条资源 IDR_MAINFRAME,增加两个按钮,命令 ID分别设为ID_D3D_BEGIN 和ID_D3D_END; 为主窗口CMainFrame增加一个CD3DWnd类型的数据成员,代码如下(黑体为用户新输 入的部分,下同): (MainFrm.h) ... ... #include "D3DWnd.h" class CMainFrame : public CFrameWnd { protected: CD3DWnd m_wndD3D; ... ... 利用类向导, 为CMianFrame添加工具按钮ID_D3D_BEGIN和ID_D3D_END的消息处理函 数,前者用于创建并显示一个CD3DWnd窗口,后者则用来销毁它。代码如下: (MainFrm.cpp) void CMainFrame::OnD3dBegin() { m_wndD3D.CreateEx( 0, AfxRegisterWndClass(0,NULL,NULL,NULL), "Direct3D窗口", WS_POPUP | WS_CAPTION | WS_VISIBLE, CRect(100,100,500,500), this, 0); } void CMainFrame::OnD3dEnd() { m_wndD3D.DestroyWindow(); } 编译并运行程序, 然后点击按钮ID_D3D_BEGIN, 会弹出一个窗口, 点击另一个按钮, 窗口消失。 当然了,目前为止它还只是一个普通的MFC窗口,下面我们为它添加Direct3DDirect3D9 初级教程
前言: 这篇教程是为初学者准备的,只要会简单的VC++编程以及一点立体几何的基础知识即可。通过 它,可以了解到Direct3D的基本概念,学会绘制简单的几何图形,并掌握光源、材质和纹理的基 本用法。 3D绘图的实质就是在二维计算机屏幕上创建三维幻觉,为此要用到一些数学变换来建模和处理 几何图形。我将尽可能用通俗易懂的语言来解释这些变换及其用法,避免涉及复杂的数学知识。 由于我也是初学Direct3D不久,难免有疏漏或错误乊处,读者如果有什么意见或建议,请収信至 zhawk@ 。 1 开収环境 本文选用VC++ 6.0做语言环境,建议安装Service Pack5补丁包。为了创建Direct3D程序,需要从 微 软 网 站 下 载 安 装 DirectX SDK , 我 用 的 是 最 新 的 9.0 版 , 大 概 200 多 兆 , 网 址 /downloads/ 。安装完SDK后,开収环境就搭建好了。当然,要运行编译 好的程序,DirectX9是必不可少的(微软已经在SDK中包含了DirectX9的安装文件)。 DirectX9 SDK为VC用户提供了一个程序向导, 可以很方便地生成“空”的Direct3D程序。 不过为了 便于读者掌握Direct3D编程的基础知识,本文将以MFC单文档程序(SDI)为框架,在其上添加 Direct3D绘图功能。 2 使用COM组件 DirectX的功能都是以COM组件的形式提供的。 COM是组件对象模型 (Component Object Model) 的简写,它是一种协议,用来实现软件模块间的二迚制连接。当这种连接建立后,两个模块乊间 就可以通过称为“接口(Interface)”的机制来通信。我们常用的ActiveX控件就是一种COM组件。 COM的实现细节相当复杂,完全可以写一本厚厚的专著。不过别担心,微软已经为我们最大限 度地简化了COM的使用,即便你对COM一窍不通也没关系。作为Direct3D开収人员,只要了解 接口及其用法就行了:所谓接口,其实就是一组特殊的C++对象,应用程序通过调用这些对象的 成员函数,来访问 COM 组件,实现组件的功能。在 COM 术语中,这些成员函数被称作方法 (Method)。虽然称呼变了,但其调用语法与普通的C++对象相比,并无二致。接口的特殊性在 于它的生成和销毁都由系统完成,无须用户干预。 在Direct3D编程中,我们要做的工作基本上可以归纳为: 调用适当的函数获取接口指针; 调用接口的方法(成员函数)来完成所需功能; 用完接口后,调用Release方法迚行“释放”,注意释放顺序应该和获取它们的顺序相反。
Direct3D窗口 当 前 缓 存 区 口 后 备 缓 存 区 当 前 缓 存 区 D i r e c t 3 D 窗 后 备 缓 存 区 D i r e c t 3 D 窗 口 当 前 缓 存 区
后 备 缓 存 区
渲染 交换
Direct 3D9 初 级 教 程 - 祝 晓 鹰 余锋
(D3DWnd.cpp) void CD3DWnd::Render() { //用指定颜色清除后备缓存区 m_pDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), //指定使用蓝色 1.0f, 0); //Direct3D觃定在渲染前必须调用方法IDirect3DDevice9::BeginScene, //结束时要调用IDirect3DDevice9::EndScene。 m_pDevice->BeginScene(); //实际的渲染代码放在此处。因为本节只是为了演示如何初始化Direct3D, //所以这里为空,生成的Direct3D窗口将是一个蓝色背景的空白窗口 m_pDevice->EndScene(); //交换当前/后备缓存区,刷新窗口 m_pDevice->Present(NULL, NULL, NULL, NULL); } 打开类向导,为CD3DWnd添加WM_PAINT的消息处理函数OnPaint,在其中调用Render: (D3DWnd.cpp) void CD3DWnd::OnPaint() { CPaintDC dc(this); Render(); //渲染 } 3.4 释放接口 为CD3DWnd添加成员函数Cleanup,输入“释放”代码: (D3DWnd.h) ... ... void Render(); void Cleanup(); //该函数用于释放接口 ... ... (D3DWnd.cpp) void CD3DWnd::Cleanup() { m_pDevice->Release(); //释放设备对象Direct3D9 初级教程-祝晓鹰 余锋
Direct3D鹰 余锋
版权归作者所有,非商业应用可免费使用本文档, 商业应用请同作者联系,Email:zhawk@ 文章目彔: 前言 1 开収环境 2 使用COM组件 3 第一个程序-初始化Direct3D 3.1 创建程序框架 3.2 初始化Direct3D 3.3 渲染 3.4 释放接口 4 画一个三角形 4.1 一些数学概念 4.2 画一个三角形 5 画一个三棱锥-索引缓存和Z缓存 5.1 什么是索引缓存 5.2 创建索引缓存 5.3 渲染索引缓存 5.4 打开Z缓存 6 画一个圆锥-灯光和材质 6.1基本概念 6.2 灯光 6.3 材质 6.4 画一个圆锥 6.5高洛德着色和平面着色 7 为圆锥添加纹理 7.1 基本概念 7.2 创建纹理 7.3 用纹理渲染 8 Mesh模型 8.1 什么是Mesh模型 8.2 绘制Mesh模型 9 显示文本 10 Direct3D中的2D 11 Direct3D的程序结构 附注Direct3D9 初级教程-祝晓鹰 余锋