ThreeJS - 如何将环境贴图应用到导入的 obj 模型?

2023-12-07

EDIT:我在这篇文章中找到了一个解决方案——如何将材质分配给 ColladaLoader 或 OBJLoader。我使用以下代码实现了允许我在导入的 .obj 上使用 envMaterial 立方体贴图的效果 -

    var loader = new THREE.OBJLoader();

    loader.load( 'models/refTestblend.obj', function ( object ) {

      object.traverse( function ( child ) {

          if ( child instanceof THREE.Mesh ) {

              child.material = envMaterial;

          }

      } );

      scene.add( object );

    } );

不幸的是,我不得不牺牲 .mtl 文件,所以我的下一步将是尝试恢复导出的 .mtl 纹理并以某种方式混合这将立方体贴图材质。 (我将其标记为已回答,显然欢迎任何进一步的输入..)

EDIT:混合原始纹理和环境贴图注释问题的解决方案见下文。希望这有用!

OP:我有一个从搅拌机导出的环境立方体贴图 - 我可以将环境贴图很好地应用于生成的几何体,但如何将其应用于导入的 .obj 模型?

我相信我可以在这个演示中找到最接近的例子 -http://mrdoob.github.io/ Three.js/examples/webgl_materials_cubemap.html

loader = new THREE.BinaryLoader();
loader.load( "obj/walt/WaltHead_bin.js", function( geometry ) { createScene( geometry, cubeMaterial1, cubeMaterial2, cubeMaterial3 ) } );

然而它运行在 BinaryLoader 上,我不相信我可以将它与搅拌机导出一起使用 - (我可能是错的?)

这就是我的加载程序、envmap/skybox 和工作生成立方体的样子。

    var urls = [
        'models/cubemap/right.png',
        'models/cubemap/left.png',
        'models/cubemap/top.png',
        'models/cubemap/bottom.png',
        'models/cubemap/front.png',
        'models/cubemap/back.png'
    ];


    // create the cubemap
    var cubemap = THREE.ImageUtils.loadTextureCube(urls);
    cubemap.format = THREE.RGBFormat;

    // create a custom shader
    var shader = THREE.ShaderLib["cube"];
    shader.uniforms["tCube"].value = cubemap;

    var material = new THREE.ShaderMaterial({

        fragmentShader: shader.fragmentShader,
        vertexShader: shader.vertexShader,
        uniforms: shader.uniforms,
        depthWrite: false,
        side: THREE.DoubleSide

    });

    // create the skybox
    var skybox = new THREE.Mesh(new THREE.BoxGeometry(10000, 10000, 10000), material);
    scene.add(skybox);

    var envMaterial = new THREE.MeshBasicMaterial({envMap:cubemap});

    var cubeGeometry = new THREE.BoxGeometry(5, 5, 5);

    var cube = new THREE.Mesh(cubeGeometry, envMaterial);
    cube.name = 'cube';
    scene.add(cube);
    cube.position.set(-10, 0, 0);

    var loader = new THREE.OBJMTLLoader();
    loader.load("models/refTestblend.obj",
    "models/refTestblend.mtl",
    function(obj) {
    obj.translateY(-3);
    scene.add(obj);
    });

非常感谢!


