Three.js: r73:没有用!!!

创建于 2015-10-16  ·  42评论  ·  资料来源: mrdoob/three.js

里卡多

您是否曾经在最新的r73版本上测试过以前的任何项目?
各种错误,无济于事!
你为什么要发布这样的东西?

Question

最有用的评论

发布会涉及很多步骤。 有时我的耐心/奉献精神用光了...:confused:
任何人都可以更新迁移页面。 我很乐意在那里获得帮助。

最近,我使用较旧版本的three.js遇到了此问题。

但是,在阅读完您收到的评论和侮辱之后,我没有寻求帮助,而是想感谢您维护three.js。

你是一个超级敬业和耐心的家伙! :+1:

所有42条评论

什么不起作用? 您遇到什么错误? 我始终确保所有示例仍然有效。 如果出现问题,我们应该添加一个示例进行测试。

什么不起作用?

没用!
只是一个示例(适合您):
http://necromanthus.com/Test/html5/dog_r72.html
http://necromanthus.com/Test/html5/dog_r73.html
错误:

  • THREE.MorphAnimMesh未定义
  • loader.load不是函数

你为什么要发布这样的东西?

啊! 我懂了。

我们已经完全替换了动画系统,并且SEA3D仍然依赖旧的动画系统(我认为@sunag正在更新)。

同时,您需要在项目中包括旧的动画系统:

<script src="js/MorphAnimMesh.js"></script>
<script src="js/loaders/collada/Animation.js"></script>
<script src="js/loaders/collada/AnimationHandler.js"></script>
<script src="js/loaders/collada/KeyFrameAnimation.js"></script>

您将在examples文件夹中找到文件。

我们已经完全取代了动画系统

同样,您搞砸了向后兼容性... OMG

无论如何,这还有别的(没有动画和加载器):
http://necromanthus.com/Test/html5/koolmoves_r72.html
http://necromanthus.com/Test/html5/koolmoves_r73.html
错误:

  • _typeface_js未定义
  • THREE.TextGeometry不是构造函数

老实说,r73是一团糟,应该将其删除。
干杯

大约1.5年以来,我一直依靠Three.js来编写ChiliPeppr。 今天早上,它看起来像THREE.FontUtils,它是未定义的,所以所有字体渲染在ChiliPeppr中都被破坏了。 我猜想它也是@RemusMar所指的r73问题。

FontUtilsTextGeometry utils也已从核心中删除。

现在,您必须分别包含文件:

<script src="js/geometries/TextGeometry.js"></script>
<script src="js/utils/FontUtils.js"></script>
<script src="fonts/helvetiker_regular.typeface.js"></script>

我决定将它们移出核心,因为无论如何,用户都必须包含*.typeface.js

@RemusMar我们不保证版本之间的向后兼容性。 但是,我们确实添加了过渡代码,以通知用户并在可能的时间/位置使代码保持工作状态。

FontUtils和TextGeometry utils也已从核心中删除。

您为什么不从核心中删除所有内容?
零字节的内核根本不需要下载。

我们不保证版本之间的向后兼容性。

里卡多的举动很糟糕。
正如我从一开始就说的:

在任何严肃的项目中,向后兼容性都是必须的。
否则,越来越少的人对该项目感兴趣。

干杯

您为什么不从核心中删除所有内容?
零字节的内核根本不需要下载。

我知道你是一个感性的家伙。 但是,您留在身边,所以我也收集到最后,您发现该项目很有用😉

在任何严肃的项目中,向后兼容性都是必须的。

也许这并不像您认为的那样严重? 我不是Adobe吗?

否则,越来越少的人对该项目感兴趣。

人们失去兴趣不是我担心的事情。 相反,我专注于创建一个漂亮的API,抽象出计算机图形的烦恼,同时,我希望该库适合100kb gzip压缩。 不可能永远包含人们添加的所有功能。

@RemusMar向后兼容性,如果您使用像这样的js库,并且如果不再支持某些功能,则应该可以自行修复问题。 如果没有,以更合作的方式提出,每个人都乐于提供帮助。 如果示例有问题,请随时修复...

@RemusMar当我开始使用JavaScript进行3D编程时,我了解到three.js的第一件事就是它不向后兼容。

