当前位置:首页 » 编程软件 » directx903d游戏开发编程

directx903d游戏开发编程

发布时间: 2022-05-09 08:19:52

① 谁有《DirectX 9.0 3D游戏开发编程基础》这本书上的源代码

那个代码能发我一份吗?[email protected]谢谢

② Directx9.0和Directx9.0C有什么区别

Directx9.0c是Directx9.0的更高版本。

到目前为止DirectX9的开发进程让我们很满意,它的保守动作是将ps和vs提高到2.0版本(据说到发布的时候会提高到3.0)。Ps的意思是像素渲染效果器,vs的意思是顶点渲染效果器。说白了ps和vs可是让游戏程序设计师们更容易更轻松的创造出更漂亮的效果。由于新一代的显卡的Pixel Shader以及Vertex Shader的执行速度进一步提高,以前许多编程方面的障碍将会消失。下面介绍一下DirectX9的几个新特性。
首先,DirectX9.0的PS 2.0具备完全可编程的Pixel Shading架构。还有,DirectX 9.0的VS 2.0通过增加Vertex程序的灵活性,显着的提高了老版本(DirectX8)的VS性能。更重要的是:DirectX 9.0支持高精度浮点颜色。他突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色。
为了充分利用DirectX9的新特点,Nvidia最新推出一套用于3D编程的语言――Cg开发者工具套件。据说,通过这套语言可以直接对DirectX9编程,到时候会看到更加真实的场景,更加逼真的人物。
仅凭借着以上这三大特点,不仅能让3D游戏的编程者更有效率的工作,更重要的是可以让人领略到紧逼电影渲染水准

③ GTA5设定影像里面的DirectX是干嘛的里面有三个版本一个是10.1一个是10还有这个是11

  1. 那个叫做功能级, 是Direct3D10以上版本引入的概念。现在的功能级有12_1、12_0、11_3、11_2、11_1、11_0、10_1、10_0、9_3、9_2、9_3,前面的数字代表主要的DirectX版本,后面的代表该版本的DirectX的某个功能级。

  2. 高版本的功能级支持的功能比低版本的多并且相应的API优化会更好,但是对显卡的要求也越高。

  3. 显卡的控制面板上可以看你的显卡支持的最高功能级。

  4. 假如你的显卡支持Direct3D10但是不支持Direct3D11的功能,这时候功能级就能让你继续使用Direct3D11,但只使用显卡支持的那部分功能(即Direct3D10)。

  5. 所以如果你的显卡足够好,功能级调高一点,功能级越高,显卡能分担的渲染任务就越多,相应的CPU负担就小一点、API负荷就低一点。

  6. GTA5是基于DirectX11开发的,但是允许用户的显卡在不支持DirectX11的情况下也能运行游戏。

④ directx9.0是什么意思

DirectX是微软在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复制最接近的整数地址的纹理元素颜色 ;
纹理混合
当使用纹理时,实体的外观由纹理图片和材质经过某种计算获得.

参考资料:

⑤ 怎么安装Direct 9有什么功能没有

怎么安装?好像下下来就双击可执行文件就可以安装了吧
DirectX是什么?
DirectX是一种图形应用程序接口(API),简单的说它是一个辅助软件,一个提高系统性能的加速软件,微软创建开发的。他的意思不难理解,Direct是直接的意思,X是很多东西,加在一起就是一组具有共性的东西,这个共性就是直接。微软定义它为“硬件设备无关性”。
DirectX由显示部分、声音部分、输入部分和网络部分四大部分组成。
显示部分又分为Direct Draw(DDraw)和Direct 3D(D3D)前者主要负责2D加速。
功能:它包括很多方面:我们用播放mpg、DVD电影、玩雷电、麻将三缺一等等都是用的DDraw,你可以把它理解成所有划线的部分都是用的DDraw,由于显示卡的2D性能基本上已经达到极限,很多显卡都多的很不错,人们一直都把焦点放在了后面的D3D身上。

后者负责3D加速,比如极品飞车3-6的车身与烟雾,CS中的场景和人物,古墓丽影中劳拉等等,但是经典游戏Quake3除外,它使用了另一种API接口――OpenGL。

声音部分包括声效和MIDI音乐,不同的声卡表现的效果不同,目前的声卡基本上都支持DirectSound。但最好的声音效果主要有EXA和A3D,如果您的声卡支持这两种特效,您融入到真实的3D游戏世界之中。如果声卡支持更好的波表,通过DirectX的Direct Music会有不俗的表现。

