DirectX9.0是微软在Windows操作系统上对编写高性能的多媒体应用程序而提供的一整套API.它使得我们不需要考虑具体的硬件就可以编写出实用的软件,也可以利用硬件加速功能.与DirectX竞争的技术是OpenGL.
DirectX 9.0的 9.0是他的版本号而已
DirectX是Microsoft公司开发的运行于计算机平台的多媒体控制处理引擎;
能够对显存和硬件直接访问;
图形应用程序接口(API);
DirectX通过COM的技术,以及一套由Microsoft和硬件厂商共同编写的驱动程序和程序库,可以提供对所有设备的硬件级的控制.
DirectX的组成
显示部分
声音部分
输入部分
网络部分
显示部分
Direct Draw:负责2D加速(DirectX8.0以上的版本不包含此项)
Direct 3D:负责3D加速
声音部分
DirectAudio:由DirectSound和DirectMusic整合而成;
DirectSound:只支持数字化的声音,不支持MIDI.
DirectMusic:支持MIDI,是一种基于DLS(Downloadable Sound)数据的实时音乐编排和回放技术;
DirectShow :提供了在windows平台上对多媒体数据流的高质量的捕捉和回放的支持;
DirectShow支持多种多媒体格式,包括AVI,MP3,WAV等;
输入部分
Direct Input :提供了对游戏输入设备的支持,包括键盘,鼠标,手柄等;
支持力反馈设备,模拟使用者的真实感觉.
网络部分
DirectPlay:提供了玩家进行多人游戏中信息通讯和玩家互动交流的平台环境;
提供多种连接方式如TCP/IP,IPX,Modem,串口等,使计算机之间互联无障碍;
COM 简述
COM是组件对象模型(Component Object Model)的简写.它是一种协议,用来实现软件模块间的二进制连接.当这种连接建立后,两个模块之间就可以通过称为"接口(Interface)"的机制来通信.
COM给开发人员提供的是一种开发与语言无关的组件库的方法.
COM的发布形式是:以win32动态链接库(DLL)或者可执行文件(EXE)的形式发布的可执行代码组成.
DirectX和COM的协同工作
COM在装载DirectX的运行版本时,作为DLL包含在系统中.
运行DirectX时,其装载DLL.请求接口,这些接口的方法就被调入而完成任务.
应包含一些封装了COM内容的输入库函数.LIB,以便于使用这些封装函数调用DirectX来创建COM对象.
访问COM对象
调用适当的函数获取接口指针;
调用接口的方法(成员函数)来完成所需功能;
用完接口后,调用Release方法进行"释放",注意释放顺序应该和获取它们的顺序相反.
游戏的图形实现—Direct3D
Direct3D程序的基本结构
创建一个windows窗口
初始化Direct3D程序
处理消息循环
物体图形显示
结束Direct3D程序
窗口的构建
创建一个Windows类.
创建一个事件句柄或WinProc.
用Windows注册Windows类.
用前面创建的Windows类创建一个窗口.
初始化Direct3D程序
创建Direct3D对象并得到Direct3D接口.
查询显卡的显示模式.
创建Direct3D 设备对象并得到接口.
处理消息循环
PeekMessage()
TranslateMessage()
DispatchMessage()
结束Direct3D程序
窗口过程函数接收到WM_DESTROY消息;
调用函数释放Direct3D资源;
注销wndclass类;
Release()
图形显示原理—页翻动技术
把要显示的物体全部绘制到"后缓冲区";
快速的把它翻动到可见的"前缓冲区" ;
快速而连续的重复此过程;
Direct3D的图元
点列
线带
线列
三角形列
三角形带
三角扇形
矩形的创建
坐标变换
世界变换
视图变换
投影变换
图形显示过程
球体的构建
将球体切割成nRings * nSegments 段.需要((m_nRings + 1) * (m_nSegments + 1))个顶点 .
按照立体几何里面球体的构造式,构造出一系列纵向的环和一系列横向的环,这样相互交叉,就构成了一个球体所需要的全部顶点.
球体的立体构成
构成球体的构成以三角形网格为图元形成的;
真正构成的球体如右图;
三角形个数足够多,三角形之间的交界处显得比较平滑,近似于一个圆面了.
索引顶点
顶点缓存中保存A,B,C,D这4个顶点的FVF数据项,相应的索引为0,1,2,3.
按照三角形列的组成顺序,把顶点索引值存入索引缓存区.
通过调用索引调用顶点.
深度缓冲机理
DirectX测试对象在屏幕上的像素点到摄像机的远近,并把得出的值保存在深度缓冲区中;
以同样的方法测试同一位置上另一对象的像素点;
将两像素比较.若后者距离近,则刷新纪录;否则不理睬;
灯光
点光源
(电灯泡)
方向光
(太阳)
聚光灯
(手电筒)
计算量:按从小到大排序,依次为:环境光,平行光,点光源,聚光灯
光源属性
光的类型:Type
光源的颜色:Diffuse,
Ambient,Specular
光源位置:Position
光的方向:Direction
光的范围:Range
光的内外锥形衰退:Falloff
光的距离衰减系数:
Attenuation0,Attenuation1,Attenuation2
聚光灯内部锥形角度:Theta
聚光灯外部锥形角度:
Phi
物体表面的材质属性
环境光反射系数:Ambient
漫反射系数:Diffuse
镜面反射系数:Specular
自身发光度:Emissive
镜面反射数:Power
加上纹理
纹理属于COM对象,既可以从现有的图片文件中直接创建,也可以先创建一个空的纹理对象,然后再进行填充.
纹理是表示物体表面细节的一幅或几幅2D图片,它可以保存为bmp,tga,jpg等图片格式 .
Direct3D支持多层纹理,最高可达8层.
图片的大小一般是任意的,但是为了计算方便,一般取2n大小 .
添加纹理的过程
从磁盘文件中创建纹理并载入内存
D3DXCreateTextureFromFile()
设置纹理IDirect3DDevice8::SetTexture()
设置纹理渲染状态(纹理混合)IDirect3DDevice8::SetTextureStageState()
纹理坐标
不论纹理的大小如何,其左上角总是(0,0),右下角总是(1,1),易知中心点的纹理坐标为(0.5,0.5).
但Direct3D也允许纹理坐标取此范围之外的值,以获取某些特殊的纹理效果
纹理过滤
纹理过滤方法
最近点采样过滤
线性纹理过滤
各项异性纹理过滤
多级渐进纹理过滤
最近点采样过滤原理
Direct3D计算的纹理元素地址是一个浮点值;
纹理下标值为整数值;
Direct3D复制最接近的整数地址的纹理元素颜色 ;
纹理混合
当使用纹理时,实体的外观由纹理图片
≯ **尐tǎo 回答采纳率:12.5% 2008-11-23 02:20
查询劲舞团IP地址 是不能查的 只有 系统能看
au.9you.cn
192.168.0.1