我认为,总的来说这绝对没问题,因为我只需要确保在我的项目中链接到与我建立代码的相同版本的three.js。

迄今为止,不考虑向后兼容性的策略无疑是有机会以如此动态的方式,具有如此奇妙的可能性来开发three.js的基础。

里卡多这是一个坏举动

令人惊讶的是,人们经过70多次修订后如何注意到这一点)

但是要补充一点,最近有人在给我写信“最新的稳定Three.js是r72”,大声笑。 没有稳定的three.js。 他们不会使用错误修复程序来更新旧版本,而是提供了新版本的错误修复程序_and_破坏更改或新错误。

再说一遍,即使基础代码被颠倒了,有些事情仍然可以神奇地贯穿版本。 像使用缓冲几何体的外观)

当我们要讨论变更时,最让我生气的是json变更。 有人在他的3dmax中有旧的导出插件,我花了很长时间手动编辑json才能使动画正常工作。

再说一遍,即使基础代码被颠倒了,有些事情仍然可以神奇地贯穿版本。 像使用缓冲几何体的外观)

那花了点功夫! 😅

当我们要讨论变更时,最让我生气的是json变更。 有人在他的3dmax中有旧的导出插件,我花了很长时间手动编辑json才能使动画正常工作。

是。 动画需要尽快获得稳定。 我认为新的动画系统是朝正确方向迈出的重要一步。

鉴于您的r73更改,此示例似乎已损坏。 http://threejs.org/docs/scenes/geometry-browser.html#TextGeometry

image

哦! 永远忘记文档中的示例...

@mrdoob
我应该用什么来代替“旧的” THREE.Animation类?
是否有使用新动画系统的示例? 尚不清楚示例页面上的新增功能。

当我们要讨论变更时,最让我生气的是json变更。 有人在他的3dmax中有旧的导出插件,我花了很长时间手动编辑json才能使动画正常工作。

这也是我的关注点。 我真的不想再出口数百个模型。

@jostschmithals
迄今为止,不考虑向后兼容性的策略无疑是有机会以如此动态的方式,具有如此奇妙的可能性来开发three.js的基础。

那是错误的说法。
实际上,一直破坏向后兼容性会使第三方开发人员放弃THREE.js
另一方面,新功能和错误修复并不意味着破坏与旧项目的兼容性。
如果里卡多会继续走这条路,时间会证明我是否正确。
干杯

这也是我的关注点。 我真的不想再出口数百个模型。

同意! json格式是我认为向后兼容非常重要的地方。 反正也不难做。

同意! json格式是我认为向后兼容非常重要的地方。 反正也不难做。

大松一口气=]

涉及重大更改时,发布版本而不更新迁移指南似乎还为时过早。 对我来说,幸运的是,因为我遵循这些规则,所以我意识到了动画更改。 我敢打赌所有用户都准备就绪。

我确实同意Remus关于从核心删除内容只是为了保持100KB的大小限制。 我个人关心的功能要比减少几个字节多10000倍。 我知道我可以从示例中获取必要的文件,但是这似乎是不必要的麻烦(尤其是每次发行时都必须更新它们)。

无论如何,我都在抱怨。 除了这些批评,令人惊叹的工作人员!

涉及重大更改时,发布版本而不更新迁移指南似乎还为时过早。

发布会涉及很多步骤。 有时候我的耐心/奉献用光了...😕
任何人都可以更新迁移页面。 我很乐意在那里获得帮助。

鉴于您的r73更改,此示例似乎已损坏。 http://threejs.org/docs/scenes/geometry-browser.html#TextGeometry

固定!

在r74的哪里可以找到FontUtils? 似乎要在r74中删除...

@pjanik

是的,对此感到抱歉, TextGeometry API再次更改。 虽然它回到了核心!

请使用http://threejs.org/examples/webgl_shadowmap.html作为参考。

