游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1749|回复: 0

关于samplerCUBE取值用的反射向量

[复制链接]

33

主题

159

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
QQ
发表于 2011-3-22 12:32:00 | 显示全部楼层 |阅读模式
最早接触到HDR环境贴图是Direct3DSDK里的例子
(忍不住要说句,DirectSDK的sample事实上不能称做例子的,完全TMD不是给人学的,核心一点的技术都被包了N层面粉做成了包子,而且不管是shadowMap skinMesh HDRCube parallex什么的核心技术上都有错误,我很难想象这些错误是失误造成的)

HDR用起来方便,用SDK里的工具做一个6方向的cubeMap,直接在shader里用反射向量取值就能把周围虚拟的环境反射到你的Mesh镜面上.

昨天把shadowmap parallex 和HDRCUBEMAP整合到一个shader里的时候才发现,我出来的环境贴图方向上有错误,环境图居然会随摄像机方向变化而变化.搞了好些时间才找到原因
首先CUBE的取值
float4 c4HDR = texCUBE( samplerHDR, R);
R 是摄像机方向对应Normal的反射向量(不会有人用光向量来做这个R吧 - -! );
但是,出现了上面说的,我不想出的情况,摄像机一转,完了,世界倒了
原因是这个R是在摄像机世界里的(VIEW SPACE),而环境贴图并不因摄像机世界变化而变化,怎么办,处理方法也方便,把R扔到世界矩阵里去

R = mul(R,mxViewInv);//mxViewInv是视矩阵的逆矩阵
float4 c4HDR = texCUBE( samplerHDR, R);
这样一来出来的效果就比较像了

我想有很多人都是按DirectSDK的例子里学习的,但它里面有意无意的会有很多错误,ShadowMap里面的lerp这段也是有意的放了一个错误,parallex更加了,要是看了fx composer里的parallex例子,你会发现directSDK里的完全是噱人的.希望大家看sample的时候多长个心眼
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-7 14:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表