输入部分:Direct Input不仅支持更多的游戏输入设备,而且对这些设备的识别与驱动上更加细致,充分发挥设备的最佳状态和全部功能。除了键盘和鼠标之外还可以连接手柄、摇杆、模拟器等。
网络部分:DirectPlay,它为游戏而来。通过它可以让计算机之间互联无障碍,提供多种连接方式,TPC/IP,IPX,Modem,串口等等。

DIRECT X9新特点:
首先,DirectX9.0的PS 2.0具备完全可编程的Pixel Shading架构。还有,DirectX 9.0的VS 2.0通过增加Vertex程序的灵活性,显着的提高了老版本(DirectX8)的VS性能。更重要的是:DirectX 9.0支持高精度浮点颜色。他突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色。

为了充分利用DirectX9的新特点,Nvidia最新推出一套用于3D编程的语言――Cg开发者工具套件。据说,通过这套语言可以直接对DirectX9编程,到时候我们会看到更加真实的场景,更加逼真的人物。

仅凭借着以上这三大特点,不仅能让3D游戏的编程者更有效率的工作,更重要的是可以让人领略到紧逼电影渲染水准。

⑥ 200分+50分求关于DirectX9.0的资料

Introction (序)
这一章我们学习怎样用DX来播放声音和音乐。我们将会使用DirectX Audio来播放WAV和MIDI文件,使用DirectShow来播放MP3文件。此章我们仍然有一个简单的程序作例子,它会播放MP3的背景音乐,当用户用鼠标点击某个数字时它会播放一些音效。

DirectX Audio and DirectShow (DirectX Audio和 DirectShow)
我们已经学习过Direct3D和DirectInput了,现在,我要介绍另外两个DirectX组件:DirectX Audio和DirectShow。我们用DirectX Audio来播放WAV和MIDI文件;用DirectShow来播放媒体流,例如AVI和MP3。在此教程中,我们只学习一下用DirectShow播放MP3的方法。

Wav, Midi and Mp3 - When should I use what?
(WAV,MIDI和MP3——什么时候该用什么?)
那末,什么时候用什么格式好呢?嗯,这基本上取决于你的个人爱好。下面是这些格式的简介,过后我会说一下我的选择:

Wav files (WAV文件)
WAV是一种未经压缩的数字音频,CD音质,但是体积非常庞大。

Midi files (MIDI文件)
MIDI文件并没有保存音频记录,它实际上更像是一套演奏指令,所以,它的体积是非常小的。MIDI的音质完全取决于演奏设备(如我们的声卡),它在高端的设备上能表现出色,而在低端设备上则表现较差。

Mp3 files (MP3文件)
同WAV文件一样,MP3也是一种数字音频格式。不同的是,MP3文件是经过压缩的,而且是有损压缩,这意味着它的体积将大大地减小,而音质上将会有一些失真(实际上接近CD音质,基本听不出失真)。而且,MP3是一种媒体流,这意味着在播放它的时候不会将它整个的读入,取而代之的是分期的做部分读入。

My preference (我的选择)
你大概会选择MP3或MIDI来作背景音乐,特别是当你希望用户能从网上下载你的程序时。MP3和MIDI格式文件的体积都比较小,它们适合做长时间的背景音乐播放。而当需要播放简短的声效时,例如爆炸声等,我更趋向于使用WAV文件,品质能稍好一些。如果文件的体积不是问题的话,实际上我们可以使用WAV文件来播放所有的声音和音乐。

Include and Library files (头文件与库文件)
我们的项目需要增加以下的头文件和库文件:

o dmusici.h
o dsound.h
o dshow.h
o dsound.lib
o strmiids.lib

Setting up DirectX Audio (设置DirectX Audio)
要使用Direct Audio我们需要创建两个对象:演奏对象(Performance Object,有些资料翻译为执行对象)和加载器(Loader)。演奏对象是Direct Audio中的最高级对象,用于处理从源到合成器的数据流。加载器用于把文件(WAV或MIDI)加载到声音段以待播放。这两个对象在整个应用程序中我们每样只需要一个,所以,我们已经把它们创建为CGame的成员变量了。下面是它们的定义:

IDirectMusicPerformance8* m_pDirectAudioPerformance;
IDirectMusicLoader8* m_pDirectAudioLoader;

