图形设备接口DirectX 图形接口指南

图形设备接口DirectX 图形接口指南
图形设备接口DirectX 图形接口指南

图形设备接口:DirectX 图形接口指南

疯狂代码 https://www.360docs.net/doc/dd5007352.html,/ ?:

http:/https://www.360docs.net/doc/dd5007352.html,/GameDevelopment/Article35957.html

译者申明:

这些指南是我在阅读 DirectX8.1 SDK 中逐步翻译出来对于初次接触 DirectX Graphics 编程者而言这应该是很好上手资料其实本人就是从这些指南开始深入 Direct3D8.1 ;由于这是本人第次翻译英文材料言语不通词不达意的处定很多些术语也译得很勉强请见谅

此外需要转载此文者请保留以下部分:

-----------------------------------------------------------------------

DirectX图形接口指南 译者:In355Hz 电子邮箱: In355Hz@https://www.360docs.net/doc/dd5007352.html,

-----------------------------------------------------------------------

DirectX 图形接口指南:

(应用于 DirectX 8.1 版 C/C 编程)

本区域指南将介绍说明如何在 C/C 中使用 Microsoft Direct3D 和 Direct3DX 完成些普通工作这些工作总是被分解成若干个必要步骤在某些情况下为了使表达更清楚些步骤还被细分成几个子步骤

本区域提供指南有:

· 指南:创建设备

· 指南 2:演示顶点

· 指南 3:使用矩阵

· 指南 4:创建和使用光源

· 指南 5:使用纹理映射

· 指南 6:使用Mesh模型

提示:指南中出现举例代码来自于每个指南具体提供路径里源文件

这些指南中源代码是用 C 写成如果使用C编译器你必须适当改变这些文件使它们能够编译通过最少你需要加入vtable 然后用它引用接口

包含在举例代码中些注解可能和来自 Microsoft Platform Software Development Kit (SDK) 中源代码区别这些改变仅仅为了简化表述并且只限于注解中这样能够防止举例行为被改变

指南:创建设备

为了使用 Microsoft Direct3D你首先需要创建个应用窗口并紧接着创建和化 Direct3D 对象你应该使用这些对象提供 COM 接口来操纵它们以及创建描绘个场景所必需其它对象本指南包含 CreateDevice 举例将例示并介绍说明以下几个工作:创建 Direct3D 设备并且绘制个简单蓝色屏幕

这个指南使用以下步骤:化 Direct3D绘制场景以及最后清理和关闭

·步骤:创建个窗口

·步骤 2:化 Direct3D

·步骤 3:处理系统消息

·步骤 4:绘制和显示场景

·步骤 5:关闭和清除

注意:CreateDevice 举例路径在:

(SDK root)\\Samples\\Multimedia\\Direct3D\\Tutorials\\Tut01_CreateDevice.

步骤:创建个窗口

任何 Microsoft Windows 执行中必须要作第件事就是创建个应用窗口并将其显示给用户为做到这点CreateDevice 例程将首先实现它 WinMain 以下举例代码完成了窗口化

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )

{

// Register the window .

WNDCLASSEX wc = { (WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,

GetModuleHandle(NULL), NULL, NULL, NULL, NULL,

"D3D Tutorial", NULL };

RegisterClassEx( &wc );

// Create the application's window.

HWND hWnd = CreateWindow( "D3D Tutorial", "D3D Tutorial 01: CreateDevice",

WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,

GetDesktopWindow, NULL, wc.hInstance, NULL );

前述举例代码是标准 Windows 编程例子开始时定义和注册了个窗口类名为 "D3D Tutorial"类注册以后举例代码使用已注册类创建了个基本顶层(top-level)窗口客户区域为 300 像素宽300 像数高这个窗口没有菜单或子窗口举例使用了 WS_OVERLAPPEDWINDOW 属性创建个包括最大化最小化以及关闭按钮普通窗口(如果该例程将运行在全屏模式下首选窗口属性应该是WS_EX_TOPMOST它指定创建窗口置于并且保持在所有非最高(non-topmost)窗口的前甚至在窗口失活情况下)旦窗口创建完成例代码标准 Microsoft Win32 显示和更新窗口

在应用窗口准备好以后你就能开始设置具体 Microsoft Direct3D 对象了

请见:步骤 2:化 Direct3D

步骤 2:化 Direct3D

CreateDevice 举例在 WinMain 中创建窗口的后该定义 InitD3D 完成 Microsoft Direct3D 化过程在创建窗口的后已经准备好化你将用来绘制场景 Direct3D 对象了这个过程包括创建个 Direct3D 对象设置Present Parameters以及最后创建 Direct3D 设备

创建完 Direct3D 对象的后你可以立即使用 IDirect3D8::CreateDevice 思路方法创建 Direct3D 设备你也能够使用 Direct3D 对象枚举设备类型模式以及其他东西这些工作代码段应位于使用 Direct3DCreate8 创建Direct3D 对象的后

( NULL ( g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) )

E_FAIL;

传递给 Direct3DCreate8 唯参数应该始终是 D3D_SDK_VERSION它告诉 Direct3D 当前使用头文件信息无论如何头文件或者其他变化将导致这个值增加并强制使用该值应用重新编译如果此版本不匹配 Direct3DCreate8将失败

下个步骤是使用 IDirect3D8::GetAdapterDisplayMode 接口找到当前显示模式代码如下:

D3DDISPLAYMODE d3ddm;

( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )

E_FAIL;

D3DDISPLAYMODE 结构中 Format 变量将被用于创建 Direct3D 设备如果是运行于窗口模式下话Format 参数通常用来创建个和适配器当前模式相匹配后背缓冲 (Back buffer)

在给 D3DPRESENT_PARAMETERS 各参数赋值时你必须指定你应用在3D下工作方式本 CreateDevice 例程设置D3DPRESENT_PARAMETERS结构中 Windowed 为 TRUESwapEffect 为

D3DSWAPEFFECT_DISCARDBackBufferFormat 为 d3ddm.Format

D3DPRESENT_PARAMETERS d3dpp;

ZeroMemory( &d3dpp, (d3dpp) );

d3dpp.Windowed = TRUE;

d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;

d3dpp.BackBufferFormat = d3ddm.Format;

最后步是利用 IDirect3D8::CreateDevice 创建 Direct3D 设备代码如下:

( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,

D3DCREATE_SOFTWARE_VERTEXPROCESSING,

&d3dpp, &g_pd3dDevice ) ) )

