首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >刻度不均匀导致错误的进口顶点法线

刻度不均匀导致错误的进口顶点法线
EN

Stack Overflow用户
提问于 2017-08-26 02:55:39
回答 1查看 468关注 0票数 2

设想情况:

a.我在3ds max中有一个默认的球面。

我在X轴上缩小了10次,然后出口到obj.

把缩小的球体导入3JS,然后再放大X 10次。

我想让球体看起来像步骤A-在它被缩小之前-我需要保持输入的顶点法线,而不是在3JS中计算

代码语言:javascript
运行
复制
____

问题:

  • 该球体即使在缩放后仍具有与进口时相同的顶点法线,进口的顶点法线不通过3JS中的缩放更新,因此光照对球体的影响不再正确。请看这些jsFiddle来理解我在说什么:

JsFiddle演示:

  1. 按最大值缩小,在3JS中放大,从而产生错误的法线:http://jsfiddle.net/uury1jtt/5/
  2. 默认球面来自Max,不缩放任何东西,没有问题,只是为了演示一个正确的顶点法线应该是什么样子:http://jsfiddle.net/uury1jtt/4/

(球面只是为了简化样本,通常可以是任何网格)

原因:

我想对进口的非制服网进行缩放,以不同的形状重复使用它。

请给我一些关于如何解决这个问题的建议。每一个想法都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-28 20:05:39

那是因为你的法线在x方向上都压扁了。您必须深入挖掘BufferGeometry的属性,并手动“拉伸”这些法线:

尝试用以下代码替换JSFiddle中的JSFiddle回调:

代码语言:javascript
运行
复制
document.getElementById("scaleButton").onclick = function(){
    object.scale.set(10,1,1);

    // Get the 'normal' attribute of the geometry
    var normals = object.children[0].geometry.getAttribute("normal");

    // Manually stretch the x-value of the normal by 10
    for(var i3 = 0; i3 < normals.length; i3 +=3){
        normals.array[i3] = normals.array[i3] * 10;
    }

    // Inform the renderer that the attribute was altered
    normals.needsUpdate = true;
}

工作JSFiddle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45891506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档