无法使用Three.js加载从搅拌机导出的纹理Collada

程序_D

我正在使用Three.js,版本71我正在使用Blender,版本2.73

我使用Blender创建了一个纹理化的collada对象(.dae文件),现在我想将其加载到我的three.js场景中。到目前为止,我只能加载从搅拌器导出的没有纹理的模型。

这是创建带纹理的collada对象的方法:
在Blender中,我仅使用默认多维数据集。使用右侧的设置,将纹理添加到多维数据集。这是我要放置到立方体上的纹理(注意:它是2048 X 2048,所以是2的幂):Collada的纹理(2048 X 2048)

Here is an image of the cube in render mode to prove that the texture is on it: 纹理的Collada

Here are the export settings I used when I exported the cube as a collada from Blender: Collada导出设置

Here is some code I used to try to load the textured collada:

var loader = new THREE.ColladaLoader();
var localObject;
loader.options.convertUpAxis = true;
loader.load( './models/test_texture.dae', function ( collada ) {
  localObject = collada.scene;
  localObject.scale.x = localObject.scale.y = localObject.scale.z = 32;
  localObject.updateMatrix();
  game.scene.add(localObject);
} );

Here is the error I got:

[.WebGLRenderingContext]GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 2

I then googled that error message and someone said the I need to compute tangents. Here are my attempts at that and the errors I got:

var loader = new THREE.ColladaLoader();
var localObject;
loader.options.convertUpAxis = true;
loader.load( './models/test_texture.dae', function ( collada ) {
  localObject = collada.scene;
  localObject.scale.x = localObject.scale.y = localObject.scale.z = 32;
  localObject.updateMatrix();

  for (var i = collada.scene.children.length - 1; i >= 0; i--) {
    var child = collada.scene.children[i];

    // child.children[0] will give us the THREE.Mesh of the collada
    if ( child.colladaId == "Cube" ) {

      // ATTEMPT 1: Just tried computing tangets based on answer from neoRiley here: http://stackoverflow.com/questions/21200386/webgl-gl-error-gl-invalid-operation-gldrawelements-attempt-to-access-out-of
      // child.children[0].geometry.computeTangents();

      // ATTEMPT 2: Got this suggestion from Popov here: http://stackoverflow.com/questions/15717468/three-lod-and-normalmap-shader-fail
      // child.children[0].geometry[ 0 ][ 0 ].computeTangents();
      // child.children[0].geometry[ 1 ][ 0 ].computeTangents();

      // ATTEMPT 3: Tried setting some update flags based on answer from Sayris here: http://stackoverflow.com/questions/13988615/webglrenderingcontext-error-loading-texture-maps
      // child.children[0].geometry.buffersNeedUpdate = true;
      // child.children[0].geometry.uvsNeedUpdate = true;
      // child.children[0].material.needsUpdate = true;
      // child.children[0].geometry.computeTangents();
    }
  };
  game.scene.add(localObject);
} );

ATTEMPT 1 ERROR:

Uncaught TypeError: Cannot read property '0' of undefined
// Stack trace
three.js:9935 handleTriangle
three.js:9974 THREE.Geometry.computeTangents
myCode.js:116 (anonymous function)
ColladaLoader.js:204 parse
ColladaLoader.js:84 request.onreadystatechange

ATTEMPT 2 ERROR:

Uncaught TypeError: Cannot read property '0' of undefined

This came from own code. I didn't think geometry of THREE.Mesh is two dimensional, but I tried it anyway.

ATTEMPT 3 ERROR: (same as ATTEMPT 1 ERROR)

Uncaught TypeError: Cannot read property '0' of undefined
// Stack trace
three.js:9935 handleTriangle
three.js:9974 THREE.Geometry.computeTangents
myCode.js:116 (anonymous function)
ColladaLoader.js:204 parse
ColladaLoader.js:84 request.onreadystatechange
Programmer_D

I decided to use the JSON loader instead because I couldn't get the collada one to work. The first thing I did was install the JSON exporter addon into Blender. I got the addon from the .zip file from my three.js download. It's in three.js-r71/utils/exporters/blender/addons and it's called io_three. You just need to copy that folder and paste it in your Blender installation directory in Blender Foundation/Blender/2.73/scripts/addons.

You then have to enable it in Blender. To do that:

  1. Click to File->User Preferences...
  2. Click Add-ons
  3. Type three in the search field
  4. All the way to the right, click the check box to enable it
  5. At the bottom left, click Save User Settings so you don't need to do this again. You'll know it's working if you see Three.js (.json) when you click File->Export.

I followed most of the instructions from this site to help me create and export a model: http://graphic-sim.com/B_basic_export.html