由于Direct Audio是一个纯COM,所以我们需要初始化COM。其实很简单,我们只需要在CGame的构造函数中调用CoInitialize函数即可:

CoInitialize(NULL);

初始化COM后,我们就可以创建上述的那两个DirectX Audio对象了。为此,我们给CGame做了一个新的函数InitialiseDirectAudio,它将会在Initialise函数中被调用。代码如下:

bool CGame::InitialiseDirectAudio(HWND hWnd)
{
LogInfo("<br>Initialise DirectAudio:");

//Create the DirectAudio performance object
if(CoCreateInstance(CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC,
IID_IDirectMusicPerformance8,
(void**) &m_pDirectAudioPerformance) != S_OK)
{
LogError("<li>Failed to create the DirectAudio perfomance object.");
return false;
}
else
{
LogInfo("<li>DirectAudio perfomance object created OK.");
}

//Create the DirectAudio loader object
if(CoCreateInstance(CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC,
IID_IDirectMusicLoader8,
(void**) &m_pDirectAudioLoader) != S_OK)
{
LogError("<li>Failed to create the DirectAudio loader object.");
return false;
}
else
{
LogInfo("<li>DirectAudio loader object created OK.");
}

//Initialise the performance object
if(FAILED(m_pDirectAudioPerformance->InitAudio(NULL, NULL, hWnd,
DMUS_APATH_SHARED_STEREOPLUSREVERB,
64, DMUS_AUDIOF_ALL, NULL)))
{
LogError("<li>Failed to initialise the DirectAudio perfomance object.");
return false;
}
else
{
LogInfo("<li>Initialised the DirectAudio perfomance object OK.");
}

//Get the our applications "sounds" directory.
CHAR strSoundPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, strSoundPath);
strcat(strSoundPath, "\\Sounds");

//Convert the path to unicode.
WCHAR wstrSoundPath[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, strSoundPath, -1, wstrSoundPath, MAX_PATH);

//Set the search directory.
if(FAILED(m_pDirectAudioLoader->SetSearchDirectory(GUID_DirectMusicAllTypes,
wstrSoundPath, FALSE)))
{
LogError("<li>Failed to set the search directory '%s'.", strSoundPath);
return false;
}
else
{
LogInfo("<li>Search directory '%s' set OK.", strSoundPath);
}

return true;
}

我们用CoCreateInstance函数创建了演奏对象和加载器,然后调用了InitAudio模块来初始化演奏对象。上面代码中给InitAudio的参数是很典型的,所以你可以沿用它(查看一下SDK中的关于InitAudio函数以及它的参数的内容以获得更多的了解)。最后,我们设置了搜索目录。搜索目录应该被设置为存放声音文件的目录,以便加载器可以正确的加载声音文件。在本例中,搜索目录被设置为“Sounds”文件夹,它应该在本例的项目文件夹当中。

A new class - CSound (一个新的类——CSound)
我们已经为使用DirectX Audio作了必要的准备工作,现在,我们就可以加载、播放声音和音乐了。为此,我们做了一个新的类CSound,下面是它的代码,稍后我会解释它是怎样工作的:

CSound::CSound()
{
m_pDirectAudioPerformance = NULL;
m_pDirectAudioLoader = NULL;
m_pSegment = NULL;
m_pGraph = NULL;
m_pMediaControl = NULL;
m_pMediaPosition = NULL;
m_enumFormat = Unknown;

LogInfo("<li>Sound created OK");
}

void CSound::InitialiseForWavMidi(IDirectMusicPerformance8* pDirectAudioPerformance, IDirectMusicLoader8* pDirectAudioLoader)
{
m_pDirectAudioPerformance = pDirectAudioPerformance;
m_pDirectAudioLoader = pDirectAudioLoader;

m_enumFormat = WavMidi;
}

void CSound::InitialiseForMP3()
{
CoCreateInstance(CLSID_FilterGraph, NULL,
CLSCTX_INPROC, IID_IGraphBuilder, (void**)&m_pGraph);

m_pGraph->QueryInterface(IID_IMediaControl, (void**)&m_pMediaControl);

m_pGraph->QueryInterface(IID_IMediaPosition, (void**)&m_pMediaPosition);

m_enumFormat = MP3;
}

