DirectX笔记.docx

上传人:b****5 文档编号:3572969 上传时间:2022-11-24 格式:DOCX 页数:10 大小:20.02KB
下载 相关 举报
DirectX笔记.docx_第1页
第1页 / 共10页
DirectX笔记.docx_第2页
第2页 / 共10页
DirectX笔记.docx_第3页
第3页 / 共10页
DirectX笔记.docx_第4页
第4页 / 共10页
DirectX笔记.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

DirectX笔记.docx

《DirectX笔记.docx》由会员分享,可在线阅读,更多相关《DirectX笔记.docx(10页珍藏版)》请在冰豆网上搜索。

DirectX笔记.docx

DirectX笔记

纹理模式

重叠纹理寻址模式

使用重叠纹理寻址模式时,Direct3D会在每个整数纹理坐标连接处自动重复纹理。

下列示例代码设置纹理层0的u,v方向寻址模式为重叠纹理寻址。

g_device->SetSamplerState(0,D3DSAMP_ADDRESSU,D3DTADDRESS_WRAP);

g_device->SetSamplerState(0,D3DSAMP_ADDRESSV,D3DTADDRESS_WRAP);

重叠纹理寻址是Direct3D中缺省的寻址模式,也是三维系统中最常用的寻址模式之一。

镜像纹理寻址模式

使用镜像纹理寻址模式时,Direct3D会在每个整数纹理坐标连接处自动复制并翻转纹理。

下面的示例代码设置纹理层0的u、v方向寻址模式为镜像纹理寻址模式:

g_device->SetSamplerState(0,D3DSAMP_ADDRESSU,D3DTADDRESS_MIRROR);

g_device->SetSamplerState(0,D3DSAMP_ADDRESSV,D3DTADDRESS_MIRROR);

夹取纹理寻址模式

夹取纹理寻址模式将纹理坐标夹取在[0.0,1.0]范围之内。

也就是说,它将纹理复制一遍,然后将纹理边缘像素的颜色延伸。

下面的示例代码设置纹理层0的u、v方向寻址模式为夹取纹理寻址模式:

g_device->SetSamplerState(0,D3DSAMP_ADDRESSU,D3DTADDRESS_CLAMP);

g_device->SetSamplerState(0,D3DSAMP_ADDRESSV,D3DTADDRESS_CLAMP);

边框颜色纹理寻址模式

边框颜色纹理寻址模式用枚举类型D3DTEXTUREADDRESS的成员D3DTADDRESS_BORDER指定,当纹理坐标超出[0.0,1.0]范围时,Direct3D使用边框颜色代替纹理颜色。

下面的示例代码指定边框颜色为红色,并设置纹理层0的u、v方向寻址模式为边框颜色纹理寻址模式。

g_device->SetSamplerState(0,D3DSAMP_BORDERCOLOR,0xFFFF0000);

g_device->SetSamplerState(0,D3DSAMP_ADDRESSU,D3DTADDRESS_BORDER);

g_device->SetSamplerState(0,D3DSAMP_ADDRESSV,D3DTADDRESS_BORDER);

纹理过滤:

通过给定的uv坐标从纹理贴图中获得图素的一种方法。

为了抗锯齿,D3D中采用了3种技术来实现纹理过滤,它们分别是最近点采样,线性纹理过滤,各向异性(anisotropic)纹理过滤。

而现在游戏中看到的图像高级选项中,一般都有点采样、双线过滤(即D3D的线性纹理过滤),三线过滤(即D3D中的线性过滤加上mipmap),以及各向异性过滤。

点采样设置方式:

将纹理坐标对齐到最接近的整数,再将那个位于整数坐标上的纹理像素作为最终的颜色。

缺点:

容易在图像边界上造成错误;优点:

快。

g_device->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_POINT);

g_device->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_POINT);

g_device->SetSamplerState(0,D3DSAMP_MIPFILTER,D3DTEXF_POINT);

g_device->SetSamplerState(0,D3DSAMP_MAXMIPLEVEL,16);

