Home › Forums › GAMES在线课程(现代计算机图形学入门)讨论区 › 【作业3】在view space进行插值,结果会与文档中不一致
- This topic has 10 replies, 2 voices, and was last updated 5 years, 9 months ago by
sublimation.
-
AuthorPosts
-
-
突然发现这不是插值的问题,是因为我bump mapping的最后一步跟框架中不一样,框架中是:
result_color = normal;而我把normal的值像normal shader一样进行了归一化:
result_color = (normal.normalized() + Eigen::Vector3f(1.0f, 1.0f, 1.0f)) / 2.f;-
This reply was modified 5 years, 9 months ago by
Angus.
-
咦,其实这个问题我觉得挺有意思的,为什么normal shader要进行这样的操作。我看wikipedia上面的normal mapping,好像不是这样做的。
https://en.wikipedia.org/wiki/Normal_mapping-
因为要把normal的xyz坐标映射为 0~1 之间,这样再乘255才是0~255。链接里也说了:
X: -1 to +1 : Red: 0 to 255
Y: -1 to +1 : Green: 0 to 255
Z: 0 to -1 : Blue: 128 to 255所以文档里这个凹凸法线的可视化是偏暗的(大部分颜色值为负数,都被截去了)
而我的结果和normal shader的结果都是比较像大多数法线贴图的颜色,偏亮。-
是啊,但是result_color = (normal.normalized() + Eigen::Vector3f(1.0f, 1.0f, 1.0f)) / 2.f;并不能放到这个范围内,而且这个变换很有意思,不加的话看起来很丑。。
-
欸?
result_color = (normal.normalized() + Eigen::Vector3f(1.0f, 1.0f, 1.0f)) / 2.f; result_color = result_color * 255.0f;[-1, 1] + 1 = [0, 2]
[0, 2] / 2 = [0, 1]
[0, 1] * 255 = [0, 255]不是这样吗
-
对于x,y轴应该不变啊
-
x, y轴不变是什么意思,不变它如何得出0~255的颜色值呢😂
可能我没理解你的意思。
-
不好意思,我没说清楚。因为x,y应该是映射到0~255,只有z是0~128,所以为什么x,y分量也加一,,
-
因为它把x,y映射到0~255的方法是:
x,y ∈ [-1, 1]
x, y += 1
x,y ∈ [0, 2]
x, y /= 2
x,y ∈ [0, 1]
x, y *= 255.0f
x,y ∈ [0, 255.0f]把z映射到128~255的方法是:
z ∈ [0, 1]
z += 1
z ∈ [1, 2]
z /= 2
z ∈ [0.5, 1]
z *= 255.0f
z ∈ [128.0f, 255.0f]你可以看到这一加一除一乘三个操作完全一样,所以xyz一起映射与分开做是一样的。
This post has received 1 vote up.-
This reply was modified 5 years, 9 months ago by
Angus.
-
Cool, so smart, THX!!!
-
This reply was modified 5 years, 9 months ago by
-
-
-
-
-
-
-
This reply was modified 5 years, 9 months ago by
-
AuthorPosts
- You must be logged in to reply to this topic.
