【发布时间】:2019-05-16 16:23:09
【问题描述】:
我正在尝试编写一个着色器来为 SceneKit 中的自定义几何图形着色。我想设置颜色,使朝上的水平表面为白色,朝下的水平表面为黑色,而介于两者之间的所有其他表面都是基于其方向的灰色阴影。我使用材质的表面入口点来调用以下着色器
vec4 normal = vec4(_surface.normal, 1.0);
// Assume value is [-1, 1], scale to [0, 1]
float color = normal.z * 0.5 + 0.5;
_surface.diffuse = vec4(color, color, color, 1.0);
似乎normal.z 与相机(或视图)相关。我假设我需要转换值,以便它在另一个空间中。我尝试了多种转换(和转换组合),例如u_inverseViewTransform,但结果似乎都在视图空间中。有谁知道如何根据其表面的方向为几何图形着色?
【问题讨论】:
-
vec3 normal = mat3(u_inverseViewTransform) * _surface.normal;应该可以完成这项工作。 -
@Rabbid76 做到了。谢谢。如果你把它写成答案,我会接受。
标签: ios glsl shader scenekit coordinate-transformation