如何将纹理应用于使用拉伸制作的对象

时间:2018-06-18 22:31:54

标签: html x3d

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

enter image description here enter image description here

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

以下是应用纹理时的代码:

<!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>

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

纹理坐标由拉伸节点自动生成。贴图进行映射,以使U方向的坐标范围沿横截面曲线从0到1(0对应于横截面的第一个点,1对应于最后一个点),而V方向的范围沿脊柱曲线(从0到1)( 0对应于第一个列出的书脊点,1对应于最后一个书脊点。如果存在endCap或beginCap,则将对CrossSection曲线进行均匀缩放和平移,以使较大的横截面尺寸(X或Z)产生的纹理坐标范围为0.0到1.0。 beginCap和endCap纹理的S和T方向分别对应于定义横切面坐标的X和Z方向。