前述代码使用 D3DADAPTER_DEFAULT 标志创建了个使用省缺适配器设备在非常多数情况下系统只有个适配器除非它安装了多个图形加速卡通过把 DeviceType 参数设成 D3DDEVTYPE_HAL表示你希望获得个实际硬件设备 (hardware device) 而不是软件Software虚拟设备 (software device)举例代码还使用

D3DCREATE_SOFTWARE_VERTEXPROCESSING 标志通知系统使用软件Software顶点处理 (software vertex processing)注意如果你指定 D3DCREATE_HARDWARE_VERTEXPROCESSING 标志通知系统使用硬件顶点处理 (hardware vertex processing),你可以在支持硬件顶点处理图形加速卡上得到大幅度性能提升

现在 Direct3D 已经化完毕下步是确保你具有个机制用来来处理系统消息

见下文:步骤 3:处理系统消息

步骤 3:处理系统消息

完成创建窗口以及化 Direct3D 以后你已经准备好绘制场景 (Render scene)大多数情况下Microsoft Windows 在它们消息循环里监视系统消息并且在队列里没有消息时绘制画面帧然而CreateDevice 例程仅仅在等到个WM_PAINT出现在队列里时才通知应用重绘窗口所有部分

// The message loop.

MSG msg;

while( GetMessage( &msg, NULL, 0, 0 ) )

{

TranslateMessage( &msg );

DispatchMessage( &msg );

}

当每循环次DispatchMessage MsgProc后者负责处理队列里消息当 WM_PAINT 消息进队时该自身定义Render它将负责重绘窗口然后 Microsoft Win32 ValidateRect 执行并将整个客户区域设为有效

消息处理例代码如下:

LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) {

switch( msg )

{

WM_DESTROY:

PostQuitMessage( 0 );

0;

WM_PAINT:

Render;

ValidateRect( hWnd, NULL );

0;

}

DefWindowProc( hWnd, msg, wParam, lParam );

}

现在应用处理了系统消息接着步是绘制显示见:步骤 4:绘制和显示场景

步骤 4:绘制和显示场景

为了描绘和显示需要场景本例程在这步把后背缓冲 (back buffer) 填充为蓝色然后将此后背缓冲内容传给前景缓冲 (front buffer), 并且将前景缓冲提交至屏幕

清除表面应 IDirect3DDevice8::Clear :

// Clear the back buffer to a blue color

g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );

Clear 接受前两个参数通知 Microsoft Direct3D 被清除矩形区域基址和大小该矩形区域描述了绘制目标表面(render target surface) 里需要清除区域

在大多数情况下只使用单个矩形覆盖整个绘制目标表面这样你只需设置第个参数为 0 及第 2个参数为 NULL第3个参数将决定思路方法行为你可以通过设置特定标志用来清除绘制目标表面 (render target surface)关联Z缓冲 (associated depth buffer)模版缓冲 (stencil buffer)以及任意这 3者混合本指南不使用Z缓冲所以仅仅使用了 D3DCLEAR_TARGET 标志最后 3个参数分别用于设置对应绘制目标表面、Z缓冲和模版缓冲清除填充值(reflect clearing values)该 CreateDevice 例程将绘制目表面清除填充色设置为蓝色