var loader = new THREE.FontLoader();
loader.load( 'fonts/helvetiker_bold.typeface.js', function ( font ) {

    var textGeo = new THREE.TextGeometry( "THREE.JS", {

        font: font,

        size: 200,
        height: 50,
        curveSegments: 12,

        bevelThickness: 2,
        bevelSize: 5,
        bevelEnabled: true

    });

    textGeo.computeBoundingBox();
    var centerOffset = -0.5 * ( textGeo.boundingBox.max.x - textGeo.boundingBox.min.x );

    var textMaterial = new THREE.MeshPhongMaterial( { color: 0xff0000, specular: 0xffffff } );

    var mesh = new THREE.Mesh( textGeo, textMaterial );
    mesh.position.x = centerOffset;
    mesh.position.y = FLOOR + 67;

    mesh.castShadow = true;
    mesh.receiveShadow = true;

    scene.add( mesh );

} );

如果有人感兴趣,这就是我使用NPM [email protected]模块和webpack加载字体而无需异步请求的方式: https ://gist.github.com/pjanik/49c03c02c66341a26904
如果您使用任何其他构建工具,则关键是将字体文件加载为字符串。 也许将来可以将这种有趣的解析提取为某种辅助方法?

附带一提,r74包含/examples目录(r73没有)是很酷的,请继续这样做。 :wink:最后,我只能使用three软件包,而不再使用外部脚本文件(我也使用examples/js/controls/OrbitControls )。 如果使用UMD格式发布示例,那就更酷了,所以我可以直接要求OrbitControls,而不必忽略全局的三个依赖关系(这不是什么大问题,因为大多数构建工具可以处理它,但仍然可以)。

谢谢!

或者您可以只在本地定义_typeface_js.loadFace并进行评估?

是的,对此感到抱歉,TextGeometry API再次更改。 虽然它回到了核心!

这是里卡多的明智决定。
需要对加载程序进行较小的语法更改,但它是向后兼容的。
r71: http ://necromanthus.com/Test/html5/koolmoves.html
r74: http ://necromanthus.com/Test/html5/koolmoves_r74.html
干杯

是否应该在ObjectLoader中增加文本几何的加载?

@fraguada很好,不是那么容易,我们还应该处理字体文件...

我得到的r74版本中未定义FontUtil: https :

这似乎与http://threejs.org/examples/webgl_shadowmap.html所使用的(缩小的除外)相同,但我也没有明确看到它包括FontUtils或字体...但是该示例页面仍然有效。 (尽管我仍然得到“未定义_typeface_js”)您除了在注释中显示的内容(此示例上方的代码示例6个注释)之外还执行其他操作吗?

该文档需要随着API的更改而更新,这不再适用: http :

如果有一个非常基本的示例而没有所有按键记录切换字体,粗细和斜角,那将非常有用。 并不是说这些也不是一件好事,但是示例中的一个简单的基础将为我节省大量时间。

这个例子可能对我们有很大帮助: http :

我将这个简单的示例放在JSFiddle上,以供发现此线程的任何人使用。
https://jsfiddle.net/287rumst/1/

有一个非常基本的例子会超级有用

r75和r76dev:
http://necromanthus.com/Test/html5/koolmoves.html

我只花了两分钱,因为我也是向后兼容的粉丝:

如果不能保证兼容性,最好在github中有一个upgrade文件夹(或fixes )来显示旧版本和新处理方式。 参考。

这样,程序员可以轻松地赶上这些更改。

由于此类“未知”问题,我仍在使用r65,因此我没有多余的时间花费在弄清楚如何解决这些问题上。

大家好,我只是从r71转到r76,发现了新的animation.mixer。 因此,为了保持较早的json 3D对象库正常工作,我将MorphAnimMesh.js Animation.js AnimationHandler.js和KeyFrameAnimation.js复制到了我的JavaScript库中。 但是现在我收到“数据层次结构未定义”错误。 这是否意味着我必须从Blender重新导出所有以前的3D json对象,还是有办法使它们继续工作?

您好,有人帮忙“ undefined data.hierarchy”吗?

请使用StackOverflow寻求帮助。

发布会涉及很多步骤。 有时我的耐心/奉献精神用光了...:confused:
任何人都可以更新迁移页面。 我很乐意在那里获得帮助。

最近,我使用较旧版本的three.js遇到了此问题。

但是,在阅读完您收到的评论和侮辱之后,我没有寻求帮助,而是想感谢您维护three.js。

你是一个超级敬业和耐心的家伙! :+1:

