3D知识补充

时间:2024-11-03 21:38:02

Light Mapping = Dark Mapping (光照映射、黑暗映射)

本质上也是多贴一张图,他是做相乘操作。第2张纹理通常中间亮,外面暗。如果是简单的 Modulate,那么实际上所有像素要嘛不变,要嘛变暗。操作还有可能是 Modulate2X,Modulate4X,那就有可能变亮也有可能变暗了。

Grow Mapping(发光映射)

本质上也是多贴一张图,他是做相加操作。注意,这个相加是无符号相加,也就是说相加如果超过1,那么就变成1。

Detail Mapping(细节映射)

本质上也是多贴一张图,他做的是有符号相加操作(add signed)。操作相当于无符号相加后,再减0.5。这种方法的效果是有的像素变暗了,有的像素变亮了,而且变化比较突然,看起来好像物体表面好像不太平,因此就是“增加了细节”。注意,这个是固定管线提供的功能,Unity会把他单独拎出来支持。

Bump Mapping (凹凸贴图)

就是贴法线贴图!逐像素计算光照!

纹理坐标自动生成(下面这个链接是解释最详细的)

http://resumbrae.com/ub/dms424_s05/10/print.html

GL_OBJECT_LINEAR

GL_EYE_LINEAR

参考上面的链接!

D3DTSS_TCI_CAMERASPACEPOSITION  (Direct3D 9)

以顶点在观察坐标系中的顶点坐标作为该纹理层的纹理坐标输出.即在相机空间里,顶点坐标的u,v是这样计算的.u = x, v = y, (如果是三维纹理,w = z).

D3DTSS_TCI_CAMERASPACENORMAL  (Direct3D 9)

与上面类似

D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR  (Direct3D 9)

鸡巴毛。把顶点看做向量,当成入射线,与法线计算后生成的反射线做为uv坐标?

D3DTSS_TCI_SPHEREMAP  (Direct3D 9)

GL_SPHERE_MAP  (OpenGL)

相机往顶点方向形成的入射向量,与法线计算得到的反射向量做为uv坐标。这种是要和贴图相配合,贴图要反映360周围环境,例如下图:

3D知识补充

概念:Sphere Mapping、Reflection Mapping、Environment Mapping

都一样!!FUCK,搞那么多名字。通常就是一张上面那张图。有可能是自动生成纹理坐标(固定管线),也就是 D3DTSS_TCI_SPHEREMAP 或者 GL_SPHERE_MAP。或者是美术导出纹理坐标。

这种效果一般,摄像机方向变的时候,看到的东西是一样的,离你近的点上面的东西就一模一样。如果摄像机不动,物体动,还比较正常。

Cube Mapping

效果比较好!!摄像机动的时候也会动!!比较真实。

分成2种情况,1是准备6张贴图,每次贴上去。2是实时拍这6张贴图,很慢。

 关于3D绘制顺序/排序/半透明物体的问题

http://www.opengpu.org/forum.php?mod=viewthread&tid=422

Misc

1.为了提高性能,现代图形硬件通常都在运行 fs 之前进行深度测试。如果在 fs 中写入 gl_FragDepth,会让他取消这种优化,在执行fs 后才做深度测试,这样会很慢。