DirectX9 SDK Samples(5) Tutorial 5: Using Texture Maps
来源:互联网 发布:围棋比赛编排软件 编辑:程序博客网 时间:2024/06/10 16:03
Step 1 - Defining a Custom Vertex Format
// A structure for our custom vertex type. Texture coordinates were added.struct CUSTOMVERTEX{ D3DXVECTOR3 position; // The position D3DCOLOR color; // The color#ifndef SHOW_HOW_TO_USE_TCI FLOAT tu, tv; // The texture coordinates#endif};// Custom flexible vertex format (FVF), which describes custom vertex structure#ifdef SHOW_HOW_TO_USE_TCI#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)#else#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)#endif设定FVF。
Step 2 - Initializing Screen Geometry
if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, "Banana.bmp",&g_pTexture ) ) )return E_FAIL;首先需要载入纹理。
for( DWORD i=0; i<50; i++ ){ FLOAT theta = (2*D3DX_PI*i)/(50-1); pVertices[2*i+0].position = D3DXVECTOR3( sinf(theta),-1.0f, cosf(theta) ); pVertices[2*i+0].color = 0xffffffff;#ifndef SHOW_HOW_TO_USE_TCI pVertices[2*i+0].tu = ((FLOAT)i)/(50-1); pVertices[2*i+0].tv = 1.0f;#endif pVertices[2*i+1].position = D3DXVECTOR3( sinf(theta), 1.0f, cosf(theta) ); pVertices[2*i+1].color = 0xff808080;#ifndef SHOW_HOW_TO_USE_TCI pVertices[2*i+1].tu = ((FLOAT)i)/(50-1); pVertices[2*i+1].tv = 0.0f;#endif}然后在创建圆柱的代码中加入纹理坐标。
Step 3 - Rendering the Scene
g_pd3dDevice->SetTexture( 0, g_pTexture );先设定纹理为第0层,固定管线中最多可以8层,也就是说序号为0到7。
接下来的一大段代码是关于设定纹理和纹理状态。
// Setup texture. Using textures introduces the texture stage states, which // govern how textures get blended together (in the case of multiple // textures) and lighting information. In this case, you are modulating // (blending) your texture with the diffuse color of the vertices. g_pd3dDevice->SetTexture( 0, g_pTexture ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE );#ifdef SHOW_HOW_TO_USE_TCI // Note: To use Direct3D texture coordinate generation, use the stage state // D3DTSS_TEXCOORDINDEX, as shown below. In this example, you are using // the position of the vertex in camera space to generate texture // coordinates. The tex coord index (TCI) parameters are passed into a // texture transform, which is a 4x4 matrix that transforms the x,y,z // TCI coordinates into tu, tv texture coordinates. // In this example, the texture matrix is set up to // transform the texture from (-1,+1) position coordinates to (0,1) // texture coordinate space: // tu = 0.5*x + 0.5 // tv = -0.5*y + 0.5 D3DXMATRIXA16 mat; mat._11 = 0.25f; mat._12 = 0.00f; mat._13 = 0.00f; mat._14 = 0.00f; mat._21 = 0.00f; mat._22 =-0.25f; mat._23 = 0.00f; mat._24 = 0.00f; mat._31 = 0.00f; mat._32 = 0.00f; mat._33 = 1.00f; mat._34 = 0.00f; mat._41 = 0.50f; mat._42 = 0.50f; mat._43 = 0.00f; mat._44 = 1.00f; g_pd3dDevice->SetTransform( D3DTS_TEXTURE0, &mat ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2 ); g_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION );#endif老实说,我很奇怪为什么设置这么多参数,因为龙书中很多都用了默认参数。这里居然没有设定MIN、MAX和MIP,这我也感到相当奇怪。
宏定义中的代码是用到了TCI,我觉得平常是用不到了呃。
- DirectX9 SDK Samples(5) Tutorial 5: Using Texture Maps
- DirectX9 SDK Samples(3) Tutorial 3: Using Matrices
- DirectX9 SDK Samples(6) Tutorial 6: Using Meshes
- DirectX9 SDK Samples(4) Tutorial 4: Lights
- DirectX9 SDK Samples(13) Pick
- DirectX9 SDK Samples(19) AntiAlias
- DirectX9 SDK Samples(22) ParallaxOcclusionMapping
- DirectX9 SDK Samples(25) DepthOfField
- DirectX9 SDK Samples(2) Tutorial2-Rendering Vertices
- DirectX9 SDK Samples(7) EmptyProject Sample
- DirectX9 SDK Samples(8) BasicHLSL Sample(1)
- DirectX9 SDK Samples(8) BasicHLSL Sample(2)
- DirectX9 SDK Samples(9) Text3D Sample
- DirectX9 SDK Samples(10) HLSLwithoutEffects Sample
- DirectX9 SDK Samples(11) CompiledEffect Sample
- DirectX9 SDK Samples(12) CustomUI Sample
- DirectX9 SDK Samples(14) EffectParam Sample(1)
- DirectX9 SDK Samples(14) EffectParam Sample(2)
- 反射ReflectTester
- CISCO DHCP配置全程详解
- 网络知识问与答
- 本人原创作品以及工程源码
- 内部类(一)
- DirectX9 SDK Samples(5) Tutorial 5: Using Texture Maps
- 反射
- 异常:Error: executeQueryForObject returned too many results. 解决方法
- 内部类(二)
- careercup4.2
- 一日一点RakNet(41)--Lobby2Client_360
- 黑客是如何进行IP欺骗的
- CvMat操作
- 异常一(Exception)