从r72到r84的更新需要大量工作(一个项目需要3个小时左右)。

有用的:

我的满意结果: https :


详细说明从v72到v84我需要做的事情:

  1. 从您的html文件中删除:

    <!-- OLD <script src="../../threejs/geometries/TextGeometry.js"></script>  -->
    <!-- <script src="../../threejs/helvetiker_regular.typeface.js"></script>  -->
    
  2. 运行您的threejs场景,您可能会得到:

    Uncaught TypeError: c.generateShapes is not a function
    
  3. 发生这种情况是因为渲染器在启动时没有加载字体。 因此,让我们先加载字体,然后在启动时调用渲染器:

    var text3dparams;
    var font_helvetiker;
    var fontload = new THREE.FontLoader();
    fontload.load( '/threejs/fonts/helvetiker_regular.typeface.json', function ( font ) {
        font_helvetiker = font;
        initStageText();
    
        // startup
        render(); 
    });
    
  4. 当我在运行时设置新文本时,我需要在全局scape上定义舞台对象,例如:

    var text3d_r;
    var text3d_s;
    var text3d_h;
    var material1;
    var material_s;
    var material2;
    
  5. 启动函数示例:

    function initStageText()
    {
        // 3D TEXT LABELS
        text3dparams = {
            font:           font_helvetiker, // font, important to change, before was "helvetiker", now the font directly!
            size:           0.3,    // size of the text
            height:         0.05,   // thickness to extrude text
            curveSegments:  2,      // number of points on the curves
            weight:         'normal',       // font weight (normal, bold)
            style:          'normal',       // font style  (normal, italics)
        }
    
        // label radius
        material1 = new THREE.MeshBasicMaterial({color: 0x009900});
        var text3dgeom_r = new THREE.TextGeometry('r = '+cone_radius, text3dparams);
        text3d_r = new THREE.Mesh(text3dgeom_r, material1);
        text3d_r.position.y = cone_height+0.1;
        text3d_r.position.z = cone_radius/2-0.35;
        text3d_r.rotation.y = -Math.PI/2;
        scene.add(text3d_r);
    }
    
  6. 我也收到错误THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.为了解决这个问题,我删除了:

    gridHelper.setColors( new THREE.Color(gridcolor), new THREE.Color(gridcolor) );
    

并添加(gridstep之前为1,然后需要将该值设置为20以获得相同的网格):

    var gridHelper = new THREE.GridHelper(gridplaneSize/2, gridstep, gridcolor, gridcolor);
  1. 然后,我需要注意threejs的更改(在Chrome控制台中显示为警告):

6.1 THREE.MeshBasicMaterial: 'ambient' is not a property of this material.通过从new THREE.MeshBasicMaterial();删除ambient:color, THREE.MeshBasicMaterial: 'ambient' is not a property of this material.解决

6.2灯光变化,只需按照警告中的说明进行更换:

    THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.
    THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.
    THREE.Light: .shadowCameraNear is now .shadow.camera.near.
    THREE.Light: .shadowCameraFar is now .shadow.camera.far.
    THREE.Light: .shadowCameraFov is now .shadow.camera.fov.
    THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( 
    THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.

6.3 THREE.Light: .shadowDarkness has been removed. -将其删除。

  1. 我还更改了渲染器设置:

    // OLD 
    var renderer = Detector.webgl ? new THREE.WebGLRenderer({ antialias: true }) : new THREE.CanvasRenderer({ antialias: true });
    
    // NEW
    var renderer;
    if(Detector.webgl)
    {
        renderer = new THREE.WebGLRenderer({ antialias: true });
    }
    else
    {
        renderer = new THREE.CanvasRenderer({ antialias: true });
    }
    
  2. 我还需要在场景设置中添加白色背景色:

    var scene = new THREE.Scene();          
    scene.background = new THREE.Color( 0xffffff );
    

现在,我的应用程序与旧的threejs版本一样运行。 也祝您项目顺利!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

akshaysrin picture akshaysrin  ·  3评论

jlaquinte picture jlaquinte  ·  3评论

fuzihaofzh picture fuzihaofzh  ·  3评论

donmccurdy picture donmccurdy  ·  3评论

danieljack picture danieljack  ·  3评论