(D3DCOLOR_XRGB(0,0,255)由于相应标志没有设置最后两个参数被 Clear 忽略

在清除了视口 (viewport) 的后CreateDevice 例程告知 Direct3D 绘图将要开始然后立即通知这次绘制完成见以下代码段:

// Begin the scene.

g_pd3dDevice->BeginScene;

// Rendering of scene objects happens here.

// End the scene.

g_pd3dDevice->EndScene;

当绘制开始或完成时IDirect3DDevice8::BeginScene 和 IDirect3DDevice8::EndScene 将用信号通知系统你只能在这两的间其它绘图即使绘图失败你也应该在重新 BeginScene 的前 EndScene

绘制完的后 IDirect3DDevice8::Present显示该场景:

g_pd3dDevice->Present( NULL, NULL, NULL, NULL );

Present 接受前两个参数是原始矩形和目标矩形在这步例程设置这两个参数为 NULL 并把整个后备缓冲提交到前景缓冲第 3个参数用于设置该次提交目标窗口这个参数被设为 NULL实际使用窗口是

D3DPRESENT_PARAMETERS hWndDeviceWindow 成员第 4个是 DirtyRegion 参数在绝大多数情况下应该设为 NULL

本指南最终步骤是关闭应用见:步骤 5:关闭和清除

步骤 5:关闭和清除

在执行若干时刻你应用必须立即关闭关闭个 Direct3D 应用中不只是意味着你必须销毁窗口并且你还要释放中使用过任何 Direct3D 对象并且无效化它们指针当收到个 WM_DESTROY 消息时CreateDevice 例程通过个本地定义 Cleanup 来处理这些工作

VOID Cleanup

{

( g_pd3dDevice != NULL)

g_pd3dDevice->Release;

( g_pD3D != NULL)

g_pD3D->Release;

}

上述对每个对象 IUnknown::Release 思路方法来释放它们自身由于DirectX遵循 COM 规则大多数对象当其引用计数降为0时DirectX会自动从内存中释放这个对象

对于其他关闭情况可能发生在平常执行中——比如用户改变了桌面参数或色深——此时你可能需要撤销和重建使用中 Microsoft Direct3D 对象因此个好主意就是将你释放代码放到起以便能在需要时随时它

本指南已经介绍说明了如何创建个设备指南 2:演示顶点(Render Vertex) 将告诉你如何用顶点(Vertex)创建几何形体

指南 2:演示顶点(Render Vertex)

Microsoft Direct3D 写应用使用顶点(Vertex)构造几何物体每个 3维空间 (3D) 场景包括个或几个这样几何物体Vertices 例程构造简单物体个 3角形并且将它绘制到显示屏上

本指南介绍说明如何采用以下步骤从顶点构造个 3角形:

·第步:定义个自定义顶点类型

·第 2步:设置顶点缓冲

·第 3步:绘制至显示屏

注意:Vertices 举例路径为:

(SDK root)\\Samples\\Multimedia\\Direct3D\\Tutorials\\Tut02_Vertices.

Vertices 举例代码和 CreateDevice 代码大部分相同本“演示顶点(Render Vertex)”指南仅仅关注于那些独特有关顶点代码而不包括化 Direct3D处理 Microsoft Windows 消息绘图和清理等工作如要得到有关这些任务信息请参考 指南:创建设备

第步:定义个自定义顶点类型

Vertices 例程使用 3个顶点构造个 2D 3角形这里提及了顶点缓冲概念这是用于保存和演示大量顶点 Microsoft Direct3D 对象通过指定个自定义顶点结构和相应可变向量格式 (FVF)顶点能够采用很多思路方法定义本Vertices 例程使用顶点格式定义于以下代码片断中

struct CUSTOMVERTEX

{

FLOAT x, y, z, rhw; // The transformed position for the vertex.

DWORD color; // The vertex color.

};

上面结构体介绍说明了自定义顶点类型格式下步是定义 FVF 以描述顶点缓冲区中顶点内容以下代码片段定义了个 FVF 并符合此上建立自定义顶点类型

# D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)

可变顶点格式标记描述了使用中自定义顶点类型前述举例代码使用了 D3DFVF_XYZRHW 和

D3DFVF_DIFFUSE 标志这将告诉顶点缓冲自定义顶点类型包含组转换过点坐标并紧跟着个颜色参数

现在自定义向量格式和 FVF 已经被指定好了下步将使用顶点填充顶点缓冲区请参看:第 2步:设置顶点缓冲

注意:Vertices 例程中顶点是转换过用另句话说它们已经在 2D 窗口坐标系下这意味着座标点 (0,0) 位于左上角且正 x 半轴向右正 y 半轴向下这些顶点同样也是光照过这介绍说明它们着色不通过 Direct3D 照明而由它们自己颜色代替

第 2步:设置顶点缓冲

现在自定义顶点格式已经完成化顶点时候到了 Vertices 例程创建了必需 Microsoft Direct3D 对象的后本内部定义 InitVB 进行这个工作以下代码段将化 3个自定义顶点值

CUSTOMVERTEX g_Vertices =

{

{ 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color

{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, },

{ 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },

};

前述代码片段采用 3角形 3个顶点填充 3个Vertex并指定了每个顶点散射光颜色第个顶点位于 (150,50) 散射红色 (0xffff0000)第 2个顶点位于 (250,250) 为绿色 (0xff00ff00)第 3点位于 (50,250) 并散射蓝绿色

(0xff00ffff)每点都具有相同 0.5 Z值及 1.0 RHW 参数有关这些矢量格式其它信息见 SDK: Transformed and Lit Vertices

下步将 IDirect3DDevice8::CreateVertexBuffer 创建顶点缓冲区如以下代码段所示:

( FAILED( g_pd3dDevice->CreateVertexBuffer( 3*(CUSTOMVERTEX),

0 /* Usage */, D3DFVF_CUSTOMVERTEX,

D3DPOOL_DEFAULT, &g_pVB ) ) )

E_FAIL;

CreateVertexBuffer 头两个参数告诉 Direct3D 新顶点缓冲区预计大小和使用方法紧跟两个参数指定新缓冲区矢量格式及存储位置这里向量格式是 D3DFVF_CUSTOMVERTEX就是例程先前定义 FVF 值

D3DPOOL_DEFAULT 标记告诉 Direct3D 在最合适位置创建此顶点缓冲区最后个参数返回创建完成顶点缓冲区对象地址

创建了顶点缓冲区的后如以下代码段所示开始采用自定义格式顶点填充缓冲区中数据

VOID* pVertices;

( FAILED( g_pVB->Lock( 0, (g_Vertices), (BYTE**)&pVertices, 0 ) ) )

E_FAIL;

memcpy( pVertices, g_Vertices, (g_Vertices) );

g_pVB->Unlock;

首先 IDirect3DVertexBuffer8::Lock 锁定顶点缓冲区第个参数是锁定顶点数据偏移量按字节计算第 2个参数是需锁定顶点数据长度同样按字节计算第 3个参数是个 BYTE 类型指针地址用于返回指向顶点数据地址第 4个参数告知顶点缓冲区如何锁定数据

通过使用 memcpy顶点被复制到顶点缓冲区里将顶点放入缓冲区的后次 IDirect3DVertexBuffer8::Unlock 以解锁顶点缓冲区这个锁定——解锁机制是必需正在使用顶点缓冲区可能位于设备内存中

现在顶点缓冲区已经填入顶点绘制到显示时候到了见描述:第 3步:绘制至显示屏

第 3步:绘制至显示屏

现在缓冲区已经填入顶点现在需要把它绘制到显示屏上在绘制到屏幕的前先将背景清除为蓝色并 BeginScene

g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0L );

g_pd3dDevice->BeginScene;

从顶点缓冲区绘制顶点数据需要些步骤首先你需要设置流数据源;在当前情况下使用第 0 个流 流数据源是通过IDirect3DDevice8::SetStreamSource 设置

g_pd3dDevice->SetStreamSource( 0, g_pVB, (CUSTOMVERTEX) );

SetStreamSource 第个参数告诉 Microsoft Direct3D 设备设置数据流索引第 2个参数是绑定在该数据流上顶点缓冲区第 3个参数是数据单元大小用字节数表示在上面举例代码中将使用CUSTOMVERTEX 大小作为数据单元大小

下步通过 IDirect3DDevice8::SetVertexShader 使 Direct3D 了解使用中顶点处理器(Vertex Shader)就整体而言自定义顶点处理器是种高级话题但是在绝大多数情况下顶点处理器仅仅等于 FVF 代码这能够让 Direct3D 知道处理中顶点类型以下代码片段将FVF设置为当前顶点处理器:

g_pd3dDevice->SetVertexShader( D3DFVF_CUSTOMVERTEX );

SetVertexShader 唯参数是当前设置顶点处理器句柄这个参数值可以是从

IDirect3DDevice8::CreateVertexShader 返回句柄或者是 FVF 代码在这儿使用参数是定义为

D3DFVF_CUSTOMVERTEX FVF 代码

有关顶点处理器更多信息请见 SDK: Vertex Shader 章

下步使用 IDirect3DDevice8::DrawPrimitive 绘制顶点缓冲区中顶点见以下代码片段:

g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );

DrawPrimitive 接受第个参数是个标记它通知 Direct3D 绘制哪种类型物件(Primitive)本例程使用

D3DPT_TRIANGLELIST 标记指定为 3角形序列第 2个参数是第个顶点索引第 3个参数通知绘制物件数目本例子只画个 3角形这个值为 1

有关区别种类物件更多信息可见 SDK: 3-D Primitive

最后步是结束场景并立即将后背缓冲提交为前景缓冲这些写在以下代码片段中:

g_pd3dDevice->EndScene;

g_pd3dDevice->Present( NULL, NULL, NULL, NULL );

当后背缓冲被提交为前景缓冲后客户窗口将显示出个 3个点颜色各异 3角形

本指南已经指导你如何使用顶点构造几何外形了指南 3:使用矩阵 将介绍矩阵概念以及如何使用它们

指南 3:使用矩阵

本指南介绍矩阵概念及演示如何使用它们Vertices 例程通过呈递2D顶点画出了个 3角形然而在这个指南中你将通过顶点变换在 3-D 环境下工作矩阵和变换也同样用于设置摄影头和视口(Viewport)

在 Matrices 例程呈递几何物体的前它自定义 SetupMatrices 创建并设置用于演示 3-D 3角形矩阵变换作为代表 3种类型变换同时被设置到个 3-D 场景创建这些典型变换步骤如下表:

·第步:定义世界变换矩阵

·第 2步:定义观察变换矩阵

·第 3步:定义映射变换矩阵

注意:Matrices 举例路径为:

(SDK root)\\Samples\\Multimedia\\Direct3D\\Tutorials\\Tut03_Matrices.

创建这 3种变换顺序并不影响场景元素输出无论如何Direct3D 都使用以下顺序依次将矩阵作用于场景:(1) 世界(2) 观察(3) 映射

Matrices 工程举例代码几乎和 Vertices 工程代码相同该“使用矩阵”指南仅仅关注那些有关矩阵独特代码而不重复化 Direct3D处理 Microsoft Windows 消息演示以及清除有关这些工作信息请见 指南:创建设备

本指南使用自定义顶点格式和单个顶点缓冲区呈递几何模型有关更多有关选择自定义顶点类型以及执行顶点缓冲区信息见 指南 2:演示顶点

第步:定义世界变换矩阵(World Transformation Matrix)

世界变换矩阵定义了怎样转换、缩放、以及旋转 3-D 模拟空间中几何物体

以下代码片段为 Microsoft Direct3D 设备设置当前世界变换并且使 3角形绕 y-轴 旋转

各种设备接口知识

