Direct3D10教程7纹理映射和常量缓存.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE5 / NUMPAGES5 Direct3D 10教程7:纹理映射和常量缓存 概览 在前面的教程中我们介绍了光照,现在我们将在立方体上添加纹理。我们还会介绍常量缓存的概念,以及如何通过最小化带宽的方式利用常量缓存加速处理过程。 这个教程介绍如何在立方体上施加纹理。 这个教程包含了Direct3D 10中的基本概念,以后的教程通过介绍DXUT、网格加载和shader的示例扩展这些概念。 源代码 (SDK root)\Samples\C++\Direct3D10\Tutorials\Tutorial07 纹理映射 纹理映射表示将一张2D图像映射到3D几何体上。我们可以把它想象成包装一个礼物盒,即将一张包装纸覆盖在一个盒子上。要做到这点,我们需要指定几何体表面上的点是如何对应2D图像的。 诀窍是将正确地将纹理对齐到模型的坐标上。对于复杂的模型,很难手动确定纹理的坐标,因此,3D建模工具通常会输出带有纹理坐标信息的模型。因为本示例是??个立方体,所以很容易确定匹配纹理的坐标。纹理坐标是在顶点中定义的,然后会在表面的单个像素间进行插值。 从纹理创建一个Shader Resource 纹理是一张从文件获取的2D图像,用于创建一个shader资源视图(shader-resource view),因此它可以从shader中读取。 hr = D3DX10CreateShaderResourceViewFromFile( g_pd3dDevice, Lseafloor.dds, NULL, NULL, g_pTextureRV, NULL ); 定义坐标 我们必须首先定义立方体每个顶点的纹理坐标才能将图像映射到立方体上。因为图像尺寸不定,因此使用的坐标系统被调整到[0, 1]区间。纹理的左上角对应(0,0),右下角对应(1,1)。 本例中,我们让整个纹理覆盖在立方体的每个面上。你也可以将纹理展开到所有六个面,虽然这样做的话坐标的定义会变得难一些,纹理可能会变形。 首先,我们需要更新结构体使之包含纹理坐标。 struct SimpleVertex { D3DXVECTOR3 Pos; // Position D3DXVECTOR2 Tex; // Texture Coordinate }; 然后,更新输入结构使之也包含坐标信息。 // Define the input layout D3D10_INPUT_ELEMENT_DESC layout[] = { { LPOSITION, 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 }, { LTEXCOORD, 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D10_INPUT_PER_VERTEX_DATA, 0 }, }; 因为输入结构发生了变化,对应的顶点着色器也需进行调整。 struct VS_INPUT { float4 Pos : POSITION; float2 Tex : TEXCOORD; }; 最后,就可以在顶点中包含纹理坐标了。第二个参数类型为D3DXVECTOR2,包含了纹理坐标。立方体的每个顶点对应纹理的一个角,这样就创建了一个非常简单的映射,每个顶点的纹理坐标为(0,0)或(0,1)或(1,0)或(1,1)。 // Create vertex buffer SimpleVertex vertices[] = { { D3DXVECTOR3( -1.0f, 1.0f, -1.0f ), D3DXVECTOR2( 0.0f, 0.0f ) }, { D3DXVECTOR3( 1.0f, 1.0f, -1.0f ), D3DXVECTOR2( 1.0f, 0.0f ) }, { D3DXVECTOR3( 1.0f, 1.0f, 1.0f ), D3DXVECTOR2( 1.0f, 1.0f ) }, { D3DXVECTOR3( -1.0f, 1.0f, 1.0f ), D3DXVECTOR2( 0.0f, 1.0f ) }, { D3DXVECTOR3( -1.0f, -1.0f, -1.0f ), D3DXVECTOR2( 0.0f, 0.0f ) }, { D3DXVECTOR3( 1.0f, -1.0f, -1.0f ), D3DXVECTOR2( 1.0f, 0.0f ) }, { D3DXVECTOR3( 1.0f, -1.0f, 1.0f ),

您可能关注的文档

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档