【发布时间】:2017-10-11 20:00:51
【问题描述】:
我正在尝试返回并导出被置换贴图置换的网格。
着色器正在根据这条线转换顶点(来自 三.js/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl):
transformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );
这是根据displacementMap置换一个顶点,并与该顶点的uv坐标混合。
我正在尝试创建此网格/几何图形,以便以后可以将其导出。
我在这里创建了一个问题的“演示”: Github Page 我希望在按 exportSTL 时,在视口中看到的 置换网格。但是我只得到了未移位的飞机。
我明白为什么会发生这种情况,置换只发生在着色器中,并没有真正直接置换平面的几何形状。
我还没有找到three.js 提供的方法,也没有找到任何从着色器中获取更改的方法。 所以我试图用“demo.js”中的一个函数来做。 但是,我是一个 WebGL/three.js 新手,在重新创建着色器的功能时遇到了问题。
我找到了处理 morphTargets 的出口商,但这些都没有帮助。 阅读this question 后,我尝试了PlaneBufferGeometry,因为它更接近着色器——但这对我来说产生了相同的结果。 我认为this question 最初试图产生类似的东西,但接受了一个不相关的问题。
最后,我想在 HTML 画布上进行绘制,然后实时更新纹理(我有这部分工作)。然后,用户可以导出网格进行 3D 打印。
是否有一种方法可以让 three.js 给我修改后的着色器几何? 或者有人可以帮我将着色器线翻译成“传统”的 Three.js 函数吗? 也许这是获得位移网格的完全错误的方法?
更新 - 示例正在运行
感谢 DeeFisher 的示例,我现在可以计算 CPU 中的位移,正如 imerso 最初建议的那样。 如果您现在单击Github Page,您将获得一个工作示例。 目前我不完全理解为什么我必须镜像画布才能最终获得正确的位移,但这在最坏的情况下是一个小麻烦。
【问题讨论】:
标签: javascript 3d three.js webgl