VGA输入接口:VGA 接口采用非对称分布的15pin 连接方式,其工作原理:是将显存内以数字格式存储的图像( 帧) 信号在RAMDAC 里经过模拟调制成 模拟高频信号,然后再输出到等离子成像,这样VGA信号在输入端(LED显示屏内) ,就不必像其它视频信号那样还要经过矩阵解码电路的换算。从前面的视频成像原理可知VGA的视频传输过程是最短的,所以VGA 接口拥有许多的优点,如无串扰无电路合成分离损耗等。 DVI输入接口:DVI接口主要用于与具有数字显示输出功能的计算机显卡相连接,显示计算机的RGB信号。DVI(Digital Visual Interface)数字显示接口,是由1998年9月,在Intel开发者论坛上成立的数字显示工作小组(Digital Display Working Group简称DDWG),所制定的数字显示接口标准。 DVI数字端子比标准VGA端子信号要好,数字接口保证了全部内容采用数字格式传输,保证了主机到监视器的传输过程中数据的完整性(无干扰信号引入),可以得到更清晰的图像。 标准视频输入(RCA)接口:也称AV 接口,通常都是成对的白色的音频接口和黄色的视频接口,它通常采用RCA(俗称莲花头)进行连接,使用时只需要将带莲花头的标准AV 线缆与相应接口连接起来即可。AV接口实现了音频和视频的分离传输,这就避免了因为音/视频混合干扰而导致的图像质量下降,但由于AV 接口传输的仍然是一种亮度/色度(Y/C)混合的视频信号,仍然需要显示设备对其进行亮/ 色分离和色度解码才能成像,这种先混合再分离的过程必然会造成色彩信号的损失,色度信号和亮度信号也会有很大的机会相互干扰从而影响最终输出的图像质量。AV还具有一定生命力,但由于它本身Y/C混合这一不可克服的缺点因此无法在一些追求视觉极限的场合中使用。 S视频输入:S-Video具体英文全称叫Separate Video,为了达到更好的视频效果,人们开始探求一种更快捷优秀清晰度更高的视频传输方式,这就是当前如日中天的S-Video(也称二分量视频接口),Separate Video 的意义就是将Video 信号分开传送,也就是在AV接口的基础上将色度信号C 和亮度信号Y进行分离,再分别以不同的通道进行传输,它出现并发展于上世纪90年代后期通常采用标准的4芯(不含音效) 或者扩展的7芯( 含音效)。带S-Video接口的显卡和视频设备( 譬如模拟视频采集/ 编辑卡电视机和准专业级监视器电视卡/电视盒及视 频投影设备等) 当前已经比较普遍,同AV 接口相比由于它不再进行Y/C混合传输因此也就无需再进行亮色分离和解码工作,而且使用各自独立的传输通道在很大程度上避免了视频设备内信号串扰而产生的图像失真,极大地提高了图像的清晰度,但S-Video 仍要将两路色差信号(Cr Cb)混合为一路色度信号C,进行传输然后再在显示设备内解码为Cb 和Cr 进行处理,这样多少仍会带来一定信号损失而产生失真(这种失真很小但在严格的广播级视频设备下进行测试时仍能发现) ,而且由于Cr Cb 的混合导致色度信号的带宽也有一定的限制,所以S -Video 虽然已经比较优秀但离完美还相去甚远,S-Video虽不是最好的,但考虑到目前的市场状况和综合成本等其它因素,它还是应用最普遍的视频接口。

各种接口图片

作为局域网的主要连接设备,以太网交换机成为应用普及最快的网络设备之一,同时,也是随着这种快速的发展,交换机的功能不断增强,随之而来则是交换机端口的更新换代以及各种特殊设备连接端口不断的添加到交换机上,这也使得交换机的接口类型变得非常丰富,为了让大家对这些接口有一个比较清晰的认识,我们根据资料特地整理了一篇交换机接口的文章: 1、RJ-45接口 这种接口就是我们现在最常见的网络设备接口,俗称“水晶头”,专业术语为RJ-45连接器,属于双绞线以太网接口类型。RJ-45插头只能沿固定方向插入,设有一个塑料弹片与RJ-45插槽卡住以防止脱落。 这种接口在10Base-T以太网、100Base-TX以太网、1000Base-TX 以太网中都可以使用,传输介质都是双绞线,不过根据带宽的不同对介质也有不同的要求,特别是1000Base-TX千兆以太网连接时,至少要使用超五类线,要保证稳定高速的话还要使用6类线。

2、SC光纤接口 SC光纤接口在100Base-TX以太网时代就已经得到了应用,因此当时称为100Base-FX(F是光纤单词fiber的缩写),不过当时由于性能并不比双绞线突出但是成本却较高,因此没有得到普及,现在业界大力推广千兆网络,SC光纤接口则重新受到重视。 光纤接口类型很多,SC光纤接口主要用于局网交换环境,在一些高性能千兆交换机和路由器上提供了这种接口,它与RJ-45接口看上去很相似,不过SC接口显得更扁些,其明显区别还是里面的触片,如果是8条细的铜触片,则是RJ-45接口,如果是一根铜柱则是SC 光纤接口。

3、FDDI接口 FDDI是目前成熟的LAN技术中传输速率最高的一种,具有定时令牌协议的特性,支持多种拓扑结构,传输媒体为光纤。 光纤分布式数据接口(FDDI)是由美国国家标准化组织(ANSI)制定的在光缆上发送数字信号的一组协议。FDDI 使用双环令牌,传输速率可以达到 100Mbps。 CCDI 是 FDDI 的一种变型,它采用双绞铜缆为传输介质,数据传输速率通常为 100Mbps。