或者 g_device->SetSamplerState(0,D3DSAMP_MIPFILTER, D3DTEXF_NONE);

双线纹理过滤(即D3D的线性纹理过滤):

计算相对于采样点最近的4个图素(上下左右4个点)的平均值。

缺点:

有各项异性失真可能。

g_device->SetSamplerState(0,D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);

g_device->SetSamplerState(0,D3DSAMP_MINFILTER, D3DTEXF_LINEAR);

g_device->SetSamplerState(0,D3DSAMP_MIPFILTER, D3DTEXF_POINT);

g_device->SetSamplerState(0,D3DSAMP_MAXMIPLEVEL,16);

三线过滤(即D3D中的线性过滤加上mipmap(mipmap就是指多级渐进形纹理))

对于每个像素,三线过滤会先选择两张最接近的mipmap,将它们双线过滤为两张理想大小的mipmap,然后根据理想的mip级组合这两张过滤后的mipmap中的对应像素。

缺点:

有各项异性失真可能。

mipmap:

由一系列纹理组成,其中每张纹理的高宽都是前一级高宽的一半。

D3D在渲染时会自动挑选出一个图素与像素的比值最接近于1的mip层级。

g_device->SetSamplerState(0,D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);

g_device->SetSamplerState(0,D3DSAMP_MINFILTER, D3DTEXF_LINEAR);

g_device->SetSamplerState(0,D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

g_device->SetSamplerState(0,D3DSAMP_MAXMIPLEVEL,16);

各向异性过滤:

根据屏幕像素的伸张度来测量各项异性,再将屏幕像素反向映射到纹理空间中。

效果:

在非水平的渲染时要比三线过滤更加锐化。

g_device->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_ANISOTROPIC);

g_device->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_ANISOTROPIC);

g_device->SetSamplerState(0,D3DSAMP_MAXANISOTROPY,4);

设置多级渐进纹理过滤方式:

g_device->SetSamplerState(0,D3DSAMP_MIPFILTER,D3DTEXF_LINEAR);

第一个参数设为纹理层序号;第二个参数设为D3DSAMP_MIPFILTER表示多级渐进纹理过滤;第三个参数设为在相邻纹理级之间的过滤方式:

如果将第三个参数设为D3DTEXF_NONE,那么就会一直使用最高一级的纹理,即禁用多级渐进纹理过滤;如果将其设为D3DTEXF_POINT,就会只使用与图元大小最匹配的一级纹理;如果将其设为D3DTEXF_LINEAR,Direct3D就将与图元大小最匹配的两级纹理以线性方式混合。

设置实际渲染时纹理过滤的最大级数:

g_device->SetSamplerState(0,D3DSAMP_MAXMIPLEVEL,16);

第二个参数设为D3DSAMP_MAXMIPLEVEL,第三个参数设为实际渲染时纹理过滤的最大级数。

 

键盘控制

附:

VK_LBUTTON        鼠标左键               0x01

VK_RBUTTON        鼠标右键               0x02

VK_CANCEL         Ctrl+Break             0x03

VK_MBUTTON        鼠标中键               0x04

VK_BACK          Backspace键      0x08

VK_TAB          Tab键                0x09

VK_RETURN         回车键                0x0D

VK_SHIFT         Shift键               0x10

VK_CONTROL        Ctrl键                0x11

VK_MENU          Alt键                0x12

VK_PAUSE         Pause键               0x13

VK_CAPITAL        CapsLock键             0x14

VK_ESCAPE         Esc键                0x1B

VK_SPACE         空格键        0x20

VK_PRIOR         PageUp键              0x21

VK_NEXT         PageDown键             0x22

VK_END          End键                0x23

VK_HOME          Home键                0x24

VK_LEFT          左箭头键               0x25

VK_UP          上箭头键               0x26

VK_RIGHT         右箭头键               0x27

VK_DOWN          下箭头键               0x28

VK_SNAPSHOT       PrintScreen键           0x2C

VK_Insert         Insert键              0x2D

