Three.JS中的纹理为黑色
Textures are Black in Three.JS
我有一个模型,我正在从blender 2.76b导出到json中,然后用three.js 71加载。搅拌机模型看起来不错。在webGL中,模型是完全黑色的。我认为这与纹理有关,但我不确定。该模型是一个相当复杂的模型,由maya制成,并导出为fbx。我用更简单的模型和不同的纹理进行了测试,没有遇到任何问题,但这个有问题。
如有任何建议,我们将不胜感激。
json链接:http://we.tl/GnQiOfAhOD
这是代码。
<!DOCTYPE html>
<html lang="en">
<head>
<title>MultiLoader</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 {
font-family: Monospace;
background-color: #000;
color: #000;
margin: 0px;
overflow: hidden;
}
#info {
text-align: center;
padding: 10px;
z-index: 10;
width: 100%;
position: absolute;
}
a {
text-decoration: underline;
cursor: pointer;
}
#stats { position: absolute; top:0; left: 0 }
#stats #fps { background: transparent !important }
#stats #fps #fpsText { color: #aaa !important }
#stats #fps #fpsGraph { display: none }
</style>
</head>
<body>
<div id="info">MultiLoader Testing</div>
<script src="build/three.js"></script>
<script src="js/OrbitControls.js"></script>
<script src="js/Detector.js"></script>
<script src="js/libs/stats.min.js"></script>
<script src="js/ColladaLoader.js"></script>
<script src="js/OBJLoader.js"></script>
<script>
WIDTH = window.innerWidth,
HEIGHT = window.innerHeight;
VIEW_ANGLE = 45,
ASPECT = WIDTH / HEIGHT,
NEAR = 1,
FAR = 10000;
var container, stats;
var camera, scene, renderer;
init();
animate();
function init() {
container = document.createElement( 'div' );
document.body.appendChild( container );
// SCENE
scene = new THREE.Scene();
scene.fog = new THREE.Fog( 0xffffff, 500, 10000 );
// CAMERA
camera = new THREE.PerspectiveCamera(VIEW_ANGLE, ASPECT, NEAR, FAR);
camera.position.set(60, 40, 120);
camera.lookAt(scene.position);
scene.add(camera);
//LIGHTS
var front = new THREE.DirectionalLight( 0xffffff, 5.4 );
front.position.set( 0, 140, 1500 );
front.position.multiplyScalar( 1.1 );
//front.color.setHSL( 0.6, 0.075, 1 );
scene.add( front );
var ambient = new THREE.AmbientLight(0xffffff);
scene.add( ambient );
var back = new THREE.DirectionalLight( 0xffffff, 0.5 );
back.position.set( 0, -140, -1500);
scene.add( back );
//Avatar Tests
var loader = new THREE.JSONLoader();
loader.load('models/Maya/modelExport.json', function ( geometry, materials ) {
material = new THREE.MeshFaceMaterial( materials );
avatar = new THREE.Mesh( geometry, material );
}
);
loader.onLoadComplete=function(){
avatar.scale.set(30, 30, 30);
var position = new THREE.Vector3(0,-20,0);
avatar.position.add(position);
scene.add( avatar );
}
// RENDERER
renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.setClearColor( scene.fog.color );
renderer.gammaInput = true;
renderer.gammaOutput = true;
renderer.shadowMapEnabled = true;
container.appendChild( renderer.domElement );
// Orbit Controls
controls = new THREE.OrbitControls( camera, renderer.domElement );
//controls.addEventListener( 'change', render ); // add this only if there is no animation loop (requestAnimationFrame)
controls.enableDamping = true;
controls.dampingFactor = 0.25;
controls.enableZoom = true;
//
stats = new Stats();
container.appendChild( stats.domElement );
//
window.addEventListener( 'resize', onWindowResize, false );
}
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
}
function animate() {
requestAnimationFrame( animate );
render();
stats.update();
}
function render() {
camera.lookAt( scene.position );
renderer.render( scene, camera );
}
</script>
</body>
</html>
代码和模型存在几个问题。
对于模型:条目mapLight
应命名为mapDiffuse
。我知道你正在导出模型,所以你需要找到如何实现这一点。
对于代码:
- 你的环境光线很强。它洗去了一切。尝试使用值
0x222222
或将其完全从场景中删除 camera
不需要添加到场景中- 移除
renderer.setClearColor( fog_color )
只是为了查看是否首先获得正确的网格和材质。然后你可以去场景效果 - 你的纹理尺寸太大了。webgl不支持它。尝试1024的大小,然后根据需要向上移动
- 最后,你的
loader.onLoadComplete()
永远不会被调用。在loader.load()
回调函数中移动这部分代码
在这一切之后,你会看到你的女孩。
相关文章:
- 使用jQuery以红色和黑色闪烁文本
- 在threejs中使用纹理网格和线框网格
- ThreeJS将画布中的文本渲染为纹理,然后应用于平面
- 将画布转换为pdf:黑色背景
- 无法在obj+mtl文件中加载纹理
- DT数据表背景颜色为黑色,但仍有悬停和选择颜色
- 加载collada纹理数据(.jpg本身)时对其进行操作
- 三js黑色材质,透明
- webgl在一个正方形上操纵两个纹理
- 如何在pixi.js多边形上放置纹理
- ThreeJS纹理加载:在火狐浏览器上黑色了一段时间
- 三.js - ColladaLoader - 动画模型 (DAE) - 黑色纹理
- 跨源 - 带有来自自己域的图像的黑色纹理
- Three.js:如何知道是否所有纹理都已完全加载并显示(并且没有黑色矩形残留)
- Three.JS中的纹理为黑色
- 使用CanvasRenderer的three.js纹理,但使用WebGLRenderer显示为黑色
- Threejs-将纹理应用于平面总是渲染为黑色,
- WebGL texParami设置导致纹理渲染为黑色
- 加载为黑色的Three.js纹理
- 什么会导致纹理在片段着色器中是黑色的?