第5章 GDI+图形设备接口加

第5章 GDI+ GDI+(Graphics Device Interface Plus 图形设备接口加)是Windows XP 和Windows Server 2003操作系统的图形子系统,也是.NET 框架的重要组成部分和窗体绘图的主要工具,负责在屏幕和打印机上绘制图形图像和显示信息。 顾名思义,GDI+是Windows 早期版本所提供的图形设备接口GDI 的后续版本。GDI+是一种应用程序编程接口(API),分别通过一套C++类和一套部署为托管代码的类来展现,这两套类分别被称为GDI+的“C++封装”和“托管类接口”。 GDI+不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为Windows 图形图像程序开发的主要工具。 本章将介绍GDI+的特点和新增功能,以及GDI+ API 的具体使用方法,包括二维矢量图形的绘制、图像处理的应用、以及文字的显示等。 由于本章内容较多,有些章节不作为基本要求,用*号表示的章节是可选的。 5.1 概述 GDI+与GDI 一样,都具有设备无关性。而且GDI+是建立在GDI 之上的一种高层接口,供Windows 应用程序和.NET 框架调用。参见下图: GDI+的体系结构 本节首先介绍GDI+的几个主要新增的特性及其功能,然后说明它给Windows 图形图像程序的开发模式带来的变化,最后给出一个代码实例,介绍如何在VC++中使用GDI+进行程序开发。 1.GDI+的功能 GDI+主要提供了以下三种功能:

1)二维矢量图形 与MFC中代表GDI的CDC和CGDIObject的诸派生类(CPen、CBrush、CFont等)类似,GDI+的Graphics等类也提供绘制各种二维矢量图形(如直线、折线、矩形、椭圆、多边形等)的功能。而且GDI+还增加了许多新的特性和功能,如无当前状态的绘图模式、含透明成分(α混色)的颜色类Color、图案笔、颜色可渐变的刷、贝塞尔和样条曲线、持久的路径、可伸缩的区域、功能强大的矩阵和变换等等。 与MFC类似,用户也可以使用GDI+提供的Metafile、MetafileHeader和MetaHeader类在图元文件中记录图形和图像的命令序列。 2)图像处理 与MFC类似,GDI+提供了Image、Bitmap和Metafile类,可用于显示、操作和保存位图。它们支持众多的图像文件格式,还可以进行多种图像处理操作。 3)文字显示版式 与MFC类似,GDI+也是使用各种字体、字号和样式来显示文本。GDI +为这种复杂任务提供了大量的支持,包括字体族类FontFamily、字体类Font和字体集类FontCollection及其两个派生类——InstalledFontCollection(已安装字体集)和PrivateFontCollection(专用字体集)等。GDI+中的新功能之一是提供了可增强字体清晰度的ClearType(清晰活字)文字处理技术,利用子像素来消除锯齿,可使文本在LCD 屏幕上呈现时显得比较平滑。 4)功能汇总 GDI+的C++封装包含54个类、12个函数、6类(226个)图像常量、55种枚举和19种结构。GDI+的托管类接口则包含大约60个类、50个枚举和8个结构。这两种封装中的Graphics类都是GDI+的核心功能,它是实际绘制直线、曲线、图形、图像和文本的类。通过这些类和接口可以实现: ●使用笔绘制线条和形状 ●使用刷填充形状 ●使用图像、位图和图元文件 ●α混合线条和填充 ●字体和文本 ●构造并绘制曲线 ●用颜色渐变的梯度刷填充形状 ●构造并绘制轨迹 ●变换 ●图形容器 ●区域 ●重新着色

基于AGG算法库的通用图形接口设计

基于AGG算法库的通用图形接口设计 鲁力 李欣 (华北计算技术研究所,北京,100083) 摘要: 随着计算机技术的发展和各类嵌入式设备的广泛使用,设计跨平台软件已经成为迫切的需要。图形接口在跨平台软件开发中扮演着重要的角色。文章对二维图形算法库AGG(Anti-Grain Geometry)进行介绍,并基于AGG设计实现了一套通用图形接口,在提供高质量的二维绘图效果的同时,消除了不同操作系统图形接口存在的差异,为各种应用系统提供统一的接口规范。 关键字: AGG(Anti-Grain Geometry),图形接口,反走样,亚像素精度 中文分类号:TP317.4文献标识码:A AGG (Anti-Grain Geometry) based Platform-Independent Graphics Interface Design Lu Li Li Xin (North China Institute of Computing Technology, Beijing 100083)Abstract: With the development of Computer Technology and the spreading of varieties of embedded equipments, the need to design platform-independent software has been urgent. The Graphics Interface never fails to play an important role in the platform-independent software development. This paper introduces the Anti-Grain Geometry Graphics Library and an AGG based Graphics Interface, which not only provides high quality 2D graphics but also enables programmers to ignore the various graphics interfaces of different operating systems by designing and implementing a set of standardized and unified ones. Key Words:AGG(Anti-Grain Geometry),Graphics Interface,Anti-Aliasing,Subpixel Accuracy 0引言 许多软件的设计与实现,都依赖于操作系统提供的图形接口。不同操作系统图形接口存在差异,为软件的跨平台设计提出了挑战。这种差异主要表现在三个方面:(1)接口在形式上的不一致性。 (2)对于图元(图形的最小组成和编辑单位[1])进行抽象和描述时的不统一。比如,windows平台下的GDI或GDI+把样条曲线,贝塞尔曲线作为图元进行描述,但某些操作系统并不支持这两种图元的实现。 (3)各操作系统图形接口的绘制效果存在差异。一些嵌入式操作系统的图形接口不能进行反走样处理,造成明显的锯齿效应,从而无法满足较高的图形显示需求(如:基于PDA 的移动GIS系统[2]) 因此,无论对接口形式还是图元,都需要进行统一的描述,并提供优美的绘制效果。 1 AGG算法库简介 1.1 概述 AGG是一个开源的二维图形引擎。它提供一套结合了亚像素(subpixel accuracy)技术与反走样(anti-aliasing)技术的图形算法,实现高效率、高质量的二维图形处理功能。 AGG采用C++和标准的C运行时函数(Standard C Runtime Function)进行编写。这赋予了AGG良好的跨平台能力。 AGG的另一个特点在于它极大的灵活性。其作者将它描述为“创建其它工具的工具” [3]。AGG提供一系列松耦合的算法,而且其所有类均采用模板(template)进行描述,开发者可以自由地组合、改写、替换其中部分或全部算法,以满足其具体的图形操作需求。 1.2 AGG的基本概念 1.2.1 AGG的层次结构 图1-1显示了AGG的层次结构,分别为:

