【问题标题】:THREEJS json model - uv map issueTHREEJS json 模型 - uv 贴图问题
【发布时间】:2018-09-22 18:54:20
【问题描述】:

查看 3d 模型的 json 文件我看到了这一行

 "uvs": [[-3.21834,-1.65399,-3.21834,-2.57657,4.21834,-2.57657,4.21834,-1.65399,4.21834,-1.85233,4.21834,-2.7749,-3.21834,-2.7749,-3.21834,-1.85233,4.21834,0.961286,-3.21834,0.961286,-3.21834,0.038714,4.21834,0.038714]]

有小于 0 和大于 1 的数字。我认为 uv 测量值不应小于 0 或大于 1。错误在哪里?他们应该被转换吗?

几何json数据是这样的

{
    "type": "Geometry",
    "materials": [{
        "visible": true,
        "colorAmbient": [0.690196,0.690196,0.690196],
        "depthWrite": true,
        "DbgIndex": 0,
        "mapDiffuseAnisotropy": 1,
        "doubleSided": true,
        "blending": "NormalBlending",
        "wireframe": false,
        "depthTest": true,
        "specularCoef": 50,
        "mapDiffuse": "roof.png",
        "colorSpecular": [0.1,0.1,0.1],
        "opacity": 1,
        "shading": "phong",
        "colorDiffuse": [0.690196,0.690196,0.690196],
        "mapDiffuseRepeat": [1,1],
        "transparent": false,
        "DbgColor": 15658734,
        "mapDiffuseWrap": ["RepeatWrapping","RepeatWrapping"],
        "colorEmissive": [0,0,0],
        "DbgName": "roof_png_material"
    }],
    "data": {
        "skinIndices": [],
        "skinWeights": [],
        "name": "RoofGeometry",
        "normals": [0.64452,-0.593982,0.481368,0.494247,-0.563707,-0.661733,0.494247,0.563707,-0.661733,0.64452,0.593982,0.481368,-0.656606,0.597949,0.459639,-0.474654,0.561144,-0.67806,-0.474654,-0.561144,-0.67806,-0.656606,-0.597949,0.459639,-0.02356,0.642933,0.765526,-0.02356,-0.642933,0.765526,0.019044,-0.784814,-0.619373,0.019044,0.784814,-0.619373],
        "metadata": {
            "uvs": 1,
            "bones": 0,
            "materials": 1,
            "normals": 12,
            "generator": "io_three",
            "morphTargets": 0,
            "version": 3,
            "vertices": 12,
            "faces": 10
        },
        "morphTargets": [],
        "vertices": [3.43784,-3.71834,-0.861598,3.43784,3.71834,-0.861598,3.43784,-3.71834,-1.23063,3.43784,3.71834,-1.23063,-0.096621,3.71834,0.184514,-0.096621,-3.71834,0.184514,-0.096621,3.71834,-0.184514,-0.096621,-3.71834,-0.184514,-3.18641,3.71834,-0.940931,-3.18641,3.71834,-1.30996,-3.18641,-3.71834,-1.30996,-3.18641,-3.71834,-0.940931],
        "uvs": [[-3.21834,-1.65399,-3.21834,-2.57657,4.21834,-2.57657,4.21834,-1.65399,4.21834,-1.85233,4.21834,-2.7749,-3.21834,-2.7749,-3.21834,-1.85233,4.21834,0.961286,-3.21834,0.961286,-3.21834,0.038714,4.21834,0.038714]],
        "animations": [],
        "faces": [43,0,2,3,1,0,0,1,2,3,0,1,2,3,43,8,9,10,11,0,4,5,6,7,4,5,6,7,43,0,1,4,5,0,0,3,8,9,0,3,8,9,43,7,6,3,2,0,10,11,2,1,10,11,2,1,43,2,0,5,7,0,1,0,9,10,1,0,9,10,43,1,3,6,4,0,3,2,11,8,3,2,11,8,43,4,6,9,8,0,8,11,5,4,8,11,5,4,43,6,7,10,9,0,11,10,6,5,11,10,6,5,43,7,5,11,10,0,10,9,7,6,10,9,7,6,43,5,4,8,11,0,9,8,4,7,9,8,4,7],
        "bones": [],
        "influencesPerVertex": 2
    },
    "uuid": "2F93879C-96CB-3936-AEFC-CE9840D3057D"
}

我怎样才能得到准确的分数?

【问题讨论】:

  • 您是否从 Blender 中导出了模型?
  • 来自这个网站clara.io/view/91e15ecd-de44-4319-89ac-005482baf0ac(threejs json 文件)。该模型运行良好,但我不想预加载所有对象,我需要合并它。但我不明白如何处理 uv 坐标
  • UV 不一定在 [0,1] 范围内。可以转换数据以实现例如缩放效果。如果模型的视觉效果没问题,你就不用担心了。
  • 但是如果我合并两个或多个模型,我还需要将纹理合并为一个纹理(以获得良好的性能),那么将这个相对点转换为绝对点很重要

标签: javascript json three.js uv-mapping


【解决方案1】:

有小于 0 和大于 1 的数字。我认为 uv 测量值不应小于 0 或大于 1。

这不是全部真相。 UV 坐标可以是任意数字,最终由着色器来适当地解释它们。在three.js 中有参数texture.repeattexture.offsettexture.centertexture.rotation(参见https://threejs.org/docs/#api/textures/Texture)将用于将值从 uv 属性转换为用于纹理查找的值。默认情况下,这些值按原样使用。

值 1 的最终结果取决于 wrapS 和 wrapT 的设置(也记录在 https://threejs.org/docs/#api/textures/Texture 中)。例如,如果 wrapS/T 是 reaeat 类型之一,则超出范围的值用于纹理平铺。

错误在哪里?他们应该被转换吗?

所以在这种情况下甚至可能没有错误。这些数字可能只是表示预期的平铺。但是要更改它,您需要转到模型的来源。

【讨论】:

  • 感谢您的回答。我的问题是我想将模型纹理放入更大的平铺纹理中,该纹理在 0 和 1 的范围内工作。有没有办法将此相对坐标转换为具有不同范围的绝对坐标?谢谢提前
  • 我不明白“将模型纹理放入更大的平铺纹理中,该纹理在 0 和 1 的范围内工作”。您是指包含多个纹理的纹理图集吗?
  • 是的。出于性能原因,我想制作具有更多模型纹理的单个图集。使用此图集纹理,我的 UV 坐标从 0 变为 1。问题是将坐标如:-1、+2、4.3 等移植到此范围
  • 这将是最困难的。使用纹理变换(尤其是重复和偏移)可能会起作用。否则,您可能需要返回编辑器软件并在那里修复它。
猜你喜欢
  • 2019-08-12
  • 2020-02-07
  • 2023-03-03
  • 2014-03-28
  • 2017-03-29
  • 2019-03-16
  • 2013-02-14
  • 1970-01-01
  • 2018-09-30
相关资源
最近更新 更多