A-Frame .obj 模型显示但已损坏

2023-12-01

这里是框架的初学者,已经完成了教程场景,现在正在设置我的第一个使用 .obj 模型。

使用远程服务器,感觉这是重要的信息。

我看到过有关模型未显示的问题,但我的模型显示已损坏,我不知道从哪里开始修复它。

This is how it looks in windows 3D builder: Pokemon Stadium Working

And this is how it looks in my project (backed on pink plane for contrast): enter image description here

这是 HTML:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Pokemon Stadium</title>
    <link href="css/main.css" rel="stylesheet">
    <script src="https://aframe.io/releases/0.4.0/aframe.min.js"></script>
    <script src="js/main.js"></script>
</head>
<body>


<!-- Scene -->
<a-scene onLoad="">
    <!------------------------------------------------ Assets --------------------------------------------------------->
    <a-assets>
        <a-asset-item id="stadium-obj" src="assets/models/stadium/Pokemon+Stadium.obj"></a-asset-item>
        <a-asset-item id="stadium-mtl" src="assets/models/stadium/Pokemon+Stadium.mtl"></a-asset-item>
        <a-asset-item id="ivy-obj" src="assets/models/ivysaur/Pokemon.obj"></a-asset-item>
        <a-asset-item id="ivy-mtl" src="assets/models/ivysaur/Pokemon.mtl"></a-asset-item>
    </a-assets>


    <!------------------------------------------------- Scene --------------------------------------------------------->
    <!-- Skybox -->
    <a-sky color="#279DF4"></a-sky>


    <!-- Abyss -->
    <a-plane scale="1000 1000" position="0 -10 0" color="#212121" rotation="-90 0 0" material="shader: flat"></a-plane>


    <!-- Stadium -->
    <a-entity obj-model="obj: #stadium-obj; mtl: #stadium-mtl" position="0 0 -30" scale="0.05 0.05 0.05" material="side: double"></a-entity>

    <!-- Bulbasaur -->
    <a-entity obj-model="obj: #ivy-obj; mtl: #ivy-mtl" position="15 10 0" scale="1 1 1" rotation="0 90 0"></a-entity>


    <!-- Camera + cursor -->
    <a-entity camera look-controls position="10 12 0" rotation="-23 -90 0">
        <a-cursor id="cursor"
                  animation__click="property: scale; startEvents: click; from: 0.1 0.1 0.1; to: 1 1 1; dur: 150"
                  animation__fusing="property: fusing; startEvents: fusing; from: 1 1 1; to: 0.1 0.1 0.1; dur: 1500"
                  event-set__1="_event: mouseenter; color: springgreen"
                  event-set__2="_event: mouseleave; color: black"
                  fuse="true"
                  raycaster="objects: .link"></a-cursor>
    </a-entity>
</a-scene>
</body>
</html>

You probably have to set the type of side of the material to THREE.DoubleSide. With A-Frame you should be able to change the type using the following DOM attribute on an AEntity: material="side: double".

如果情况并非如此,您应该使用场景元素的片段来更新您的帖子。

EDIT:

bad image

如图所示,我的模型的部分内容渲染不正确。 THREEjs 中的模型加载器读取模型中的所有网格并将它们绑定到分组对象。要解决此问题,您必须将网格体材质的侧面设置为 DoubleSided。幸运的是,在 A 型框架中,obj-model当模型加载成功时,组件会发出一个事件,我们为发出的事件添加一个监听器model-loaded在 DOM 元素上并附加一个返回自定义事件的回调。自定义事件发送对模型组的引用。查询 AEntity,我附加了一个 idmodelEl到我的。

<script>
  (function(modelEl) {
    if (!window['AFRAME'] && !modelEl) {
      return;
    }

    modelEl.addEventListener('model-loaded', function(evt) {
        var model = evt.detail.model;

      traverse(model);
    });
  })(document.getElementById('stadium'));

  function traverse(node) {
    node.children.forEach(function(child) {
      if (child.children) {
        traverse(child);
      }

      updateMaterial(child['material'], THREE.DoubleSide);
    });
  }

  function updateMaterialSide(material, side) {
    if (!material) {
      return;
    }

    if (material instanceof THREE.Material) {
      material.side = side;
      material.needsUpdate = true
    } else if (material instanceof THREE.MultiMaterial) {
      material.materials.forEach(function(childMaterial) {
        updateMaterial(childMaterial, side);
      });
    }
  }
</script>

After running the above script, my model, and some of the texture loading, has been fixed. enter image description here

需要考虑的事情是深入创建自定义组件并修改或扩展 obj-model 组件,以避免必须查询可能存在相同问题的每个模型。 如果这些都不起作用,我相信您的波前对象导出设置可能有问题。

EDIT2:

Regarding my comment, here is a result of the fixed obj file in A-Frame: enter image description here

为了方便起见,您可以在这里找到 MTL 和 OBJ 文件:

obj file

mtl file

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

A-Frame .obj 模型显示但已损坏 的相关文章