Here are the steps I used to create and export the model (I tweaked them a little bit from the site)

  1. Start up Blender.
  2. Look at the Properties editor (on the right).
  3. Press the World context button. In the World panel click Ambient Color and change it from black to middle gray.
  4. Press the Material context button. On the Diffuse panel change Intensity to 1.0. Do the same on the Specular panel. In the Shading panel put a check in the Shadeless box.
  5. Press the Textures context button. Near the top in the Type drop down box, select Image or Movie. In the Image panel, browse to your image (make sure the image's dimensions are in a power of 2).
  6. Choose the UV Editing screen layout (drop-down box to right of help menu at top). UV编辑菜单
  7. With mouse cursor in 3D editor, go into edit mode (Tab key).
  8. Unwrap (Press the U key). Choose Smart UV Project. Click Ok to accept defaults.
  9. In the UV Editing screen, select your image using the menu at the bottom left (see screenshot) 在UV版面中选择图像
  10. Select Image->Save As Image. This image will need to be next to your JSON file that you will export.
  11. Click File->Export->Three.js (.json).
  12. To the left, select a few more export options (see screenshot for the ones i used, which I found by trial and error). I think I only added Face Materials, Materials, and Textures. You can then also click Save Settings to save these settings. JSON导出设置
  13. 将您先前保存的JSON文件和图像文件放入项目文件夹中。
  14. 使用以下代码加载它:

    var object;
    var loader = new THREE.JSONLoader();          
    loader.load( "./models/test_texture.json", function(geometry, materials) {
      object = new THREE.Mesh(geometry, materials[0]);
      object.scale.set(32, 32, 32);
      game.scene.add(object);
    });
    

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从搅拌机中导出的具有金属质感且无粗糙质感的gltf加载到具有与金属质感相匹配的粗糙度纹理的Three.js中

来自分类Dev

无法建立搅拌机

来自分类Dev

无法正确安装搅拌机

来自分类Dev

无法正确安装搅拌机

来自分类Dev

如何保存“组件”以在搅拌机中重复使用

来自分类Dev

搅拌机烘焙纹理返回黑色

来自分类Dev

THREE.js-无法在本地加载纹理

来自分类Dev

无法使用Three.js加载动画

来自分类Dev

Three.js跨源错误加载相关的Collada文件纹理

来自分类Dev

使用 snap 安装版本的搅拌机在 nautilus 上打开 .blend 文件

来自分类Dev

带有纹理的Three.js无法使用.png文件加载

来自分类Dev

从搅拌机导出浮子并读取错误的值

来自分类Dev

从搅拌机到食人魔的导出按钮无效

来自分类Dev

搅拌机的自定义导出脚本

来自分类Dev

搅拌机不想启动

来自分类Dev

使用Three.js对球体进行纹理处理无法在智能手机上使用

来自分类Dev

如何在搅拌机中将图像添加到绘制的纹理?

来自分类Dev

Three.js的Colada纹理导出

来自分类Dev

无法使用Three.js导入OrbitControls.js

来自分类Dev

无法使用React Spring设置THREE.js属性的动画

来自分类Dev

three.js无法使用预先创建的画布

来自分类Dev

无法使用Three.js显示Blender导入的网格

来自分类Dev

搅拌机和康达

来自分类Dev

搅拌机扭曲的用户界面

来自分类Dev

Three.js Collada-在三个js中加载多个Collada对象

来自分类Dev

使用Three.js THREE.textureLoader预加载多个纹理

来自分类Dev

在Three.js中使用二进制加载器加载对象无法正常工作

来自分类Dev

Three.js,从Collada导入的相机无法查看对象场景

来自分类Dev

从Blender导出为COLLADA / .dae格式以在SceneKit中使用时包括纹理

Related 相关文章

  1. 1

    从搅拌机中导出的具有金属质感且无粗糙质感的gltf加载到具有与金属质感相匹配的粗糙度纹理的Three.js中

  2. 2

    无法建立搅拌机

  3. 3

    无法正确安装搅拌机

  4. 4

    无法正确安装搅拌机

  5. 5

    如何保存“组件”以在搅拌机中重复使用

  6. 6

    搅拌机烘焙纹理返回黑色

  7. 7

    THREE.js-无法在本地加载纹理

  8. 8

    无法使用Three.js加载动画

  9. 9

    Three.js跨源错误加载相关的Collada文件纹理

  10. 10

    使用 snap 安装版本的搅拌机在 nautilus 上打开 .blend 文件

  11. 11

    带有纹理的Three.js无法使用.png文件加载

  12. 12

    从搅拌机导出浮子并读取错误的值

  13. 13

    从搅拌机到食人魔的导出按钮无效

  14. 14

    搅拌机的自定义导出脚本

  15. 15

    搅拌机不想启动

  16. 16

    使用Three.js对球体进行纹理处理无法在智能手机上使用

  17. 17

    如何在搅拌机中将图像添加到绘制的纹理?

  18. 18

    Three.js的Colada纹理导出

  19. 19

    无法使用Three.js导入OrbitControls.js

  20. 20

    无法使用React Spring设置THREE.js属性的动画

  21. 21

    three.js无法使用预先创建的画布

  22. 22

    无法使用Three.js显示Blender导入的网格

  23. 23

    搅拌机和康达

  24. 24

    搅拌机扭曲的用户界面

  25. 25

    Three.js Collada-在三个js中加载多个Collada对象

  26. 26

    使用Three.js THREE.textureLoader预加载多个纹理

  27. 27

    在Three.js中使用二进制加载器加载对象无法正常工作

  28. 28

    Three.js,从Collada导入的相机无法查看对象场景

  29. 29

    从Blender导出为COLLADA / .dae格式以在SceneKit中使用时包括纹理

热门标签

归档