织梦CMS - 轻松建站从此开始!

罗索

HLSL编程点滴积累

落鹤生 发布于 2011-01-21 13:15 点击:次 
下面是自己在学习HLSL编程过程中的一些笔记
TAG:

下面是自己在学习HLSL编程过程中的一些笔记:

1.顶点声明时D3DVERTEXELEMENT9结构体中UsageIndex字段用于标识多个相同用途的顶点向量。比如如下声明:

 

  1. D3DVERTEXELEMENT9 MorphMeshDecl[] = 
  2.  { 
  3.    //1st stream is for source mesh - position, normal, texcoord 
  4.    { 0,  0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, 
  5.    { 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL,   0 }, 
  6.    { 0, 24, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, 
  7.  
  8.    //2nd stream is for target mesh - position, normal 
  9.    { 1,  0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 1 }, 
  10.    { 1, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL,   1 }, 
  11.    D3DDECL_END() 
  12.  }; 

在第一个数据流中已经有了D3DDECLUSAGE_POSITION和D3DDECLUSAGE_NORMAL,在第二个数据流中这两个相同用途分量的索引就应该在前面基础上加一,注意这个值的范围是0~15

2.Texture和Surface区别:两者都指定了显存中(使用D3DPOOL_SYSTEM创建的位于系统内存中)一块连续的空间,对于一个使用D3DXCreateTexture()接口创建出来的LPDIRECT3DTEXTURE9指针来说(比如pTexture),与其对应的Surface可以通过

pTexture->GetSurfaceLevel( 0, &pSurface );(其中pSurface为IDirect3DSurface9指针),由于D3D中无法直接对Texture进行写操作,所以只能通过对与其相关联的Surface进行写操作来实现,例如可以使用下面两个接口对Surface进行操作:

  1. HRESULT UpdateSurface( 
  2.   IDirect3DSurface9* pSourceSurface, 
  3.   CONST RECT* pSourceRect, 
  4.   IDirect3DSurface9* pDestinationSurface, 
  5.   CONST POINT* pDestinationPoint 
  6. ); 

不过使用该接口时需要注意,pSourceSurface必须是系统内存,pDestinationSurface必须是显存。

  1. HRESULT StretchRect( 
  2.   IDirect3DSurface9 * pSourceSurface, 
  3.   CONST RECT * pSourceRect, 
  4.   IDirect3DSurface9 * pDestSurface, 
  5.   CONST RECT * pDestRect, 
  6.   D3DTEXTUREFILTERTYPE Filter 
  7. ); 

注意该接口中的pSourceSurface和pDestSurface必须是显存。

3.D3DXCompileShaderFromFile()函数返回E_FAIL原因,在程序中使用如下代码来编译shader:

  1. hr = D3DXCompileShaderFromFile( 
  2.   "ps_multitex.txt"
  3.   0, 
  4.   0, 
  5.   "Main"
  6.   "ps_3_0"
  7.   D3DXSHADER_DEBUG | D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY, 
  8.   &shader, 
  9.   &errorBuffer, 
  10.   &MultiTexCT); 

环境为VS2008+DirectX2009,调试时发现hr总是返回E_FAIL,但是通过Direct3D自带的控制台使用fxc工具编译时能够编译成功,最后发现是由于该函数传递shader源文件时需要绝对路径,将上述函数中"ps_multitex.txt"修改为"D:\\ps_multitex.txt"即可

(rabbit729)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201101/10799.html]
本文出处:CSDN博客 作者:rabbit729
顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容