随机推荐

  • Observable Angular2

    我的 Angular2 应用程序中有对象数组 当新对象到达时 我使用 SignalR 填充数组 现在的重点是当新对象到达时我遇到了错误 无法读取未定义的属性 我认为这可能是错误的 因为它的工作是异步的 并且在 html 中我曾经在对象内部获
  • WIF - FederatedSignOut 未将用户注销所有站点

    我正在使用 Windows 身份基础 对于一些 MVC 2 0 站点 我在将某人从所有受 WIF 保护的网站中注销时遇到了真正的问题 看起来我的注销只是将当前站点上的人员注销 这是我的代码 public void FederatedSign
  • Rails:从另一个模型调用一个模型。为什么这是不可能的?

    我有以下型号 class Room lt ActiveRecord Base belongs to hotel belongs to layout has many visits validates number presence true
  • 调用fopen时的内存分配不清楚

    1 File fp 2 fp fopen etc myfile txt w 3 fclose fp Now 我读了这个 在语句 1 中 在堆栈上为指针创建了一个 FILE 类型的 4 字节内存 在语句2中 在堆上分配了一块内存 sizeof
  • Firebase 实时数据库 CORS 问题

    我在网站上使用 Firebase 实时数据库 一切正常 但是 当我想使用自定义 json 令牌进行身份验证时 我收到如下 CORS 问题 来自另一个被阻止的源的请求 相同的源策略阻止读取远程资源位于https www googleapis
  • 设置自定义锚点

    有没有办法在实际 HTML 标记之外的位置自定义设置锚点 我正在使用这个简单的视差滚动脚本 名为 smoothscroll js at http www kryogenix org code browser smoothscroll smo
  • 执行中的Python sqlite3字符串变量

    我尝试在 Python 中执行这个 sqlite3 查询 我将代码减少到最少 sqlite connect 等有效 column Pron 1 Pers Sg goal gender constrain Mann with con cur
  • 为什么BroadcastReceiver没有在后台运行?

    在一个应用程序 App1 中 我正在广播一条消息 下面的代码是正确的 gt 如果我尝试在同一项目中获取广播 则会检测到广播 sendBroadcast new Intent com example MESSAGE INTENT putExt
  • 为什么[对象释放]后retainCount还是1?

    NSLog first u object retainCount object release NSLog second u object retainCount Output first 1 second 1 为什么对象没有被释放 引自
  • 删除或替换零宽度非连接字符

    我想删除零宽度非连接器字符串中的字符但使用str replace没用 只要您小心替换的内容 str replace 应该可以解决这个问题 xE2 x80 x8C is ZERO WIDTH NON JOINER foo foo xE2 x8
  • 找不到类 javax.naming.directory.InitialDirContext

    我正在使用此链接中的示例http www rgagnon com javadetails java 0452 html但我收到错误 Could not find class javax naming directory InitialDir
  • 如何在 src/main/resources 中创建文件

    如果我这样做 fis new FileInputStream new File getAbsolutePath sudoinput txt 它尝试写入服务器上的此位置 我不确定这是否可写 地方 FILE NAME fos opt tomca
  • 为什么我的 urls.py 不能与 Django 一起使用

    今天 当我用 Building a blog in 30 mins with Django Screencast 编写我的博客时 我遇到了一些问题 当我点击文章标题时 它无法出现正确的页面 Page not found 404 Reques
  • 在 Magento 中停止事件观察者结帐的正确方法是什么?

    我正在 checkout controller onepage save shipping method 活动期间验证运输报价 如果验证失败 我想将用户发送回运输方式选择 但我还想显示一条消息 说明失败的原因 Magento 有内置的方法吗
  • 为什么这个日期转换需要在月份上加1?

    我在 JavaScript 中有这个日期变量 scope dt内容是Tue Jul 08 2014 00 00 00 GMT 0800 Malay Peninsula Standard Time 我想将其转换为返回一个字符串2014 7 8
  • Altair 颜色分级值

    在以下直方图中对分级值进行着色时遇到问题 我打算对 x 轴 信用度 上小于 50 的所有条形进行着色 在 Altair 中这是如何完成的 base alt Chart X train histogram base mark bar enco
  • 将 javascript 客户端连接到 python websocket 服务器

    我有这个工作 python websocket 服务器 usr bin env python from socket import HOST PORT 8080 BUFSIZ 1024 ADDR HOST PORT tcpSerSock s
  • 如何使用开始和结束索引对 numpy 行进行切片

    index np array 1 2 2 4 1 5 5 6 z np zeros shape 4 10 dtype np float32 有什么有效的设置方法z np arange 4 index 0 z np arange 4 inde
  • 使用 Google Maps API 进行地理编码 - 更新现有标记而不是添加另一个标记

    在进行地理编码时 如何简单地将现有标记移动到新地理编码结果的结果中 让我们看这个例子 地图加载时 会出现一个标记 当有人进行地理编码时 标记会移动到结果 标记是可拖动的 因此用户可以进一步移动标记 如果他们愿意 也许他们想要重新对位置进行地
  • A-Frame .obj 模型显示但已损坏

    这里是框架的初学者 已经完成了教程场景 现在正在设置我的第一个使用 obj 模型 使用远程服务器 感觉这是重要的信息 我看到过有关模型未显示的问题 但我的模型显示已损坏 我不知道从哪里开始修复它 This is how it looks i