您可以使用如下模式将环境贴图添加到 OBJ 模型的现有材质中:

    var loader = new THREE.OBJLoader();

    loader.load( 'myModel.obj', function ( object ) {

      object.traverse( function ( child ) {

          if ( child instanceof THREE.Mesh ) {

              child.material.envMap = myEnvironmentMap;
              // add any other properties you want here. check the docs.

          }

      } );

      scene.add( object );

    } );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ThreeJS - 如何将环境贴图应用到导入的 obj 模型? 的相关文章

  • 如何在 OpenCV 中绘制图像的 3D 直方图

    更新 我找到更多例子 我现在可以做到 我可以在 3d 中绘制多个直方图吗 https stackoverflow com questions 35210337 can i plot several histograms in 3d 我知道这
  • 扩展 Three.js 类

    我想扩展 Three js Object3D 类 但不知道该怎么做 有一个 Stackoverflow 问题 我已经阅读 重新阅读和尝试过 但无法让它为我工作 有没有办法扩展 ThreeJS 对象 https stackoverflow c
  • 三.js Raycaster intersectObjects

    我正在尝试修改这个例子 https github com timoxley threejs blob master examples webgl morphtargets md2 control html来自 Three js 通过鼠标点击
  • Three.js 设置并读取相机外观向量

    而不是使用camera rotation或lookAt 函数旋转相机 我想将外观矢量直接传递给相机 是否可以直接设置相机外观矢量以及是否可以从相机读取外观矢量 相机没有 外观矢量 因此无法设置它 但是 您可以构造一个point通过将您的外观
  • 如何创建热图来说明控制发散调色板中心颜色位置的网格差异?

    我有两个人脸 3D 网格 我希望使用热图来说明差异 我想使用红蓝发散色阶 我的数据可以查到here https github com Patricklv How to create heatmap illustraing 3D mesh d
  • Three.js - 将 WebGL 和 CSS3D 与 iFrame 混合

    我准备了一个混合的工作页面WebGL and CSS3D 在SO的一点帮助下here https stackoverflow com questions 24681170 three js properly blending css3d a
  • Three.js :face4 生成三角形而不是正方形

    我正在尝试使用 tree js 自定义几何图形生成一个正方形 但是这段代码 var cubeGeo new THREE Geometry cubeGeo vertices push new THREE Vector3 25 25 25 cu
  • 如何在 Three.js 场景中包含 OVRManager?

    我创建了几个 Three js Javascript 演示应用程序 正在我的新 Oculus Go 中进行试验 我正在尝试让 Go 控制器在我的应用程序中执行某些操作 根据 Oculus 开发人员中心的说法 最好的办法是将 OVRManag
  • 开始使用 Three.js 中的行进立方体

    我是 Three js 的新手 正在寻找教程来帮助我开始了解如何在 Three js 中使用 Marching Cubes 到目前为止 我在 Three js 中看到的一些使用它的项目对我来说有点复杂 所以一个简单的教程会很好 谢谢 像您一
  • Three.js canvas.toDataURL 有时为空

    我正在尝试使用 html2canvas js 渲染 THREE js 场景 一些覆盖的 HTML 元素 有用大多数时候 但并非一直如此 在失败的情况下 将渲染 HTML 元素 背景 覆盖层等 但不会渲染其他元素 THREE js 场景表现得
  • (A 框架)本地 gltf 不会加载;无法读取未定义的属性“切片”

    我从A型框架学校 https aframe io aframe school 11其中加载了 gltf 模型 然后我从 Khronos 加载了示例模型 this box https github com KhronosGroup glTF
  • 如何在 GTX 560 及更高版本上使用 OpenGL 进行立体 3D?

    我正在使用在 Windows 7 上运行的开源触觉和 3D 图形库 Chai3D 我重写了该库以使用 Nvidia nvision 执行立体 3D 我将 OpenGL 与 GLUT 一起使用 并使用 glutInitDisplayMode
  • 使用 Scipy/Numpy 在浊点的二维插值中仅获取“有效”点

    我有一个通过人的背部摄影测量获得的浊点 我正在尝试对其进行插值以获得规则网格 为此我正在使用scipy interpolate到目前为止取得了良好的成果 问题是 我正在使用的函数 scipy interpolate griddata 使用平
  • 更改 3D 图形颜色 (matplotlib)

    我使用以下代码在 matplotlib 中绘制了 3D 图形 Previously defines lists of data to plot fig plt figure ax fig add subplot 111 projection
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • 在 RGL 中将立方体绘制到 3D 散点图中

    我正在尝试向 3D 散点图添加较小的立方体 网格 具有指定边长 我希望立方体位于原点 我该怎么做呢 我已经玩过cube3d 但我似乎无法将立方体正确定位 也无法使其成为网格 因此我可以看到它包含的数据点 这是我所拥有的 library rg
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 如何在 React Native 中渲染自定义 3D 对象

    我已经成功使用 Three js expo Three 和 expo gl 在 React Native 中配置了红色立方体的 3D 渲染 但我想让用户渲染他们自己可能拥有的自定义 3D 对象 obj 或 mtl 扩展名 但我不确定如何让他
  • 如何将平面上的 3D 点转换为 UV 坐标?

    我有一个 3d 点 定义为 x0 y0 z0 该点属于一个平面 定义为 a b c d normal a b c and ax by cz d 0 如何将 3d 点转换或映射为一对 u v 坐标 这一定是非常简单的事情 但我无法弄清楚 首先
  • 判断点是否在截锥体内

    我正在尝试找出确定一个点是否在截锥体内的最佳方法 我有一些工作 但不确定它是否太麻烦 也许我应该有一种更优雅 有效的方法来做到这一点 假设我想查明点 x 是否在截锥体内 一旦我知道了平截头体的 8 个点 4 个近点 4 个远点 的位置 我就

