Threejs 加载 DAE 模型遇到关题汇总

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

我们来一起看一个 Threejs 官方的示例:

http://threejs.org/examples/#webgl_loader_collada_skinning

http://threejs.org/examples/webgl_loader_collada_skinning.html

<!DOCTYPE html>
<html lang="en">
	<head>
		<title>three.js webgl - collada - skinning</title>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
		<style>
			body {
				color: #000;
				font-family:Monospace;
				font-size:13px;
				text-align:center;

				background-color: #000;
				margin: 0px;
				overflow: hidden;
			}

			#info {
				position: absolute;
				top: 0px; width: 100%;
				padding: 5px;
			}

			a {

				color: #f00;
			}

		</style>
	</head>
	<body>

		<div id="container"></div>

		<div id="info">
		<a href="http://threejs.org" target="_blank">three.js</a> webgl - collada - skinning
		</div>

		<script src="../build/three.min.js"></script>
		<script src="js/loaders/ColladaLoader.js"></script>
		<script src="js/Detector.js"></script>
		<script src="js/libs/stats.min.js"></script>

		<script>

			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();

			var container, stats;
			var camera, scene, renderer;
			var clock = new THREE.Clock();

			init();

			function init() {

				container = document.getElementById( ‘container‘ );

				camera = new THREE.PerspectiveCamera( 25, window.innerWidth / window.innerHeight, 1, 10000 );
				camera.position.set( -5, -5, 5 );
				camera.up.set( 0, 0, 1 );

				scene = new THREE.Scene();

				var light = new THREE.DirectionalLight( 0xffffff, 1.5 );
				light.position.set( 0, -4, -4 ).normalize();
				scene.add( light );

				renderer = new THREE.WebGLRenderer( { antialias: true } );
				renderer.setClearColor( 0xfff4e5 );
				renderer.setSize( window.innerWidth, window.innerHeight );
				renderer.sortObjects = false;

				container.appendChild( renderer.domElement );

				stats = new Stats();
				stats.domElement.style.position = ‘absolute‘;
				stats.domElement.style.top = ‘0px‘;
				container.appendChild( stats.domElement );

				var loader = new THREE.ColladaLoader();
				loader.load( "./models/collada/avatar.dae", function ( collada ) {

					collada.scene.traverse( function ( child ) {

						if ( child instanceof THREE.SkinnedMesh ) {

							var animation = new THREE.Animation( child, child.geometry.animation );
							animation.play();

							camera.lookAt( child.position );

						}

					} );

					scene.add( collada.scene );

				} );

				window.addEventListener( ‘resize‘, onWindowResize, false );

				animate();

			}

			function onWindowResize() {

				camera.aspect = window.innerWidth / window.innerHeight;
				camera.updateProjectionMatrix();

				renderer.setSize( window.innerWidth, window.innerHeight );

			}

			function animate() {

				requestAnimationFrame( animate, renderer.domElement );

				THREE.AnimationHandler.update( clock.getDelta() );

				renderer.render( scene, camera );

				stats.update();

			}

		</script>

	</body>
</html>

其中加载的 dae 模型

 "./models/collada/avatar.dae",

的完整地址如下:

http://threejs.org/examples/models/collada/avatar.dae

使用 Mac 操作系统的 Finder 直接可以选中下载到的 avatar.dae ,按空格弹出查看窗口,效果如下:

使用文本编辑器打开 avatar.dae ,搜索 library_images 关键字,找到如下部分:

 <library_images>
    <image id="VWS_B_Male2-2_jpg">
      <init_from>VWS_B_Male2-2.jpg</init_from>
    </image>
  </library_images>

按相对于 dae 的路径,拼接出贴图文件的完整地址:

http://threejs.org/examples//models/collada/VWS_B_Male2-2.jpg

将该贴图下载并保存到 avatar.dae 同一目录下,这样再用 Finder 查看,即可看到贴上图的模型了。

由此可见,dae 是一个完整的自维护的模型,通过其内的 xml 组织的信息,足以呈现并贴图所承载的模型,甚至于灯光、动画,等等。

以下角度,可以看到模型有高亮的部分,这里初步可以断定是帖图图片上的灯光信息,也即该贴图是烘焙上了灯光信息的。

可以这样来确认,非环境光所照,以下用 xcode 打开 dae ,看其 Lights 部分为空,表示没有任何灯光。

