使用Three.js将纹理应用于非立方体多面体

埃里克

我正在使用Three.js生成从画布元素生成的多面体,每面具有不同的颜色和文本。现在,我坚持使用Three.js包含本机类的多面体,但在某些时候,我想扩展为更不规则的形状。

在线上有许多示例(包括StackOverflow帖子,例如在每个面上具有不同纹理的Three.js多维数据集)解释了如何使用多维数据集。我尚未成功找到任何显示出适用于非多维数据集的相同技术的示例,但是在大多数情况下,适用于CubeGeometry的相同过程也适用于TetrahedronGeometry等。

这是我用来生成多面体的代码的简化版本:

switch (shape) {
    case "ICOSAHEDRON" :

        // Step 1: Create the appropriate geometry.
        geometry = new THREE.IcosahedronGeometry(PolyHeatMap.GEOMETRY_CIRCUMRADIUS);

        // Step 2: Create one material for each face, and combine them into one big
        // MeshFaceMaterial.
        material = new THREE.MeshFaceMaterial(createMaterials(20, textArray));

        // Step 3: Pair each face with one of the materials.
        for (x = 0; face = geometry.faces[x]; x++)
        {
            face.materialIndex = x;
        }
        break;

     // And so on, for other shapes.
}

function createTexture (title, color) {
    var canvas = document.createElement("canvas");

    // Magical canvas generation happens here.

    var texture = new THREE.Texture(canvas);
    texture.needsUpdate = true;

    return new THREE.MeshLambertMaterial({ map : texture });
}

function createMaterials (numFacets, textArray)
{
    var materialsArray = [],
        material;

    for (var x = 0, xl = numFacets; x < xl; x++)
    {
        material = createTexture(textArray[x], generateColor(textArray[x]));
        material.side = THREE.DoubleSide;
        materials.push(oMaterial); 
    }

    return materials;
}

多维数据集使用此技术可以完美渲染,但在其他多面体中,纹理的行为不符合预期:

二十面体示例

很难确切解释这里发生了什么。本质上,每个面都显示正确的纹理,但是纹理本身已经拉伸和移动,好像覆盖了整个多面体。换句话说-观察固定的形状-左上表面仅显示其纹理的左上部分,右上表面仅显示右​​上部分,依此类推。

多面体另一侧的面完全没有显示纹理细节。只有颜色。

在尝试Three.js之前,我没有3D渲染的经验,因此我想我缺少了CubeGeometry自动处理的某些步骤,但没有它的姊妹类处理。我会参考其他已发布的示例,但是大多数示例都是渲染多维数据集,而那些通常不使用纯色的多维数据集。

要正确缩放和缩放非立方体形状上的纹理,需要做什么?

乌拉

您需要设置新的UV。

我举了一个简单的例子来说明如何做到这一点,不知道这是否是最好的方法。

jsFiddle示例

更新资料

  geometry.faceVertexUvs[0] = [];

   for(var i = 0; i < geometry.faces.length; i++){                              

        // set new coordinates, all faces will have same mapping.            
        geometry.faceVertexUvs[0].push([
        new THREE.Vector2( 0,0 ),
        new THREE.Vector2( 0,1 ),
        new THREE.Vector2( 1,1),

        ]);
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用three.js r67将径向纹理应用于环?

来自分类Dev

使用Three.js仅将纹理应用于画布单击

来自分类Dev

在Three.js中使用纹理图集时,立方体边缘上的接缝

来自分类Dev

Three.js 将重复纹理应用于 JSON 场景对象

来自分类Dev

如何在Three.js中将纹理应用于自定义几何

来自分类Dev

无法将混合应用于位于半透明纹理表面后面的立方体

来自分类Dev

Three.js制作静态立方体

来自分类Dev

更改使用Three.js创建的3D“立方体”的角度

来自分类Dev

GLSL / THREE.js数学将形状变成立方体问题

来自分类Dev

Three.js:将线附加到与角相同角度的立方体角上

来自分类Dev

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

来自分类Dev

如何在Three.js中检查两个凸多面体是否相交?

来自分类Dev

Three.js多边形/多面体名称或标题

来自分类Dev

如何在Three.js中检查两个凸多面体是否相交?

来自分类Dev

如何使用随机粒子填充加载的 STL 网格(非简单形状如立方体等)并使用three.js 中绑定的此几何体进行动画处理

来自分类Dev

使用CSS旋转立方体

来自分类Dev

Three.js在100个立方体动画上崩溃

来自分类Dev

Three.js立方体相对于相机的面部旋转矢量

来自分类Dev

如何在Three.js中获得立方体的高度

来自分类Dev

如何在Three.js中绘制一个costom立方体?

来自分类Dev

如何在Three.js中获得立方体的高度

来自分类Dev

如何在Three.js中绕立方体旋转球体

来自分类Dev

Android-如何使用opengl-es在3D立方体上渲染视频纹理?

来自分类Dev

使用PyOpenGL在Python中仅将2个立方体移出2

来自分类Dev

如何使用 vtk.js 渲染 Float32Array 立方体?

来自分类Dev

当我想显示简单的网格时,Three.js 渲染不显示简单的立方体

来自分类Dev

如何使用HTML和CSS实现立方体效果

来自分类Dev

如何在pyopengl中使用鼠标旋转立方体

来自分类Dev

在Pygame中使用WASD移动立方体?

Related 相关文章

  1. 1

    如何使用three.js r67将径向纹理应用于环?

  2. 2

    使用Three.js仅将纹理应用于画布单击

  3. 3

    在Three.js中使用纹理图集时,立方体边缘上的接缝

  4. 4

    Three.js 将重复纹理应用于 JSON 场景对象

  5. 5

    如何在Three.js中将纹理应用于自定义几何

  6. 6

    无法将混合应用于位于半透明纹理表面后面的立方体

  7. 7

    Three.js制作静态立方体

  8. 8

    更改使用Three.js创建的3D“立方体”的角度

  9. 9

    GLSL / THREE.js数学将形状变成立方体问题

  10. 10

    Three.js:将线附加到与角相同角度的立方体角上

  11. 11

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

  12. 12

    如何在Three.js中检查两个凸多面体是否相交?

  13. 13

    Three.js多边形/多面体名称或标题

  14. 14

    如何在Three.js中检查两个凸多面体是否相交?

  15. 15

    如何使用随机粒子填充加载的 STL 网格(非简单形状如立方体等)并使用three.js 中绑定的此几何体进行动画处理

  16. 16

    使用CSS旋转立方体

  17. 17

    Three.js在100个立方体动画上崩溃

  18. 18

    Three.js立方体相对于相机的面部旋转矢量

  19. 19

    如何在Three.js中获得立方体的高度

  20. 20

    如何在Three.js中绘制一个costom立方体?

  21. 21

    如何在Three.js中获得立方体的高度

  22. 22

    如何在Three.js中绕立方体旋转球体

  23. 23

    Android-如何使用opengl-es在3D立方体上渲染视频纹理?

  24. 24

    使用PyOpenGL在Python中仅将2个立方体移出2

  25. 25

    如何使用 vtk.js 渲染 Float32Array 立方体?

  26. 26

    当我想显示简单的网格时,Three.js 渲染不显示简单的立方体

  27. 27

    如何使用HTML和CSS实现立方体效果

  28. 28

    如何在pyopengl中使用鼠标旋转立方体

  29. 29

    在Pygame中使用WASD移动立方体?

热门标签

归档