Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带插入阴影的文本3.js_Javascript_Three.js - Fatal编程技术网

Javascript 带插入阴影的文本3.js

Javascript 带插入阴影的文本3.js,javascript,three.js,Javascript,Three.js,我需要在three.js中的对象上创建带有插入阴影的文本,如下所示: 类似于带有雕刻文字的戒指。我认为更简单的方法是使用a进行雕刻,至少如果文字不必是动态的()。即使它需要是动态的,在画布中动态创建法线贴图可能比实际创建雕刻几何体更容易 另一个选择是实际创建包含雕刻的几何体。为此,您可能希望查看-库,让您在几何体上使用布尔运算符:创建3D文本网格,扭曲并将其与环的曲率对齐,最后从环网格中减去它。这应该会给你一枚刻字的戒指 事实上,我很好奇这到底是如何实现的,并且在这里实现了非常类似的东西:()

我需要在three.js中的对象上创建带有插入阴影的文本,如下所示:


类似于带有雕刻文字的戒指。

我认为更简单的方法是使用a进行雕刻,至少如果文字不必是动态的()。即使它需要是动态的,在画布中动态创建法线贴图可能比实际创建雕刻几何体更容易

另一个选择是实际创建包含雕刻的几何体。为此,您可能希望查看-库,让您在几何体上使用布尔运算符:创建3D文本网格,扭曲并将其与环的曲率对齐,最后从环网格中减去它。这应该会给你一枚刻字的戒指

事实上,我很好奇这到底是如何实现的,并且在这里实现了非常类似的东西:()。 本质上,这是使用ThreeCSG从圆柱体几何体中减去文本几何体,如下所示:

const textBSP = new ThreeBSP(textGeometry);
const cylinderBSP = new ThreeBSP(cylinderGeometry);      
const resultGeometry = cylinderBSP.subtract(textBSP).toGeometry();

scene.add(new THREE.Mesh(resultGeometry, new THREE.MeshStandardMaterial());
事实证明,threeCSG创建的细分非常慢(我必须将其移动到worker中,以便页面不会冻结近10秒)。现在看起来不太好,因为计算出的法线仍然有一个问题,我还没有弄清楚

第三种选择是结合使用置换贴图和法线贴图。
这在处理过程中会更容易、更快,但您需要添加大量顶点,以便在希望发生置换的位置提供顶点。这里是mrdoob的一小段代码,可以帮助您根据位移创建法线贴图:

我认为更简单的方法是使用a进行雕刻,至少如果文本不必是动态的()。即使它需要是动态的,在画布中动态创建法线贴图可能比实际创建雕刻几何体更容易

另一个选择是实际创建包含雕刻的几何体。为此,您可能希望查看-库,让您在几何体上使用布尔运算符:创建3D文本网格,扭曲并将其与环的曲率对齐,最后从环网格中减去它。这应该会给你一枚刻字的戒指

事实上,我很好奇这到底是如何实现的,并且在这里实现了非常类似的东西:()。 本质上,这是使用ThreeCSG从圆柱体几何体中减去文本几何体,如下所示:

const textBSP = new ThreeBSP(textGeometry);
const cylinderBSP = new ThreeBSP(cylinderGeometry);      
const resultGeometry = cylinderBSP.subtract(textBSP).toGeometry();

scene.add(new THREE.Mesh(resultGeometry, new THREE.MeshStandardMaterial());
事实证明,threeCSG创建的细分非常慢(我必须将其移动到worker中,以便页面不会冻结近10秒)。现在看起来不太好,因为计算出的法线仍然有一个问题,我还没有弄清楚

第三种选择是结合使用置换贴图和法线贴图。
这在处理过程中会更容易、更快,但您需要添加大量顶点,以便在希望发生置换的位置提供顶点。以下是mrdoob的一小段代码,可以帮助您根据位移创建法线贴图:

文本需要动态创建,因此在这种情况下,贴图不是一个好主意。是什么阻止您动态生成纹理?文本需要动态创建,在这种情况下,贴图不是一个好主意。是什么阻止你动态生成纹理?