如何将纹理应用于使用挤压制作的对象

How to apply a texture to an object made using extrusion

我可以毫无问题地将纹理应用于使用 indexedfaceset 制作的对象,但是当我尝试将纹理应用于使用 extrusion 制作的对象时,它就像对象的面不存在一样.示例:

左图是应用普通颜色的结果,右图是应用纹理的结果。

这是应用纹理时的代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Castle</title>
    <script type='text/javascript' src='x3dom-full.js'>
    </script>
    <link rel='stylesheet' type='text/css' href='x3dom.css' />
</head>
<body>
<x3d width="512px" height="512px">
    <scene>
        <switch whichChoice="-1">
            <extrusion id="wall" convex="true"
                       crossSection="
                      -1 -0.5
                      -0.7 -0.4
                      -0.4 -0.35
                      0 -0.3
                      0.4 -0.35
                      0.7 -0.4
                      1 -0.5
                      1 0.2
                      0.7 0.3
                      0.4 0.35
                      0 0.4
                      -0.4 0.35
                      -0.7 0.3
                      -1 0.2
                      -1 -0.5"
                       spine="
                       0 -1 0
                       0 0 0"
                       scale="
                       1 1
                       1 1">
            </extrusion>
        </switch>
        <transform translation="0 0 0" scale="1 1 1">
            <shape>
                <Appearance>
                    <ImageTexture url="castle_walls.jpg">
                    </ImageTexture>
                </Appearance>
                <x3dgeometrynode use="wall"></x3dgeometrynode>
            </shape>
        </transform>
    </scene>
</x3d>
</body>
</html>

如有任何帮助,我们将不胜感激。

纹理坐标由Extrusion节点自动生成。纹理被映射,使得 U 方向上的坐标范围沿着 crossSection 曲线从 0 到 1(0 对应于 crossSection 中的第一个点,1 对应于最后一个点)和 V 方向上的坐标范围从 0 到 1 沿着脊柱曲线( 0 对应第一个列出的脊椎点,1 对应最后一个)。如果 endCap 或 beginCap 存在,crossSection 曲线将统一缩放和平移,以便横截面的较大维度(X 或 Z)产生范围从 0.0 到 1.0 的纹理坐标。 beginCap 和 endCap 纹理的 S 和 T 方向对应于定义横截面坐标的 X 和 Z 方向。