这里有个技巧,如果你拿到的 dae 模型中有灯光光源,而你又不想要其中的环境光源,那么可以用文本编辑器打开这个 dae,并找到 ambient XML 标签:

        <ambient>
          <color></color>
        </ambient>

将其下 color 的内容即环境光的三色值去掉,这样环境光就不起作用了。

Threejs 加载 DAE 模型遇到关题汇总

时间: 2024-10-31 04:20:58

Threejs 加载 DAE 模型遇到关题汇总的相关文章

ceisum_加载倾斜摄影模型

osgb转换为3Dtiles格式(使用工具转换) 然后加载到cesium中(加载代码见下,可以控制模型高度) var offset = function(height,tileset) { console.log(height); height = Number(height); if (isNaN(height)) { return; } var cartographic = Cesium.Cartographic.fromCartesian(tileset.boundingSphere.ce

xBIM 实战01 在浏览器中加载IFC模型文件

一.创建Web项目 打开VS,新建Web项目,选择 .NET Framework 4.5 选择一个空的项目 新建完成后,项目结构如下: 二.添加webServer访问文件类型 由于WexXplorer 加载的是 .wexBIM格式的文件或者文件流,所以需要在Web.config文件中添加如下配置 <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLeng

xBIM 实战02 在浏览器中加载IFC模型文件并设置特效

系列目录    [已更新最新开发文章,点击查看详细] 在模型浏览器中加载模型后,可以对模型做一些特殊操作.下图是常用的设置. 都是通过 xbim-viewer.js 中的 API 来设置以达到一定的效果.代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>xViewer</title> 5 <meta http-equiv="content-type" content=&

边练边学--plist文件,懒加载,模型初使用--补充instancetype

一.什么是plist文件 1>将数据直接写在代码里面,不是一种合理的做法.如果数据经常修改,就要经常翻开对应的代码进行修改,造成代码扩展性低 2>因此,可以考虑将经常变得数据放在文件中进行存储,程序启动后从文件中读取最新的数据.如果要变动数据,直接修改数据文件即可,不用修改代码 3>一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种“属性列表文件”的扩展名是plist,因此也成为“plist文件” 二.创建plist文件 三.解析plist文件 代码实

OpenGL学习脚印:模型加载初步-加载obj模型(load obj model)

写在前面 前面介绍了光照基础内容,以及材质和lighting maps,和光源类型,我们对使用光照增强场景真实感有了一定了解.但是到目前为止,我们通过在程序中指定的立方体数据,绘制立方体,看起来还是很乏味.本节开始介绍模型加载,通过加载丰富的模型,能够丰富我们的场景,变得好玩.本节的示例代码均可以在我的github下载. 加载模型可以使用比较好的库,例如obj模型加载的库,Assimp加载库.本节作为入门篇,我们一开始不使用这些库加载很酷的模型,而是熟悉下模型以及模型加载的概念,然后我们封装一个

第八章:加载Maya2011模型

原文链接: http://www.rastertek.com/gl40tut08.html Tutorial 8: Loading Maya 2011 Models This tutorial will cover how to import static 3D models from Maya 2011. Note that this tutorial will be focused on Maya but it also applies to pretty much any other 3D

cesium 加载倾斜摄影模型(这里有一坑)

代码如下: 1 // Construct the default list of terrain sources. 2 var terrainModels = Cesium.createDefaultTerrainProviderViewModels(); 3 4 // Construct the viewer with just what we need for this base application 5 var viewer = new Cesium.Viewer('cesiumCont

机器学习之保存与加载.pickle模型文件

import pickle from sklearn.externals import joblib from sklearn.svm import SVC from sklearn import datasets #定义一个分类器 svm = SVC() iris = datasets.load_iris() X = iris.data y = iris.target #训练模型 svm.fit(X,y) #1.保存成Python支持的文件格式Pickle #在当前目录下可以看到svm.pic

tensorflow加载embedding模型进行可视化

1.功能 采用python的gensim模块训练的word2vec模型,然后采用tensorflow读取模型可视化embedding向量 ps:采用C++版本训练的w2v模型,python的gensim模块读不了. 2.python训练word2vec模型代码 import multiprocessing from gensim.models.word2vec import Word2Vec, LineSentence print('开始训练') train_file = "/tmp/train