图形设备接口DirectX 图形接口指南

图形设备接口:DirectX 图形接口指南 疯狂代码 https://www.360docs.net/doc/dd5007352.html,/ ?: http:/https://www.360docs.net/doc/dd5007352.html,/GameDevelopment/Article35957.html 译者申明: 这些指南是我在阅读 DirectX8.1 SDK 中逐步翻译出来对于初次接触 DirectX Graphics 编程者而言这应该是很好上手资料其实本人就是从这些指南开始深入 Direct3D8.1 ;由于这是本人第次翻译英文材料言语不通词不达意的处定很多些术语也译得很勉强请见谅 此外需要转载此文者请保留以下部分: ----------------------------------------------------------------------- DirectX图形接口指南 译者:In355Hz 电子邮箱: In355Hz@https://www.360docs.net/doc/dd5007352.html, ----------------------------------------------------------------------- DirectX 图形接口指南: (应用于 DirectX 8.1 版 C/C 编程) 本区域指南将介绍说明如何在 C/C 中使用 Microsoft Direct3D 和 Direct3DX 完成些普通工作这些工作总是被分解成若干个必要步骤在某些情况下为了使表达更清楚些步骤还被细分成几个子步骤 本区域提供指南有: · 指南:创建设备 · 指南 2:演示顶点 · 指南 3:使用矩阵 · 指南 4:创建和使用光源 · 指南 5:使用纹理映射

· 指南 6:使用Mesh模型 提示:指南中出现举例代码来自于每个指南具体提供路径里源文件 这些指南中源代码是用 C 写成如果使用C编译器你必须适当改变这些文件使它们能够编译通过最少你需要加入vtable 然后用它引用接口 包含在举例代码中些注解可能和来自 Microsoft Platform Software Development Kit (SDK) 中源代码区别这些改变仅仅为了简化表述并且只限于注解中这样能够防止举例行为被改变 指南:创建设备 为了使用 Microsoft Direct3D你首先需要创建个应用窗口并紧接着创建和化 Direct3D 对象你应该使用这些对象提供 COM 接口来操纵它们以及创建描绘个场景所必需其它对象本指南包含 CreateDevice 举例将例示并介绍说明以下几个工作:创建 Direct3D 设备并且绘制个简单蓝色屏幕 这个指南使用以下步骤:化 Direct3D绘制场景以及最后清理和关闭 ·步骤:创建个窗口 ·步骤 2:化 Direct3D ·步骤 3:处理系统消息 ·步骤 4:绘制和显示场景 ·步骤 5:关闭和清除

操作系统的命令口和图形口

实验2 操作系统(Windows)的命令口和图形口 一、实验目的: 使用计算机的用户一共有两类:脱机用户和联机用户。目前我们所见到的用户都是联机用户。 历史上操作系统留给脱机用户的接口只有一个,那就是作业控制语言(JCL),留给联机用户的接口一般有三种,它们是图形用户接口、命令用户接口和程序用户接口,俗称图形口、命令口和程序口。 其中命令接口和图形接口是操作系统留给终端用户使用的接口,而程序接口则是操作系统留给编程用户使用计算机资源的接口。 通过该实验,让学生从使用和设计操作系统这个大型的系统软件的角度,来初步认识操作系统留给联机用户的三大接口中的两个接口——命令口和图形口,在后面的实验三中我们再进一步体会操作系统留给用户的另一个接口——程序口。 二、实验环境:Windows操作系统 三、实验内容:分别用图形接口和命令接口完成下面要求的题目。 (一)用图形接口完成下面的任务,请给出操作过程和操作结果: 1.给出本机的系统日期和时间——如给出北京时间和加拿大时间等。

2.查看本机的硬件信息。(你就能知道你的机子硬件配置怎么样了) 3.给出本机的IP地址、子网掩码、默认网关和DNS服务器。 如果可能的话,你最好用两种以上的方法找到该信息(这是你经常要用到的查看和设置本机网络信息的地方)

4.查看一下本机都支持哪些服务?这些服务都启动了吗?

5.给本机换一个桌面、换一个屏幕保护图案、改变一下屏幕保护时间(如1分钟)试试。 6.执行一个用VB编制的可执行程序vbhello.exe(把v bhello.exe另外保存在D盘,后面还 会用到)。