CSound::~CSound()
{
Stop();

SafeRelease(m_pSegment);
SafeRelease(m_pGraph);
SafeRelease(m_pMediaControl);
SafeRelease(m_pMediaPosition);

LogInfo("<li>Sound destroyed OK");
}

bool CSound::LoadSound(const char* szSoundFileName)
{
WCHAR wstrSoundPath[MAX_PATH];
CHAR strSoundPath[MAX_PATH];

switch(m_enumFormat)
{
case MP3:
//Get the our applications "sounds" directory.
GetCurrentDirectory(MAX_PATH, strSoundPath);
strcat(strSoundPath, "\\Sounds\\");
strcat(strSoundPath, szSoundFileName);

//Convert the path to unicode.
MultiByteToWideChar(CP_ACP, 0, strSoundPath, -1,
wstrSoundPath, MAX_PATH);

m_pGraph->RenderFile(wstrSoundPath, NULL);
break;
case WavMidi:
//Convert the filename to unicode.
MultiByteToWideChar(CP_ACP, 0, szSoundFileName, -1,
wstrSoundPath, MAX_PATH);

//Load a sound
m_pDirectAudioLoader->LoadObjectFromFile(CLSID_DirectMusicSegment,
IID_IDirectMusicSegment8,
wstrSoundPath,
(void**) &m_pSegment);

m_pSegment->Download(m_pDirectAudioPerformance);
break;
default:
return false;
}

return true;
}

bool CSound::Play(DWORD dwNumOfRepeats)
{

switch(m_enumFormat)
{
case MP3:
//Make sure that we are at the start of the stream
m_pMediaPosition->put_CurrentPosition(0);

//Play mp3
m_pMediaControl->Run();
break;
case WavMidi:
//Set the number of times the sound repeats
m_pSegment->SetRepeats(dwNumOfRepeats); //To loop the sound forever, pass
//in DMUS_SEG_REPEAT_INFINITE

//Play the loaded sound
m_pDirectAudioPerformance->PlaySegmentEx(m_pSegment, NULL, NULL, 0, 0,
NULL, NULL, NULL);
break;
default:
return false;
}

return true;
}

bool CSound::Stop()
{
switch(m_enumFormat)
{
case MP3:
m_pMediaControl->Stop();
break;
case WavMidi:
//Stop the loaded sound
m_pDirectAudioPerformance->StopEx(m_pSegment, 0, 0);
break;
default:
return false;
}

return true;
}

bool CSound::IsPlaying()
{
switch(m_enumFormat)
{
case MP3:
REFTIME refPosition;
REFTIME refDuration;

m_pMediaPosition->get_CurrentPosition(&refPosition);
m_pMediaPosition->get_Duration(&refDuration);

if(refPosition < refDuration)
{
return true;
}
else
{
return false;
}
break;
case WavMidi:
if(m_pDirectAudioPerformance->IsPlaying(m_pSegment, NULL) == S_OK)
{
return true;
}
else
{
return false;
}
break;
default:
return false;
}
}

那末,怎样用CSound来播放音乐呢?这很简单。首先,创建一个CSound对象,然后根据你想播放的声音类型来调用InitialiseForWavMidi或是InitialiseForMP3,二者选其一。接着,调用LoadSound读取声音文件。最后,调用Play模块来播放声音即可。很简单,不是吗?嗯,还有两个模块:Stop模块用来停止播放;IsPlaying模块用来检测声音是否正在播放。下面介绍了各个模块是怎样工作的:

InitialiseForWavMidi
InitialiseForWavMidi模块用于初始化CSound对象以待播放WAV或MIDI文件。它的两个输入参数是我们在CGame中创建好的演奏对象和加载器的接口指针,然后这两个指针会被保存为它的成员变量以备用。我们会把CSound的格式设置为WavMidi。

InitialiseForMP3
InitialiseForMP3模块用于初始化CSound对象以待播放MP3文件,它没有输入参数。InitialiseForMP3调用CoCreateInstance函数创建了一个DirectShow过滤器图管理器对象。我们能使用CoCreateInstance是因为我们在CGame的构造函数中已经调用过CoInitialize函数了。有了过滤器图管理器对象之后,我们调用它的模块QueryInterface来创建另外两个对象:一个媒体控制对象和一个媒体定位对象。这三个对象的指针将会被保存为CSound对象的成员变量。同理,我们把CSound的格式设置为MP3;