随机推荐

  • 使用 jquery 替换页面加载时 DIV 的内容

    使用 jquery 有没有一种方法可以在页面加载时获取 DIV 的内容并用其他内容替换它 div class content Before div to div class content After div Use text conten
  • 如何知道 Jupyter Notebook 中正在运行哪个 Python?

    我在浏览器中使用 Jupyter Notebook 进行 Python 编程 我已经安装了 Anaconda Python 3 5 但我很确定 Jupyter 正在使用本机 python 解释器而不是 anaconda 运行我的 pytho
  • 如何让 ms-access 以其他用户身份连接到 ms-sql?

    如何让 ms access 以与其 Active Directory ID 不同的用户身份连接 通过 ODBC 到 ms sql 数据库 我不想在 ODBC 连接中指定帐户 我想在 ms access 端执行此操作以对用户隐藏它 在 ODB
  • 钥匙串 - 安全数据存储

    我正在开发一个带有钥匙串实现的应用程序 我能够创建数据并将其保存到钥匙串中 我正在使用钥匙串包装类由苹果公司提供 根据要求 我必须在钥匙串中实现尽可能好的安全性 安全团队指出了一些缺陷 例如在越狱设备上的可访问性 有人可以给我指导吗 我还使
  • 设置自定义中线颜色并将刻度标签颜色设置为箱线图面颜色

    我正在使用这个漂亮的箱线图 Parfait 的回答 我遇到了越界错误j并不得不使用range i 5 i 5 5 Why 我想将中位数设置为特定颜色 比方说red medianprops dict color red 行不通的 怎么做 如何
  • 具有小面和相同条形尺寸(binwidth)的条形图,并可选择缩小面板尺寸

    我想使用类似方面的方式比较数据bar plot 但缺少数据会导致条形 宽度 不同 我怎么能够 确保相同的条形尺寸 宽度 和 很好 将每个面的面板尺寸缩小到真正需要的尺寸 PS 我不想将空数据显示为 零栏 以免浪费空间 library ggp
  • 生成 URL 别名??在 PHP 中

    我刚刚在某个地方看到了这个 我对此很感兴趣 但似乎在任何地方都找不到它 或者我只是用了错误的词来搜索 嗯 我看到了这个链接 http splur gy r QqVYf r 2tgNklHgmVK 当我点击它时 我被重定向到另一个页面 该页面
  • 使用 google api 时如何设置刷新令牌?

    我正在研究一个示例 试图学习如何使用 google api 更改日历上的事件 服务器是根据数据库中的信息更新日历的用户 实际上不需要用户交互 问题是我在获取 使用刷新令牌时遇到问题 我单击添加到页面的 连接我 链接 但出现错误 Fatal
  • 无法在 php 会话中传递 mysqli 连接

    我试图通过 mysqli 连接的会话来进行站点上的多个查询 但是当我尝试执行查询时 它会输出警告 无法获取 mysqli SESSION db new mysqli host username password db 是否不可能通过会话传递
  • 如何在 Protégé 中使用 OWL 解决爱因斯坦之谜时获得个人结果?

    我想更好地理解本体论和推理 有一个有趣的谜题叫做爱因斯坦的谜语在网上可以借助本体论和推理来解决 我从该站点下载了 OWL 本体并将其导入 Protege 4 0 2 不适用于 4 1 我可以通过以下方式启动推理机推理机 FaCT 推理机 分
  • oracle中格式化DATE

    我的表中有一个日期字段 其中包含 dd MMM yy 格式的日期 我想创建一个函数来获取此日期 检查它是否为空 然后将其更改为 yyyy mm dd 格式 但问题是oracle不接受dd MM YYyy格式的日期作为输入参数 它说 请使用
  • .net core 是否支持代码契约?

    在 net 框架中 有代码契约允许我在代码中指定前置 后置条件 net core net 5 支持它们吗 命名空间System Diagnostics Contracts可用 但项目是弃 另类VS2019 https softwarerec
  • 嵌套集模型 PHP 库

    您好 我需要使用嵌套集模型来管理我网站上的产品类别 有谁知道一些好的预构建 PHP 库用于处理 MySQL 中的嵌套集 你可以尝试 Baobab 这是我最近发布的一个库 http www sideralis org baobab
  • 使用独立 NDK 工具链构建协议缓冲区

    我在使用 NDK build tools make standalone toolchain sh 脚本创建的独立 NDK 工具链构建 Android 协议缓冲区时遇到问题 我遇到的问题是这样的 libtool link g Wall Ww
  • 如何使用 ngFor ionic 隐藏未使用的项目?

    我试图从 ngFor 中隐藏未使用的项目 问题是 我确实成功隐藏了它 但它的位置仍然存在并且是空的 如下图所示 我的 ts 文件 coupon any couponz var data for let co of this shared c
  • 使用 lm() 和 Predict() 进行滚动回归和预测

    我需要申请lm 到我的数据框的扩大子集dat 同时对下一次观察进行预测 例如 我正在做 fit model predict dat 1 3 dat 4 dat 1 4 dat 5 dat 1 dat nrow dat 我知道我应该为特定子集
  • 我有一个 dd-mon-yyyy 格式的日期(字符串),我想将此日期与系统日期进行比较

    我在 字符串 中有一个 dd mon yyyy 格式的日期 我想将此日期与系统日期进行比较 例如 我的时间是 2010 年 10 月 12 日 我想将其与相同格式的系统日期进行比较 您可以使用SystemDateFormat例如 用于解析字
  • MySQL 显示状态 - 活动连接数还是总连接数?

    当我跑步时show status like Con 它显示了连接数 为 9972 并且还在不断增长 这是活跃连接数还是总连接数 根据the docs 表示历史上的总数 Connections 尝试连接 MySQL 服务器的次数 成功或失败
  • JavaScript:检测表单提交完成

    我在 iframe 中有一个表单并提交它 我如何知道提交何时完成 我正在使用 jQuery 提交表单 但不认为有回调 myForm submit 如何将事件附加到提交完成 提交表格会将您重定向到下一页 但你总是可以尝试ajax功能 http
  • ThreeJS - 如何将环境贴图应用到导入的 obj 模型?

    EDIT 我在这篇文章中找到了一个解决方案 如何将材质分配给 ColladaLoader 或 OBJLoader 我使用以下代码实现了允许我在导入的 obj 上使用 envMaterial 立方体贴图的效果 var loader new T