图形显示设备简述

第二章图形显示设备简述 §1 图形显示设备 一般的计算机都配备了高分辨率的显示器、图形卡或集成的视频系统,还配备了支持图形用户界面的操作系统。图形已经成为了标准。 在计算机应用程序中,最常用的CRT(阴极射线管)显示技术有向量刷新和光栅扫描。 1、矢量刷新显示器 刷新式CRT使用短余辉的荧光粉,涂层必须靠每秒30至50次的电子速轰击,来保持屏幕图形不闪烁(重画画面)。除阴极射线管外,它需要一个显示文件,一个显示控制器。 显示文件:一个内存区,容纳绘制要显示的对象的指令;显示控制器:从显示文件中读取这些信息并把它转化为数字命令,并将其发送到CRT。 矢量刷新显示器 :(P19) 有时有控制栅极和加速阳极(P19)。 ⊿控制栅极:通过改变控制栅的电压来控制显示的光强。荧光涂层发射光的强度依赖轰击屏幕的电子数量,聚焦系统用来控制电子束,在轰击荧光屏时会聚到一个小点,否则由于电子互相排拆,电子束在靠近屏幕时会散开; ⊿加速阳极:带负电荷的自由电子,在高正电压作用下加速冲向荧光屏。 在高精度系统中,还使用附加的聚焦硬件,以保持电子束能聚焦到所有屏幕位置,否则电子束只能在屏幕中心较好地

聚焦,在屏幕边框时,所显示的图像变得模糊。 使用图形软件命令设定各个屏幕位置的亮度级。 ⊿二对偏转线圈(X轴水平偏转和Y轴垂直偏转):偏转线圈的产生电磁场作用于电子束,使轰击屏幕的电子束发生偏转。 ⊿ CRT的分辨率(resolution) resolution是可以无重叠显示的最多点数。电子束轰击荧光屏,形成一个亮点,亮点中心位置的亮度最大,并按正态分布向亮点的边缘衰减。这个分布依赖于CRT电子束横截面电子密度分布。 resolution常常简述为每个方向的总点数,但更精确的定义是在水平和垂直方向上每厘米可绘制的点数640*480、1024*768. 1280*1024高分辨率。 高清晰度系统(High-definition system) ⊿纵横比(aspect ratio) 在屏幕的二各方向上画相同长度的线段,二个方向点数的比值。(example chap2 pickCurve.prj) 2、光栅扫描显示器 一般使用的CRT图形监视器是基于电视技术的光栅扫描显示器。 在光栅扫描系统中,电子束横向扫描屏幕,一次一行,从顶到底顺次进行。当电子束横向沿每一行移动时,电子的强度不断变化,以建立亮点的图案。 1)图形信息存于刷新缓冲器(refresh buffer)或帧缓

多种数据接口简介及图示

多种接口简介及图示 VGA接口(D-Sub接口) (1) HDMI (3) RS-232接口 (3) YPbPr接口: (4) BNC接头 (4) S-VIDOE 接口 (7) VGA接口(D-Sub接口) VGA(Video Graphics Array)即视频图形阵列,640×480的分辨率。是IBM在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。 XGA (Extended Graphics Array,扩展图形阵列),XGA较新的版本XGA-2以真彩色提供800×600象素的分辨率或以65536种色彩提供1024×768象素的分辨率。 UVGA(Ultra Video Graphics Array,极速扩展图形阵列):支持最大1600×1200分辨率。HVGA,Half-size VGA,意思是VGA分辨率的一半,为480×320像素,宽高比为3:2。目前这种分辨率的屏幕大多用于PDA。 QVGA(Quarter VGA)。顾名思义,QVGA即VGA分辨率的四分之一,亦即分辨率是240×320像素。 SVGA(Super Video Graphics Array,高级视频图形阵列):VGA由于良好的性能迅速开始流行,厂商们纷纷在VGA基础上加以扩充,如将显存提高至1M并使其支持更高分辨率如800X600或1024X768。 SXGA(Super Extended Graphics Array,高级扩展图形阵列):一个分辨率为1280x1024的既成事实显示标准。这种被广泛采用的显示标准的纵横比是5:4而不是常见的4:3。 SXGA+(Super Extended Graphics Array):作为SXGA的一种扩展,SXGA+是一种专门为笔记本设计的屏幕。其显示分辨率为1400×1050。 WVGA,Wide VGA,分辨率分为854×480像素和800×480像素两种。由于目前很多网页的宽度都是800像素,所以这种分辨率通常用于PDA或者高端智能手机,方便用户浏览网页。夏普公司的手机大多也是采用WVGA级别分辨率的屏幕。 WXGA(Wide Extended Graphics Array,宽屏扩展图形阵列):作为普通XGA屏幕的宽屏版本,WXGA采用16:10的横宽比例来扩大屏幕的尺寸。其最大显示分辨率为1280×800。WXGA+(Wide Extended Graphics Array):这是一种WXGA的的扩展,其最大显示分辨率为1280×854。由于其横宽比例为15:10而非标准宽屏的16:10。所以只有少部分屏幕尺寸在15.2英寸的笔记本电脑采用这种产品。 WSXGA(Wide Super Extended Graphics Array,宽屏超级扩展图形阵列):其显示分辨率为1680×1050,宽高比为16:9。除了大多数15英寸以上的宽屏笔记本以外,目前较为流行的大尺寸LCD-TV也都采用了这种类型的产品。

相关文档
最新文档