VK_Delete        Delete键               0x2E

'0'–'9'        数字0-9              0x30-0x39

'A'–'Z'        字母A-Z              0x41-0x5A

VK_LWIN          左WinKey(104键盘才有)        0x5B

VK_RWIN          右WinKey(104键盘才有)        0x5C

VK_APPS          AppsKey(104键盘才有)         0x5D

VK_NUMPAD(0-9)     小键盘0-9键             0x60-0x69

VK_F1-VK_F24      功能键F1–F24           0x70-0x87

VK_NUMLOCK        NumLock键              0x90

VK_SCROLL        ScrollLock键             0x91

 

颜色设置

函数:

D3DColorARGB

说明:

返回一个ARGB格式的Long类型颜色值

用法:

Se=D3DColorARGB(a,r,g,b)

参数:

aAsInteger a通道,即alpha通道,指定了颜色的透明度。

0最大,255最小

   rAsInteger 红色分量,0到255

   gAsInteger 绿色分量,0到255

   bAsInteger 蓝色分量,0到255

函数:

D3DColorMake

说明:

返回一个ARGB格式的Long类型颜色值

用法:

Se=D3DColorMake(r,g,b,a)

参数:

rAsSingle 红色分量,用百分比表示的值,-1到1

   gAsSingle 绿色分量,用百分比表示的值,-1到1

   bAsSingle 蓝色分量,用百分比表示的值,-1到1

   aAsSingle a通道,用百分比表示的值,-1到1

注意:

D3DColorMake与D3DColorARGB参数的前后位置、参数类型是不同的。

函数:

D3DColorRGBA

说明:

返回一个ARGB格式的Long类型颜色值

用法:

Se=D3DColorRGBA(r,g,b,a)

参数:

rAsInteger 红色分量,用百分比表示的值,0到255

   gAsInteger 绿色分量,用百分比表示的值,0到255

   bAsInteger 蓝色分量,用百分比表示的值,0到255

   aAsInteger a通道,用百分比表示的值,0到255

函数:

D3DColorXRGB

说明:

返回一个xRGB格式的Long类型颜色值(负值),没有a通道

用法:

Se=D3DColorXRGB(r,g,b)

参数:

rAsInteger 红色分量,用百分比表示的值,0到255

   gAsInteger 绿色分量,用百分比表示的值,0到255

   bAsInteger 蓝色分量,用百分比表示的值,0到255

说明:

D3DColorXRGB(r,g,b)等同于RGB(b,g,r)-&HFFFFFF-1

D3D的颜色有两种表示法:

一、D3DColorValue结构表示法

DimSeD3DAsD3DColorValue

SeD3D有以下4个元素:

SeD3D.RAsSingle 红色分量,用百分比表示的值,-1到1

SeD3D.GAsSingle 绿色分量,用百分比表示的值,-1到1

SeD3D.BAsSingle 蓝色分量,用百分比表示的值,-1到1

SeD3D.AAsSingle 透明度,用百分比表示的值,-1到1

D3D许多对象的属性都是这种表示法,如ambient、diffuse

二、另一种是ARGB格式的Long类型表示法,这与VB表示法类似。

VB颜色型如:

&H010203,等同于函数RGB(3,2,1)的返回值,其中:

1-2位(01)表示b通道

3-4位(02)表示g通道

5-6位(03)表示r通道

ARGB颜色型如:

&H01020304,其中:

1-2位(01)表示a通道

3-4位(02)表示r通道

5-6位(03)表示g通道

7-8位(04)表示b通道

因此,下面几个语句的效果完全一样,Long值都是270544960:

DimAAsLong,RAsLong,GAsLong,BAsLong

A=&H10:

R=&H20:

G=&H30:

B=&H40

s0=&H10203040'270544960

s1=D3DColorARGB(A,R,G,B)

s2=D3DColorMake(R/255,G/255,B/255,A/255)

s3=D3DColorRGBA(R,G,B,A)

 

窗口类结构体WNDCLASSEX介绍:

一、结构体原型:

