当前位置:  开发笔记 > 编程语言 > 正文

如何使用THREE.DecalGeometry为贴花设置正确的方向

如何解决《如何使用THREE.DecalGeometry为贴花设置正确的方向》经验,为你挑选了0个好方法。

我试图了解如何使用THREE.DecalGeometry将贴花添加到网格中

我正在为每个面上的顶点添加贴花 - face.a,我尝试使用face normal和任意Vector3来定义贴花的方向.

我无法理解为什么没有正确创建所有贴花.我哪里出错了方向?脸部正常不正确吗?

function addObjects(){
    var geometry = new THREE.BoxGeometry(200, 200, 200, 8, 8, 8);
    var material = new THREE.MeshLambertMaterial({color: 0xff0000});
    cube = new THREE.Mesh(geometry, material);

    // addWireframeHelper(cube, 0xffffff, 1);

scene.add(cube);
  THREE.ImageUtils.crossOrigin = 'Anonymous';
    var texture = THREE.ImageUtils.loadTexture( 'http://i.imgur.com/RNb17q7.png' );
    geometry.faces.forEach(function(face){
    var index = face.a;
    var vertex = geometry.vertices[index];
    var direction = new THREE.Vector3(0,1,0);
    addDecal(cube, vertex, direction, texture);
})
}

function addDecal(mesh, position, direction, texture){
var size = 16;
var decalGeometry = new THREE.DecalGeometry(  
    mesh, 
    position, 
    direction,   
    new THREE.Vector3(size,size,size), 
    new THREE.Vector3(1,1,1)   
);

var decalMaterial = new THREE.MeshLambertMaterial( {
    map: texture,
    transparent: true, 
    depthTest: true,
    depthWrite: false,
    polygonOffset: true,
    polygonOffsetFactor: -4,
});

    var m = new THREE.Mesh( decalGeometry, decalMaterial );
    mesh.add(m);
}

这是热点64px x 64px

热点

这是他们如何映射...

立方体

为什么一些贴花会拉长?

我已经设置了一个JSFIDDLE

编辑:

使用WestLangley建议的SphereBufferGeometry,我现在很高兴这个解决方案对我有用.

在此输入图像描述

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有