LoadSound
初始化好CSound对象后,我们就可以调用LoadSound来读取声音文件了。LoadSound只有一个参数,就是声音文件的文件名。这里不是一个路径而是一个文件名是因为所有的声音文件都应该在我们的项目的“Sounds”目录中。

如果这个CSound对象的格式为MP3,我们首先会构造出一个完整的文件路径,然后把它转换为Unicode字符集的字符串。接着,我们只需要调用过滤器图管理器对象的RenderFile模块并构造一个用于播放指定文件的过滤器图即可。

如果这个CSound对象的格式为WavMidi,我们首先会把文件名转换成Unicode字符集的字符串。接着我们会调用LoadObjectFromFile,它会载入文件并返回一个段(segment)指针。最后,我们调用段的Download模块下载波段到演奏对象里。

现在我们已经准备好来播放声音了。

Play
当文件载入后,我们就能播放它了。Play模块唯一的可选参数(默认为0)就是重复播放次数,只在播放WAV或MIDI时有效。

如果这个CSound对象的格式为MP3,我们首先会调用媒体定位对象的put_CurrentPosition模块来确认一下我们是否在媒体流的开始处。然后,我们调用媒体控制对象的Run模块来播放MP3。

如果这个CSound对象的格式为WavMidi,我们首先会设置重复次数。然后我们调用PlaySegmentEx来播放已经载入的段。如果你想让声音永远重复,输入DMUS_SEG_REPEAT_INFINITE恒量。

Stop
这能简单地停止正在播放的声音。如果是MP3,就调用媒体控制对象的Stop模块。如果是WAV或MIDI,就调用演奏对象的StopEx模块并输入要停止的段。

IsPlaying
最后,IsPlaying模块用于检测当前是否正在播放。是就返回true,不是则返回false。如果是MP3,我们会根据当前的媒体流定位与整个媒体流的长度做对比,以得知我们是否正在播放(看是否在流的终点)。如果是WAV,我们就调用演奏对象的IsPlaying模块并输入要检测的段以测试。

Cleaning up (清理)
在Csound的析构函数中我们会停止声音的播放并释放对象。在CGame中有一个新的函数CleanUpDirectAudio代码如下:

void CGame::CleanUpDirectAudio()
{
//Stop all sounds.
m_pDirectAudioPerformance->Stop(NULL, NULL, 0, 0);

//CleanUp
m_pDirectAudioPerformance->CloseDown();

SafeRelease(m_pDirectAudioLoader);
SafeRelease(m_pDirectAudioPerformance);

LogInfo("<li>CleanUpDirectAudio finished.");
}

Here we first stop all sounds from playing (just in case), then we close down the performance object before releasing it and the loader object. Also, in the CGame deconstructor we need to call CoUninitialize to close down the COM library (shown below).
这里我们首先停止所有声音的播放,然后关闭演奏对象,释放演奏对象和加载器。而且,在CGame的析构函数中我们会调用CoUninitialize来关掉COM:

CoUninitialize();

那末现在我们能在程序中播放音乐和声音了。当程序开始时,MP3的背景音乐就会开始播放。移动鼠标并点击不同的数字我们对听到不同的声音。这里的背景MP3只是一个小片断的循环,愿意的话你可以替换成你喜欢的音乐。(译者:我把我的MP3都放了一遍爽)

Summary (摘要)
In this tutorial we learnt how to play sounds and music using two new DirectX components, DirectX Audio and DirectShow. In the next tutorial we will use all of the skills we have seen so far to create our first game: 3D Pong. This game will be simple, but will have all of the key features that you would expect from any game.

⑦ DirectX9.0是什么,有什么用

DirectX是微软在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复制最接近的整数地址的纹理元素颜色 ;
纹理混合
当使用纹理时,实体的外观由纹理图片和材质经过某种计算获得.

参考资料:http://www.mscenter.e.cn/prj/files/899/DirectX.ppt

⑧ 插件DX9。0

DirectX是一种应用程序接口,它可让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3d图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。这样说是不是有点不太明白,其实从字面意义上说,Direct就是直接的意思,而后边的X则代表了很多的意思,从这一点上我们就可以看出DirectX的出现就是为了为众多软件提供直接服务的。

举个例子吧,骨灰级玩家(玩游戏比较长的)在DOS下玩游戏时,可不想我们现在,安装上就可以玩了,他们往往首先要先设置声卡的品牌和型号,然后还要设置IRQ(中断)、I/O(输入于输出)、DMA(存取模式),如果哪项设置的不对,那么游戏声音就发不出来。这部分的设置不仅让玩家伤透脑筋,而且对游戏开发者来说就更头痛了,因为为了让游戏能够在众多电脑中正确运行,开发者必须在游戏制作之初,便需要把市面上所有声卡硬件数据都收集过来,然后根据不同的 API(应用编程接口)来写不同的驱动程序,这对于游戏制作公司来说,是很难完成的,所以说在当时多媒体游戏很少。微软正是看到了这个问题,为众厂家推出了一个共同的应用程序接口——DirectX,只要这个游戏是依照Directx来开发的,不管你是什么显卡、声卡、统统都能玩,而且还能发挥更佳的效果。当然,前提是你的显卡、声卡的驱动程序也必须支持Directx才行。

⑨ 学习游戏开发应该从哪些方面入手

如果要自学游戏程序开发的话,可以看看下面的,呵呵。

游戏开发资料(PDF书都是中文版的,非英文,很多是本人自己扫描制作,从未网上发布过,所以独家啦):
1、Gamebryo 2.2游戏引擎(盛大、腾讯等公司制作网络游戏常用)+Gamebryo v2.2.1说明文档

2、游戏PDF书及其代码:
3D游戏编程、3D游戏编程大师技巧、Direct3D游戏编程入门教程第2版、DirectX角色扮演游戏编程
DirectX特效游戏程序设计、MFC windows程序设计第2版、MFC深入浅出、VC++深入详解、Visual C++6.0技术内幕第5版
Visual C++视频技术方案宝典、Win32多线程程序设计、Windows程序设计、WINDOWS核心编程
精通DirectX 3D图形与动画程序设计、设计模式解析第2版、游戏开发物理学、3D数学基础 图形与游戏开发

3、C++PDF书及其代码:
C++STL程序员开发指南、C++编程规范、C++标准程序库自修教程与参考手册、Essential c++ 中文版
Exceptional C++中文版、Inside the C++ Object Model、高质量C++编程指南、经典C程序100例
深度探索C++对象模型、深入探索C++物件模型、自己动手写操作系统、代码优化:有效使用内存
Effective C++、Effective C++ 第二版中文版、More Effective C++(中文版)

4、数据库SQL PDF书:
SQL网络编程实例、精通Oracle9i、精通Oracle 10g Pl SQL编程

5、Ogre3D PDF书及其代码:
Apress-Pro Ogre 3D Programming、OGRE中文帮助手册 v1.4.0、PRO OGRE 3D PROGRAMMING中文翻译版本0.2.0

6、人工智能PDF书及其代码:
AI游戏引擎程序设计、人工智能游戏编程真言、游戏编程中的人工智能技术、游戏开发中的人工智能
游戏人工智能编程案例精粹

7、游戏开发网络编程PDF书及源代码:
C++网络编程卷1&2、Network Programming For Microsoft Window、Visual C++实践与提高-网络编程篇
Visual C++网络通信编程实用案例精选第2版、Visual C++网络游戏建模与实现(第2版)、Windows Sockets
Windows网络与通信程序设计、韩国传奇正式最终版本源码、网络游戏服务器编程、游戏学院网络游戏服务器端编程
最新传奇M2引擎程序源码、Internetworking with TCP_IP Vol 3 Client-Server Programming And Applications
PC游戏编程(网络篇)、Visual C++.NET网络编程、Winsock规范及应用、传奇3源程序、魔域服务端源码+客户端源码
盛大传奇外挂源代码

此DVD出售中,呵呵。链接在最下面。

以下是游戏公司的招聘启事:
腾讯3D游戏引擎工程师
熟悉实时3D的基本知识和算法,包括一些3D开发相关的数学基础;
能熟练使用Direct3D编写3D程序;
能熟练的用C++进行开发。
有以下经验者优先考虑:
使用过gamebryo开发游戏一年以上;
作为3D程序开发过一个游戏以上;
开发过一个成型的3D引擎。
联系邮件: [email protected]

盛大网络(上海)
客户端程序员:
职位要求:
1. 热衷游戏开发事业,有耐心和自信心,学习能力强,有较强的逻辑思维能力,工作认真,有团队合作精神。
2. 本科以上学历,有1年以上游戏开发经验。
3. 有3年以上C++程序开发工作经验,熟悉STL、数据结构和设计模式。
4. 熟悉DirectX或OpenGL程序开发,有良好的数学基础,熟悉矩阵运算
5. 熟悉gamebryo引擎,熟悉Shader编程和相关图形工作经验者优先。

服务器程序员:
职位要求:
1. 热衷游戏开发事业,有耐心和自信心,学习能力强,有较强的逻辑思维能力,工作认真,有团队合作精神。
2. 本科以上学历,有1年以上的网络游戏开发工作经验。
3. 有3年以上C++程序开发经验,熟悉STL、数据结构和设计模式。
4. 熟悉TCP/IP协议,熟悉数据库编程。

本人总结的网络游戏程序开发学习流程,这是最少要看的书了:
1、C++primer中文版第4版
2、C++标准程序库自修教程与参考手册
3、Windows程序设计第5版
4、MFC windows程序设计第2版中文版
5、VC++深入详解
6、MFC深入浅出
7、Effictive STL
8、Windows核心编程
学好以上几本,也可以去游戏公司一试VC++软件工程师职位了。
9、WINDOWS游戏编程大师技巧第2版
10、3D游戏编程大师技巧
11、DirectX角色扮演游戏编程
12、DirectX特效游戏程序设计
13、精通DirectX 3D图形与动画程序设计
14、DirectX高级动画制作
15、Ogre引擎研究
16、游戏人工智能编程案例精粹
17、Visual C++实践与提高--网络编程篇
18、C++网络编程,卷1
19、C++网络编程,卷2
20、Visual C++网络游戏建模与实现第2版
21、代码优化:有效使用内存
22、编个Demo出来,好好复习一下C++和数据结构,然后去游戏公司应聘。
另外,游戏编程精粹1-6,GPU精粹1-2,也是好书,很多游戏开发者看的。以后可以看看。
还有千万别信那些什么所谓的游戏学院会把你培养起来,在他们那里想学好游戏是很难的,他们教的都是皮毛,公司用不上,还有他们提出分配工作几乎不可能实现,现在游戏公司宁愿要计算机大专毕业生也不敢要游戏学院的,啥也不懂,你真想好好学的话自己可要下点苦心,多进点中国编程的网站——Gameres论坛

⑩ DirectX9.0C是什么软件 用来干什么的

DirectX并不是一个单纯的图形API,它是由微软公司开发的用途广泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多个组件,它提供了一整套的多媒体接口方案。只是其在3D图形方面的优秀表现,让它的其它方面显得暗淡无光。DirectX开发之初是为了弥补Windows 3.1系统对图形、声音处理能力的不足,而今已发展成为对整个多媒体系统的各个方面都有决定性影响的接口 DirectX 9.0 2002年底,微软发布DirectX9.0。DirectX 9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消。全新的VertexShader(顶点着色引擎)编程将比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。 PS 2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上对材质贴图的分辨率的精度提高无限多;另外PS1.4只能支持28个硬件指令,同时操作6个材质,而PS2.0却可以支持160个硬件指令,同时操作16个材质数量,新的高精度浮点数据规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果轻而易举的实现。 VS 2.0通过增加Vertex程序的灵活性,显着的提高了老版本(DirectX8)的VS性能,新的控制指令,可以用通用的程序代替以前专用的单独着色程序,效率提高许多倍;增加循环操作指令,减少工作时间,提高处理效率;扩展着色指令个数,从128个提升到256个。 增加对浮点数据的处理功能,以前只能对整数进行处理,这样提高渲染精度,使最终处理的色彩格式达到电影级别。突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。

热点内容
android优秀项目源码 发布:2025-05-14 00:54:58 浏览:205
dell服务器怎么装系统 发布:2025-05-14 00:50:52 浏览:593
csgo怎么进日本服务器 发布:2025-05-14 00:39:18 浏览:747
ip查服务器商家 发布:2025-05-14 00:33:37 浏览:212
云服务器布 发布:2025-05-14 00:27:55 浏览:78
吃鸡最佳配置怎么看 发布:2025-05-14 00:25:32 浏览:226
oraclesql效率 发布:2025-05-14 00:17:40 浏览:601
cifjava代码 发布:2025-05-14 00:10:34 浏览:214
泰国电视剧密码在哪里看 发布:2025-05-13 23:54:22 浏览:481
安卓用邮件下完保存在哪里 发布:2025-05-13 23:52:31 浏览:479