當前位置:首頁 » 編程軟體 » 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位浮點顏色,讓游戲程序設計師們更容易更輕松的創造出更漂亮的效果,讓程序員編程更容易。

熱點內容
appleid為什麼連接伺服器出現問題 發布:2025-05-13 18:17:37 瀏覽:971
書翁怎麼配置 發布:2025-05-13 18:17:36 瀏覽:911
雲資料庫mongodb 發布:2025-05-13 18:16:12 瀏覽:774
A7編程 發布:2025-05-13 18:15:26 瀏覽:742
python視圖 發布:2025-05-13 18:14:01 瀏覽:759
win為什麼干不過安卓 發布:2025-05-13 18:12:27 瀏覽:586
文件夾只讀win8 發布:2025-05-13 18:11:41 瀏覽:272
xp安裝php 發布:2025-05-13 18:04:30 瀏覽:183
sqlserver介紹 發布:2025-05-13 17:58:00 瀏覽:4
雲閃付安卓版哪個版本好用 發布:2025-05-13 17:57:16 瀏覽:187