typedefstruct

{

UINTcbSize;

UINTstyle;

WNDPROClpfnWndProc;

intcbClsExtra;

intcbWndExtra;

HINSTANCEhInstance;

HICONhIcon;

HCURSORhCursor;

HBRUSHhbrBackground;

LPCTSTRlpszMenuName;

LPCTSTRlpszClassName;

HICONhIconSm;

}WNDCLASSEX,*PWNDCLASSEX;

二、成员介绍

1.cbSizeWNDCLASSEX的大小。

在调用GetClassInfoEx前必须要先设置它值。

我们可以用sizeof(WNDCLASSEX)来获得准确的值。

2.style窗口类的样式,它的值可以是窗口样式值的任意组合。

可以有以下的值:

Constant/value

Description

CS_BYTEALIGNCLIENT0x1000

Alignsthewindow'sclientareaonabyteboundary(inthexdirection).Thisstyleaffectsthewidthofthewindowanditshorizontalplacementonthedisplay.

CS_BYTEALIGNWINDOW0x2000

Alignsthewindowonabyteboundary(inthexdirection).Thisstyleaffectsthewidthofthewindowanditshorizontalplacementonthedisplay.

CS_CLASSDC0x0040

Allocatesonedevicecontexttobesharedbyallwindowsintheclass.Becausewindowclassesareprocessspecific,itispossibleformultiplethreadsofanapplicationtocreateawindowofthesameclass.Itisalsopossibleforthethreadstoattempttousethedevicecontextsimultaneously.Whenthishappens,thesystemallowsonlyonethreadtosuccessfullyfinishitsdrawingoperation.

CS_DBLCLKS0x0008

Sendsadouble-clickmessagetothewindowprocedurewhentheuserdouble-clicksthemousewhilethecursoriswithinawindowbelongingtotheclass.

CS_DROPSHADOW0x00020000

Enablesthedropshadoweffectonawindow.TheeffectisturnedonandoffthroughSPI_SETDROPSHADOW.Typically,thisisenabledforsmall,short-livedwindowssuchasmenustoemphasizetheirZorderrelationshiptootherwindows.

CS_GLOBALCLASS0x4000

Indicatesthatthewindowclassisanapplicationglobalclass.Formoreinformation,seethe"ApplicationGlobalClasses"sectionofAboutWindowClasses.

CS_HREDRAW0x0002

Redrawstheentirewindowifamovementorsizeadjustmentchangesthewidthoftheclientarea.

CS_NOCLOSE0x0200

DisablesCloseonthewindowmenu.

CS_OWNDC0x0020

Allocatesauniquedevicecontextforeachwindowintheclass.

CS_PARENTDC0x0080

Setstheclippingrectangleofthechildwindowtothatoftheparentwindowsothatthechildcandrawontheparent.AwindowwiththeCS_PARENTDCstylebitreceivesaregulardevicecontextfromthesystem'scacheofdevicecontexts.Itdoesnotgivethechildtheparent'sdevicecontextordevicecontextsettings.SpecifyingCS_PARENTDCenhancesanapplication'sperformance.

CS_SAVEBITS0x0800

Saves,asabitmap,theportionofthescreenimageobscuredbyawindowofthisclass.Whenthewindowisremoved,thesystemusesthesavedbitmaptorestorethescreenimage,includingotherwindowsthatwereobscured.Therefore,thesystemdoesnotsendWM_PAINTmessagestowindowsthatwereobscuredifthememoryusedbythebitmaphasnotbeendiscardedandifotherscreenactionshavenotinvalidatedthestoredimage.

Thisstyleisusefulforsmallwindows(forexample,menusordialogboxes)thataredisplayedbrieflyandthenremovedbeforeotherscreenactivitytakesplace.Thisstyleincreasesthetimerequiredtodisplaythewindow,becausethesystemmustfirstallocatememorytostorethebitmap.

CS_VREDRAW0x0001

Redrawstheentirewindowifamovementorsizeadjustmentchangestheheightoftheclient

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1