里卡多
您是否曾经在最新的r73版本上测试过以前的任何项目?
各种错误,无济于事!
你为什么要发布这样的东西?
什么不起作用? 您遇到什么错误? 我始终确保所有示例仍然有效。 如果出现问题,我们应该添加一个示例进行测试。
什么不起作用?
没用!
只是一个示例(适合您):
http://necromanthus.com/Test/html5/dog_r72.html
http://necromanthus.com/Test/html5/dog_r73.html
错误:
你为什么要发布这样的东西?
啊! 我懂了。
我们已经完全替换了动画系统,并且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
错误:
老实说,r73是一团糟,应该将其删除。
干杯
大约1.5年以来,我一直依靠Three.js来编写ChiliPeppr。 今天早上,它看起来像THREE.FontUtils,它是未定义的,所以所有字体渲染在ChiliPeppr中都被破坏了。 我猜想它也是@RemusMar所指的r73问题。
FontUtils
和TextGeometry
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
哦! 永远忘记文档中的示例...
@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并进行评估?
是否应该在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我需要做的事情:
从您的html文件中删除:
<!-- OLD <script src="../../threejs/geometries/TextGeometry.js"></script> -->
<!-- <script src="../../threejs/helvetiker_regular.typeface.js"></script> -->
运行您的threejs场景,您可能会得到:
Uncaught TypeError: c.generateShapes is not a function
发生这种情况是因为渲染器在启动时没有加载字体。 因此,让我们先加载字体,然后在启动时调用渲染器:
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();
});
当我在运行时设置新文本时,我需要在全局scape上定义舞台对象,例如:
var text3d_r;
var text3d_s;
var text3d_h;
var material1;
var material_s;
var material2;
启动函数示例:
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);
}
我也收到错误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);
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.
-将其删除。
我还更改了渲染器设置:
// 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 });
}
我还需要在场景设置中添加白色背景色:
var scene = new THREE.Scene();
scene.background = new THREE.Color( 0xffffff );
现在,我的应用程序与旧的threejs版本一样运行。 也祝您项目顺利!
最有用的评论
最近,我使用较旧版本的three.js遇到了此问题。
但是,在阅读完您收到的评论和侮辱之后,我没有寻求帮助,而是想感谢您维护three.js。
你是一个超级敬业和耐心的家伙! :+1: