DirectX与HLSL
huazai434
菜鸟,爱折腾
展开
-
纹理映射(1)
一,纹理坐标系统。 坐标的范围为[0,1] u坐标水平向右,v坐标水平向下。二,纹理过滤。分三种模式:nearest point sampling 取最近的纹素颜色值。linear filtering 取屏幕像素周围的2*2个纹素求得颜色值。anisotropic filtering 效果最好,也最耗性能,使用该法需指定MAXANISOTROPY的值,值越大效果越好。原创 2010-05-28 23:44:00 · 1251 阅读 · 0 评论 -
一个未解决的HLSH编译错误,等待解决。(已解决:))
最简单的shader了,模拟水面的波动,不过总出现一条奇怪的错误,“NaN and infinity not allowed in shader model".调试了好几天也没解决,先放下,继续往后看,等待以后解决了。龙书。第九章课后习题六。补充:总算找到错误了,原来是变量初始化的时候没有用构造函数。原创 2010-05-28 19:56:00 · 934 阅读 · 0 评论 -
hlsl语法规则小结
<br />1.static的用法<br />在shader中使用static前缀和C++中是有区别的。在shader中,若在全局变量的前面加static修饰,说明该变量只能在shader中可见,在程序中是不可见的,并且这个变量可以在shader中进行更改。若在函数内的变量前面加static修饰,用法跟c++相同。<br />2.关于变量的初始化和赋值。<br />这个与c++不同,shader中变量的初始化和赋值,需要用构造函数,形式上为类型名();<br />例如:float2 tex=float2(0原创 2010-05-31 14:04:00 · 1132 阅读 · 0 评论 -
混合 blending
一,默认的混合方程。outpixelcolor=sourcepixelcolor⊕sourceblendfactor+destpixelcolor⊕destblendfactor;其中,⊕代表对应元素分别相乘。source代表正在渲染的片元,dest代表后台缓存中的片元。sourceblendfactor越大,物体透明度越小。二,使用混合时必须遵守的规则。先画不透明物体,再画透明物体。多个透明物体按照离视点由远及近的顺序渲染。可通过视空间中的z值排列顺序。三,默认情况下混合是关闭的,因为其计算开销比较大。因原创 2010-05-31 23:15:00 · 868 阅读 · 0 评论 -
立方图纹理与环境贴图
一,立方图纹理。立方图纹理是一种三维纹理。其纹理坐标是3D的。该坐标的实质是一个由立方体中心发出的向量。该向量会与四周的六个贴图之一相交,交点即为对应的纹素。从本质上讲,立方图纹理是6个2D纹理,具体地讲,对于坐标(-3,-2,1),由于x坐标绝对值最大,因此向量指向-x方向的那个贴图。y和z坐标转换到(0,1)后,即是-x方向上的2D纹理的坐标值。立方图纹理的操作与2D纹理基本相同,唯一的区别是tex2D改为texCUBE。二,环境贴图。立方图纹理的主要作用之一是环境贴图。许多物体都具有部分的镜面效果,如原创 2010-06-04 23:41:00 · 4035 阅读 · 0 评论 -
法线贴图
一,法线贴图实际上是一张纹理图,但纹理中存储的并不是颜色值,而是法向量坐标。这项技术的主要目的是实现物体表面的粗糙细节。二,法向量在纹理中的存储形式。对于24位纹理格式,r g b 三个元素中分别存储了法向量的三个坐标值。然而,法向量三个坐标值 的取值范围均为(-1.1),而纹理格式中rgb分量的范围是(0,255),因此我们必须做相应的变换。变换方程如下:f(x)=(0.5x+0.5)*255当我们从纹理文件中读取纹素值后,我们便需要将其从(0,255)转换成(-1,1)。由于tex2D函数返回值范围是(原创 2010-06-05 23:59:00 · 5292 阅读 · 0 评论 -
移位贴图 Displacement Mapping
说明:该技术需要VS3.0的支持!!!一,移位贴图类似于地形渲染。不过由于移位纹理可以做成动态的,因此,该技术可以用来模拟波涛滚滚,起伏不平的海面。二,类似于法线贴图,移位贴图的每一个纹素中存储了一个向量,这个向量代表了对应顶点的位移。注意,此处的纹素并不是与像素一一对应,而是与顶点一一对应,因此,纹理的纹素个数与网格的顶点个数是相等的。在VS阶段,原创 2010-06-06 11:24:00 · 3725 阅读 · 0 评论 -
水效果(一) 几何波动
<br />公式一:正弦波加和原创 2010-06-19 11:29:00 · 1245 阅读 · 0 评论