d3d编程
㈠ DirectX编程函数问题
如果“取适配器显示模式”失败,它就返回“假”。
呵呵,我也是刚学DX,我Q:532739140
一起学习。
㈡ 谁有D3D示例程序代码(带说明的)
下面是我自己做的D3D的三角程序你看看吧
环境是VC.NET 2008
首先建一个WIN32的项目,选择WINDOWS应用程序就行了
项目名和cpp文件名都使用myD3D
DX环境是DIRECTX SDK 9.0的环境,具体配置不用我说了吧..
如果运行不了可以加我HI_BAIDU发你原程序.
直接复制粘贴到同名文件里就行
1.******************************************************
//此处是CPP的文件
// myD3D.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "myD3D.h"
#include "d3d9.h"
#define MAX_LOADSTRING 100
#pragma comment(lib,"d3d9.lib")
//声明自定义函数或方法,让他们可见
void InitD3D(HWND hwnd);
void InitVB();
void Render();
void CleanUp();
// 全局变量:
HINSTANCE hInst; // 当前实例
TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名
//定义D3D指针
//1.顶层指针
LPDIRECT3D9 g_pD3D=NULL;
//2.设备指针
LPDIRECT3DDEVICE9 g_pDev=NULL;
//3.顶点缓冲区指针
LPDIRECT3DVERTEXBUFFER9 g_pVB=NULL;
//4.定义顶点结构体
struct Vertex
{
float x,y,z,rhw;//顶点坐标(RHW代表已经转化为屏幕坐标)
DWORD color;//顶点颜色
};
//5.定义顶点格式的宏
#define D3DFVF_CUSTOM (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
// 此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 在此放置代码。
MSG msg;
HACCEL hAccelTable;
// 初始化全局字符串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_MYD3D, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MYD3D));
// 主消息循环:
ZeroMemory(&msg,sizeof(msg));
//while (GetMessage(&msg, NULL, 0, 0))
while(msg.message!=WM_QUIT)
{
//if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Render();
}
}
return (int) msg.wParam;
}
//
// 函数: MyRegisterClass()
//
// 目的: 注册窗口类。
//
// 注释:
//
// 仅当希望
// 此代码与添加到 Windows 95 中的“RegisterClassEx”
// 函数之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要,
// 这样应用程序就可以获得关联的
// “格式正确的”小图标。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYD3D));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MYD3D);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
return RegisterClassEx(&wcex);
}
//
// 函数: InitInstance(HINSTANCE, int)
//
// 目的: 保存实例句柄并创建主窗口
//
// 注释:
//
// 在此函数中,我们在全局变量中保存实例句柄并
// 创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // 将实例句柄存储在全局变量中
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
//D3D初始化
InitD3D(hWnd);
InitVB();
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//
// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// 目的: 处理主窗口的消息。
//
// WM_COMMAND - 处理应用程序菜单
// WM_PAINT - 绘制主窗口
// WM_DESTROY - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
CleanUp();
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
//D3D初始化:
//1、顶层指针的创建
//2、通过顶层指针创建设备指针
//3、设置设备中的渲染状态
void InitD3D(HWND hwnd)
{
//一、创建顶层指针
g_pD3D=Direct3DCreate9(D3D_SDK_VERSION);
//二、得到当前显卡的显示模式
D3DDISPLAYMODE d3dmm;//显示模式的结构体
//第一个参数是显卡的序号
g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3dmm);
//三、通过结构体来设置相关的设备属性
D3DPRESENT_PARAMETERS d3ddp;//设备结构体
ZeroMemory(&d3ddp,sizeof(d3ddp));
d3ddp.Windowed=true;//设置全屏(false)窗口(true);
//设置前台与后台缓冲区的交换模式
//当前台与后台交换后清空后台缓冲区
d3ddp.SwapEffect=D3DSWAPEFFECT_DISCARD;
//设置后台缓冲区的格式与前台一致
d3ddp.BackBufferFormat=d3dmm.Format;
//四、创建设备
g_pD3D->CreateDevice(
D3DADAPTER_DEFAULT,//显卡序号,设置当前显卡为主显卡
D3DDEVTYPE_HAL,//使用硬件抽象层
hwnd,//当前窗口句柄
D3DCREATE_SOFTWARE_VERTEXPROCESSING,//顶点处理方式(选择软件)
&d3ddp,//设置相关结构体
&g_pDev);//设备指针
//设置着色状态
g_pDev->SetRenderState(
D3DRS_SHADEMODE,//着色状态
D3DSHADE_GOURAUD);//值为1
}
//绘制3D信息的函数
void Render()
{
//1.绘制图形前需要先清空缓冲区
if(NULL==g_pDev)//如果设备为空则退出
return;
g_pDev->Clear(0,//缓冲区个数0代表清空所有缓冲区
NULL,//代表清空缓冲区的所有区域
D3DCLEAR_TARGET,//颜色缓冲区标志
D3DCOLOR_XRGB(0,0,255),//清空颜色
1.0f,//用来清空深度缓冲区
0);//用来清空模版
//2.通知D3D开始绘制
g_pDev->BeginScene();
//3.绘制图形所有的代码
//3.1设置数据源
g_pDev->SetStreamSource(
0,//数据流的标号
g_pVB,//顶点缓冲区
0,//起始点的开始坐标位置
sizeof(Vertex));//一个顶点所占据的字节数
//3.2设置顶点格式
g_pDev->SetFVF(D3DFVF_CUSTOM);
//3.3进行绘制图形,在3D后台绘制
g_pDev->DrawPrimitive(D3DPT_TRIANGLELIST,//画的形式
0,//开始位置的索引号,顶点位置对应顶点数组)
1);//代表绘制图元的个数
//4.绘制结束
g_pDev->EndScene();
g_pDev->Present(NULL,NULL,NULL,NULL);
}
//释放设备
void CleanUp()
{
if(g_pDev!=NULL)
{
g_pDev->Release();
g_pDev=NULL;
}
if(g_pD3D!=NULL)
{
g_pD3D->Release();
g_pD3D=NULL;
}
}
//初始化顶点缓冲区
void InitVB()
{
//给三角形顶点进行赋值,存在系统中
Vertex ver[]=
{
{150.0f,50.0f,0.0f,1.0f,0xff00ff00},
{250.0f,250.0f,0.0f,1.0f,0xffff00ff},
{50.0f,250.0f,0.0f,1.0f,0xff0000ff}
};
//1.创建应用程序顶点缓冲区指针
g_pDev->CreateVertexBuffer(
sizeof(ver),//分配所有顶点缓冲区的大小
0,//顶点缓冲区的标志
D3DFVF_CUSTOM,//顶点缓冲区的格式
D3DPOOL_DEFAULT,//当前显存池
&g_pVB,//顶点缓冲区的指针
NULL);
//2.对顶点缓冲区加锁与解锁
//2.1目的:数据拷贝的安全性.
//2.2得到一个临时指向顶点缓冲区空间指针,用该指针去
//操作这段显存的空间
Vertex *pVer=NULL;
//2.3.对顶点缓冲区进行加锁
g_pVB->Lock(0,
sizeof(ver),//控制加锁的空间大小
(void**)&pVer,//得到临时指向顶点缓冲区的指针
0);//标志
//2.4内存之间的拷贝
memcpy(pVer,ver,sizeof(ver));
//2.5解锁
g_pVB->Unlock();
}
********************************************************************
㈢ D3D游戏编程中音效怎么加需要什么头文件和库文件
声卡的技术指标很多,以下是各种具体指标的具体含义。如果您是个专业级的音响发烧友,这些牵涉到声音质量的具体指标可不能不看。
目录 [隐藏]
1 S/PDIF
2 采样位数与采样频率
3 复音数
4 动态范围
5 API接口
6 HRTF
7 ASIO
8 AC-3
9 DLS技术
10 SB1394标准
[编辑] S/PDIF
S/PDIF是SONY、PHILIPS家用数字音频接口的简称,可以传输PCM流和Dolby Digital、dts这类环绕声压缩音频信号,所以在声卡上添加S/PDIF功能的最重大意义就在于让电脑声卡具备更加强大的设备扩展能力。S/PDIF技术应用在声卡上的表现即是声卡提供了S/PDIF In、S/PDIF Out接口,如果有数字解码器或者带有数字音频解码的音箱,你就可以使用S/PDIF接口作为数码音频输出,使用外置的DAC(Digital-Analog Converter:数字→模拟转换器,简称数模转换器)进行解码,以达到更好的音质。
S/PDIF接口一般有两种,一种是RCA同轴接口,另一种是TOSLINK光缆接口。其中RCA接口(是非标准的,它的优点是阻抗恒定、有较宽的传输带宽。在国际标准中,S/PDIF需要BNC接口75欧姆电缆传输,然而很多厂商由于各种原因频频使用RCA接口甚至使用3.5mm的小型立体声接口进行S/PDIF传输。
在多媒体声卡上,S/PDIF分为输出和输入两种形式,也就是通常所说的S/PDIF OUT和S/PDIF IN。声卡的S/PDIF OUT主要功能是将来自电脑的数字音频信号传输到各种外接设备。在目前的主流产品中,S/PDIF OUT功能已经非常普及,通常以同轴或者光纤接口的方式做在声卡主卡或者数字子卡上。而S/PDIF IN在声卡中主要功能则是接收来自其它设备的PCM信号,最典型的应用就是CD唱片的数字播放。虽然所有CD-ROM都具有CD播放能力,但效果有优劣之分。主要原因在于CD-ROM所采用的DAC品质不同,从而造成了效果上的差异。但如果你的声卡上拥有一个两针的S/PDIF IN插口,那么就可以通过一条两芯的数字CD信号传输线连接到CD-ROM的Audio Digital Out接口。这样当播放CD唱片的时候,CD上的PCM信号就不经过DAC,而直接被输出到声卡上,随后再由声卡进行D/A转换或者通过S/PDIF OUT输出。一般声卡CODEC芯片的D/A转换品质总是好过CD-ROM上的DAC,因此通过S/PDIF技术,CD播放质量就被有效提高了。
[编辑] 采样位数与采样频率
音频信号是连续的模拟信号,而电脑处理的却只能是数字信号。因此,电脑要对音频信号进行处理,首先必须进行模/数(A/D)的转换。这个转换过程实际上就是对音频信号的采样和量化过程,即把时间上连续的模拟信号转变为时间上不连续的数字信号,只要在连续量上等间隔的取足够多的点,就能逼真地模拟出原来的连续量。这个“取点”的过程我们称为采样(sampling),采样精度越高(“取点”越多)数字声音越逼真。其中信号幅度(电压值)方向采样精度,我们称之为采样位数(sampling resolution),时间方向的采样精度称为采样频率(sampling frequency)。
采样位数指的是每个采样点所代表音频信号的幅度。8bit的位数可以描述256种状态,而16bit则可以表示65536种状态。对于同一信号幅度而言,使用16bit的量化级来描述自然要比使用8bit来描述精确得多。其情形就尤如使用毫米为单位进行度量要比使用厘米为单位要精确一样。一般来说采样位数越高,声音就越清析。
采样频率是指每秒钟对音频信号的采样次数。单位时间内采样次数越多,即采样频率越高,数字信号就越接近原声。采样频率只要达到信号最高频率的两倍,就能精确描述被采样的信号。一般来说,人耳的听力范围在20hz到20Khz之间,因此,只要采样频率达到20Khz×2=40Khz时,就可以满足人们的要求。现时大多数声卡的采样频率都已达到44.1或48Khz,即达到所谓的CD音质水平了。
[编辑] 复音数
在各类声卡的命名中,我们经常会发现诸如64、128之类的数字。有些用户乃至商家将它们误认为是64位、128位声卡,是代表采样位数。其实64、128代表的只是此卡在MIDI合成时可以达到的最大复音数。所谓"复音"是指MIDI乐曲在一秒钟内发出的最大声音数目。波表支持的复音值如果太小,一些比较复杂的MIDI乐曲在合成时就会出现某些声部被丢失的情况,直接影响到播放效果。复音越多,音效越逼真,但这与采样位数无关,如今的波表声卡可以提供128以上的复音值。
另外需要注意的是"硬件支持复音"和"软件支持复音"之间的区别。所谓"硬件支持复音"是指其所有的复音数都由声卡芯片所生成,而"软件支持复音"则是在"硬件复音"的基础上以软件合成的方法,加大复音数,但这是需要CPU来带动的。眼下主流声卡所支持的最大硬件复音为64,而软件复音则可高达1024。
[编辑] 动态范围
动态范围指当声音的增益发生瞬间态突变,也就是当音量骤然或突然毫米波时,设备所有名承受的最大变化范围。这个数值越大,则表示声卡的动态范围越广,就越能表现出作品的情绪和起伏。一般声卡的动态范围在85dB左右,能够做到90dB以上动态范围的声卡是非常好的声卡了。
==Wave音效与MIDI音乐==
WAVE音效合成与MIDI音乐的合成是声卡最主要的功能。其中WAVE音效合成是由声卡的ADC模数转换器和DAC数模转换器来完成的。模拟音频信号经ADC转换后为数字音频后,以文件形式存放在磁盘等介质上,就成为声音文件。这类文件我们称之为wave form文件,通常以.wav为扩展名,因此也称为wav文件。WAVE音效可以逼真地模拟出自然界的各种声音效果。可惜的是wav文件需要占用很大的贮存空间,也正是这个缺点,造就了MP3的成长。
MIDI,即乐器数字化接口,是一种用于电脑与电子乐器之间进行数据交换的通信标准。MIDI文件(通常以.mid为文件扩展名)记录了用于合成MIDI音乐的各种控制指令,包括发声乐器、所用通道、音量大小等。由于MIDI文件本身不包含任何数字音频信号,因而所占的贮存空间比wav文件要小得多。MIDI文件回放需要通过声卡的MIDI合成器合成为不同的声音,而合成的方式有FM(调频)与Wave table(波表)两种。
大多数廉价的声卡都采用的FM合成方式,FM合成是通过振荡器产生正弦波,然后再叠加成各种乐器的波形。由于振荡器成本较高,即使是OPL3这类高档的FM合成器也只提供了4个振荡器,仅能产生20种复音,所以发出音乐听起来生硬呆板,带有明显的人工合成色彩。与FM合成不同,波表合成是采用真实的声音样本进行回放。声音样本记录了各种真实乐器的波形采样,并保存在声卡上的ROM或RAM中(要分辨一块声卡是否波表声卡,只需看卡上有没有ROM或RAM存储器即可)。目前中高档声卡大都采用了波表合成技术。
==输出信噪比==
“输出信噪比”是衡量声卡音质的一个重要因素,其概念为——输出信号电压与同时输出的噪音电压的比例,单位是分贝。这个数值越大,代表输出时信号中被掺入的噪音越小,音质就越纯净。声卡作为电脑的主要输出音源,对信噪比要求是相对较高的。由于声音通过声卡输出,需要通过一系列复杂的处理,所以决定一块声卡信噪比大小的因素也有很多。由于计算机内部的电磁辐射干扰很严重,所以集成声卡的信噪比很难做到很高,一般其的信噪比在80dB左右。PCI声卡一般拥有较高的信噪比(大多数可以轻易达到90dB),有的高达195dB以上。较高的信噪比保证了声音输出时的音色更纯,可以将杂音减少到最低限度。而音色的好坏则取决于产品所选用的音效芯片和卡的做工。如果可能的话,购买声卡前最好先进行试听,如果实在没有得试听的话,可以多留意周围媒体对它的评价,或许对你的选购有一些帮助。
[编辑] API接口
API就是是编程接口的意思,其中包含了许多关于声音定位与处理的指令与规范。它的性能将直接影响三维音效的表现力,主要有下面几种:
Direct Sound 3D
Direct Sound 3D,是微软公司提出的3D效果定位技术,它最大特点就是硬件无关性,在声卡出现初期,许多声卡芯片没有自己的硬件3D音效处理能力,都是使用这种Direct Sound 3D来模拟出立体声。它所产生的效果均由CPU通过即时运算产生,比较耗费CPU资源,所以,此后推出的声卡都拥有了一个所谓的“硬件支持DS3D”能力。如果你在选购声卡时听销售商说声卡支持D3D多么好的话,千万不要就轻信这是一块好声卡,其实际听觉效果要看声卡自身采用的HRTF算法能力的强弱而定。
A3D
A3D是Aureal公司开发的一项专利技术。它是在Direct Sound 3D的API接口基础上发展起来的。A3D最大特点是能以精确定位(Positional)的3D音效增加新一代游戏软件交互的真实感,这就是通常所说的3D定位技术。A3D目前有1.0、2.0和A3D3.0三个版本。1.0版包括A3D Surround和A3D Interactive两大应用领域,特别强调在立体声硬件环境下就可以得到真实的声场模拟,A3D 1.0中同时间内只能处理8个音源,取样频率是22kHz,AUREAL声卡中的AU8820芯片使用的就是这种技术。2.0则是在1.0基础上加入了声波追踪技术,进一步加强了性能,A3D 2.0同时则可以处理16个音源,取样频率已达48kHz,它是当今定位效果最好的3D音频技术之一,AU8830芯片就支持这种技术。至于3.0版本早就被提出了,不过由于Aureal公司已经被创新收购,A3D3.0的前途还是个未知数。
由于Aureal的A3D技术在3D定位及交互性声音处理(这是两大关键部分)方面具有优势,加之支持Direct Sound 3D硬件加速,因而很多游戏开发商都是基于A3D进行3D游戏开发的。不过由于实现起来成本颇高,因而并不是每块PCI声卡都支持该技术。
A3D Surround
A3D Surround吸收了A3D技术和环绕声解码技术(如Dolby的 ProLogic和AC-3)之精华,突出特点是只使用两只普通音箱(或一副耳机)在环绕三维空间中,进行声音的精确定位(也就是说可产生与五个“虚拟音箱”相同的效果)。当然,这五组音频流并不像传统的“家庭影院”那样需要用5个实际的音箱进行回放,它实际上只是经过A3D Surround处理后用两个音箱播放出来的。这一技术被杜比实验室授予“Virtual Dolby”认证。
EAX
EAX是由创新公司在其SB LIVE!系列声卡中提出的标准,全名为Environmental Audio Extension,即环境音效。EAX是建立在DS3D上的,只是在后者的基础上增加了几种独有的声音效果命令。EAX的特点是着重对各种声音在不同环境条件下的变化和表现进行渲染,但对声音的定位能力不如A3D,EAX建议用户配备4声道环绕音箱系统。现在支持EAX2的主要就是EMU10K1和MU10K2芯片,它们分别为创新着名的SB Live!和Audigy系列声卡所采用,该芯片同时还支持A3D1、HRTF等技术,是目前流行兼容声卡中的精品。
注:目前,A3D和EAX是API接口中的两大流派,你在购买的时候,最好弄清楚选择的声卡支持哪些音效,所支持的版本是多少,是软件模拟还是硬件支持,这些都是十分关键的。
[编辑] HRTF
HRTF是Head Related Transfer Function的缩写,中文意思是“头部对应传输功能”,它也是实现三维音效比较重要的一个因素。简单讲,HRTF是一种音效定位算法,它的实际作用在于用数字和算法欺骗我们的耳朵,使我们认为自己处了一个真实的声音环境中。3D定位是通过声卡芯片采用的HRTF算法实现的,定位效果也是由HRTF算法决定的。象Aureal和Creative这样的大公司,他们既能够开发出强大指令集规范,同时也可以开发出先进的HRTF算法并集成在自己的芯片中。当然也有一些厂商专门出售或者为声卡订定各种各样的HRTF算法,比较有名的就要算Sensaura 3D和Qsound。Sensaura 3D是由CRT公司提供的。Sensaura,支持包括A3D 1.0和EAX、DS3D在内的大部分主流3D音频API,此技术主要运用于ESS、YAMAHA和CMI的声卡芯片上。而QSound开发的Q3D,主要包括三个部分,第一部分是3D音效和听觉环境模型,第二部分是立体音乐加强,第三个部分是虚拟的环境音效,可以提供一个与EAX相仿的环境模拟功能,但效果还比较单一,与Sensaura大而全的性能指标相比稍逊一筹。此外C-MEDIA在CMI8738上则使用自己的HRTF算法,称为C3DX,支持EAX和DS3D,实际效果很一般。
==IAS== IAS是Interactive Around-Sound的缩写,它是 EAR(Extreme Audio Reality)公司在开发者和硬件厂商的协助下开发出来的专利音频技术,该技术可以满足测试系统硬件、管理所有的音效平台的需求。开发者只需写一套音效代码,所有基于Windows 95/98/2000的音频硬件将通过同样的编程接口来获得支持。IAS为音效设计者管理所有的音效资源,提供了DS3D(Direct Sound 3D)支持。此外,它的音效输出引擎会自动配置最佳的3D音频解决方案,其中有四信道模式的声卡将是首要的目标。而DS3D 可以在现有的双喇叭平台上获得支持。
[编辑] ASIO
ASIO是Audio Stream Input Output的缩写,可翻译为“音频流输入/输出”的意思。通常这是专业声卡或高档音频工作站才会具备的性能。采用ASIO技术可以减少系统对音频流信号的延迟,增强声卡硬件的音频处理能力。同样一块声卡,假设使用 MME 驱动时的延迟时间为750毫秒,那么当换成ASIO驱动后延迟量就有可能会降低到40毫秒以下。
但是并非所有的声卡都能够支持ASIO。ASIO不仅定义驱动标准,还必须要求声卡主芯片的硬件支持才能够得以实现。只有那些价格高贵的专业声卡,在设计中才会考虑到对ASIO的支持。我们常所用的声卡,包括创新过去的SB Live!系列都属于民用卡的范畴,没有配备了ASIO驱动的。不过创新SoundBlaster Audigy已经开始全面支持ASIO技术。
注:SB Live!的主芯片EMU10K1本身支持ASIO,只是这一性能并未在创新自带的LiveWare! 3.0驱动中体现出来。因此,当你将SB Live!的驱动程序换成采用同样规格设计的E_mu APS录音卡的驱动后,音频处理软件就会报告说找到ASIO!另外CMI8738本身也是具备ASIO的潜质,只不过至今还没有合适的驱动将其发挥出来。
[编辑] AC-3
AC-3是完全数字式的编码信号,所以正式英文名为“Dolby Digital”,是由着名的美国杜比实验室(Dolby Laboratories)。Dolby的一个环绕声标准。AC-3规定了6个相互独立的声轨,分别是——前置两声道,后置环绕两声道,一个中置声道和一个低音增强声道。其中前置、环绕和中置五个声道建议为全频带扬声器,低音炮负责传送低与80Hz的超重低音。早期的AC-3最高只能支持5.1声道,在经过不断的升级改进,目前AC-3的6.1 EX系统增加了后部环绕中置的设计,让用户可以体验到更加精准的定位。
对于AC-3,目前通过硬件解码和软件解码这两种方式实现。硬件解码是通过支持AC-3信号传输声卡中的解码器,将声间进行5.1声道分离后通过5.1音箱输出。软件解码就是通过软件来进行解码的,(如DVD播放软件WinDVD、PowerDVD都可以支持AC-3解码,当然声卡也必须支持模拟六声道输出。),不过这种工作方式比较大的缺陷在于解码运算需要通过CPU来完成,会增加了系统负担,而且软解码的定位能力依然较逊色,声场相对较散。
虽然软件模拟AC-3存在着缺陷,其成本相对低廉,目前中低档的声卡大都是使用这种方式。
[编辑] DLS技术
DLS全称为"Down Loadable Sample",意为“可供下载的采样音色库”。其原理与软波表颇有异曲同工之处,也是将音色库存贮在硬盘中,待播放时调入系统内存。但不同点在于运用DLS技术后,合成MIDI时并不利用CPU来运算,而依靠声卡自己的音频处理芯片进行合成。其中原因在于PCI声卡的数据宽带达到133Mb/秒,大大加宽了系统内存与声卡之间的传输通道,PCI声卡就可使用先进的DLS技术,将波表音色储存于硬盘中,通过声卡芯片处理,在播放MIDI时调入内存。从而既免去了传统ISA波表声卡所要配备的音色库内存,又大大降低了播放MIDI时的CPU占用率。这样不但提供了良好的MIDI合成效果又可免去ISA波表声卡上必须配备的音色库内存,而且这种波表库可以随时更新,并利用DLS音色编辑软件进行修改,这都是传统波表所无法比拟的优势。
[编辑] SB1394标准
SB1394是创新公司为达到高速数字音频传送(约400Mbps)所提出的IEEE1394兼容标准。创新的SB1394标准保证通过SB1394连接的1394接口设备可发挥最大效能,传输速度高达400Mbps,使主机与外设之间大文件的高速传送成为可能。Sound Blaster Audigy2声卡就内置SB1394,可通过IEEE 1394标准接口外接设备如DV摄象机等,并可连接63台电脑进行低延迟的联网游戏
㈣ dx 3D编程怎么学才可以学到精华
现在书籍很少 虽然有 但因为这是微软刚出的sdk 段时间 鲜少有人能精通
现在开始学 就是靠些基本 知识 多练 借助 帮助信息慢慢摸索的
不要急于求成 总有一天你会成功的
㈤ C++ D3D编程光照问题...小白死在这个坎上了..
我也是小白,不过我尝试着回答一下。
我理解的问题是:准心是带alpha的,你想通过 alpha混合/去除color key之类的方法,在一个 已经绘制过的图片上面 绘制一个透明的准心。
我认为什么时候开启 alpha 功能是很重要的。
一般都是这样的:在 绘制(render/draw) 物品前,把需要开的 一些功能都打开, render结束了再关掉(当然这个影响效率,暂时不讨论)
那么你应该先不开 alpha,绘制出你要的那些东西。 最后 ,再开alpha,再绘制出你 需要用alpha绘制的图形。
以上是我的理解。
㈥ D3D编程游戏编程
要在VC中成功编译Matlab引擎程序,必须包含引擎头文件engine.h并引入Matlab对应的库文件libmx.lib、libmat.lib、libeng.lib。具体的说,打开一个工程后,做如下设置(以VC6为例):
1) 通过菜单工程/选项,打开设置属性页,进入Directories页面,在目录下拉列表框中选择Include files,添加路径:"C:\matlab\extern\include"(假定matlab安装在C:\matlab目录)。
2) 选择Library files,添加路径:C:\matlab\extern\lib\win32\microsoft\msvc60。
3) 通过菜单工程/设置,打开工程设置属性页,进入Link页面,在Object/library moles编辑框中,添加文件名libmx.lib libmat.lib libeng.lib。
以上步骤1)、2)只需设置一次,而步骤3)对每个工程都要单独设定,对于其它C++编译器如Borland C++ builder,设置大体相同,不再赘述。
在调用Matlab引擎之前,首先应在相关文件中加入一行:#include "enging.h",该文件包含了引擎API函数的说明和所需数据结构的定义。
㈦ 游戏里的D3D模式和OPENGL模式各是什么意思工作原理有什么不同
D3D,全称为Direct3D,是微软为提高3D游戏在Windows中的显示性能而开发的显示程序接口,目前已经升级到12版本,它提供了丰富的3D功能库,是游戏广泛采用的标准。
OpenGL是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。
两者工作原理上的不同:
1、D3D的原理在于只需要调用D3D提供的接口函数和功能就能实现显示功能,通过分工合作,极大的降低了软件开发周期和成本。
2、OpenGL的高效实现是利用了图形加速硬件,存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。
(7)d3d编程扩展阅读:
OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些对创建一个统一的、普遍可用的API特别感兴趣的公司组成。
据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland;
Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems,Microsoft曾是创立成员之一,但已于2003年3月退出。
㈧ 现在学习directx的2D游戏编程是应该学习什么
1. 使用d3d编写2d游戏不会降低运行效率, 相反会提升很多. 说个最直接的吧, 从前ddraw的图片加工都是由cpu处理, 而d3d完全可以由gpu代为处理. 如果是需要像素级别的碰撞检测, 这个性能提升就是不言而喻的了.
说明: 简单说下如何使用d3d进行2d编程吧.
1. 创建3d设备.
2. 创建quad阵列用于投影纹理.(简单一点来说可以先创建一个单位四边形用于贴图)
3. 创建符合你要求的正交投影矩阵
4. 将四边形绘制上backbuffer, 窗口模式一下, 全屏模式swap一下即可. 其中可以通过shader在多重纹理阶段创建各种显示效果.
㈨ D3D游戏开发大家都是如何学习的怎么感觉那么难
这本书里面应该有许多范例,尝试自己写一下这些范例,多看看网上的范例,写的代码多了,想不记住这些函数名都难,记住四个字:熟能生巧。这是最好的学习方法。个人感受。楼主连写最简单的移动都无从下手,不太可能吧?移动很简单的,无非就是重绘和叠加。楼主有可能基础比较薄,才会这样。龙书确实经典,但可惜讲的太简略,对于新手来讲会有点困难。相信楼主肯定不清楚这些函数的底层实现原理是怎样的。我先学的opengl,后学的dx,这样的话看龙书的时候感觉简单多了,而且关于opengl的基础教程远远比dx要多,因此对于新手来讲学opengl比学dx要简单,而且学校的计算机图形学一般用opengl授课,因此先学opengl在学dx是不错的选择。如果楼主觉得为了学dx先学opengl太麻烦,只能慢慢啃龙书了。不会的地方一定要刨根问底,细节地方不要忽略。关键要靠自己,坚持坚持再坚持,个人感受。
刚看了一下,龙书上的范例还是不少的,楼主一定要把这些范例一行一行的读懂,弄懂每一行的用意,然后尝试自己写出来,一定大有裨益,我学opengl就是这么做的。看书不在于多,在于精,我在学的时候,几乎每天都要到网上发帖问问题,因为水平太菜,但不懂的问题最后都明白了,没有一个例外。楼主只要反复推敲龙书,应该可以学个差不多。