three.js在r121模块版本中扩展三个对象

所以我已经有一段时间的代码来扩展3.网眼布对象。
某物>
由于SkindMesh是从网格构造而来的,因此此用途也扩展到SkindMesh。nThree121的模块版本似乎破坏了此功能。它在Three121常规版本和Three120模块构建中也可以正常工作。Three121模块版本中的某些内容改变了这种行为。
我已经重新编写了一次游戏来使用模块,因为three决定不再为非模块版本构建或维护示例。现在,在下一个版本中,我再次需要重新编写一些代码。这一点越来越难跟上。
有人能说这个吗?这是一个bug还是故意的?
编辑*对不起,我一直在使用prototype。我错把它漏掉了。n1. JS允许你做一些事情并且不抛出错误,这并不意味着你应该这么做。你是在入侵图书馆,然后指责更新破坏了你的黑客行为?如果您需要其他功能,请围绕Mesh类创建包装并将其添加到其中-在运行中修改库实际上是要求它在某个点中断(并需要部分重写)。n2. n3. 您可以尝试更改:n4. toThough I can\"t promise it will help. The best solution would be to create a separate object that contains the Mesh and has the additional functionality you need.I tried with the prototype as well, no luck.I suppose I\"ll just have to do some re-writes and also figure out why some other 3rd party functionality stopped working as well.This all worked fine for like 7 years lol. Oh well. mjurczyk:The best solution would be to create a separate object that contains the Mesh and has the additional functionality you need.I consider modifying the prototype more of a feature of Javascript though it can get you in trouble. I agree that derived classes are better practice but there are some cases where it\"s not possible or just far too cumbersome to do. Specifically the cases I\"ve modified the prototype are to add raycast functionality using BVHs for all Mesh and adding an extra event when adding children to performantly track all the objects in a subhierarchy. I usually try to limit the modification to overriding or extending existing functions, though, and use it sparingly. Completely custom functions are riskier because you may wind up overwriting a new function added to THREE with the same name.@titansoftimeThis is the pattern I\"ve always used:import { Mesh } from \"three\";// extending an existing = function() {};您能制作一个小提琴来显示前后的行为变化吗r121?这应该仍然有效。甚至可以使用基于模块的版本制作小提琴吗?我以前试过使用时,总是出错three.js. 当然,我可能只是做错了什么事。所以说得很清楚(我不认为我做错了),扩展函数3.网眼布仍然有效,但现在已经坏了3.斯金德梅什.这也仅适用于r121的模块版本。模块版本r120运行良好。非模块r121也可以正常工作。示例:import * as THREE> titansoftime:Can fiddles even be made with the module based version?Yup – the three.js starter fiddle uses modules, as well:jsfiddle.netEdit fiddle - JSFiddle - Code Playground 8Ah ok great thank you. I can\"t load the file from my server like normal, but that unpkg.com link works fine.Hmm, I\"m not sure what is goin on now. I made an example and it seems to be working. I\"m not sure why my live app is not liking r121.jsfiddle.netEdit fiddle - JSFiddle - Code Playground 3I\"ll have to do some more research.Thanks for helping me with the module based fiddle.You can use the JavaScript Class extends Keyword.Example below extends the OrbitContols.class ExtendedOrbitControls extends OrbitControls {constructor(camera, domElement) {super(camera,>and then use it,const>Running exampleJavaScript versionSee Lines 5-10, 21-23 :>TypeScript VersionSee Lines 6-12, 27-29:>image1072×609 192 KB@gkjohnson hm, that\"s true, mutability of everything is great, same with clojures, dynamic typing etc., but only as long as (1) it\"s predictable (2) you know what you are doing. If our man @titansoftime goes once again mutating (or extending) Three\"s classes (which may or may not change over time, you can\"t predict that) he is kinda asking for trouble in the future once again. And I can\"t really seem to understand why in the first place.Imo the smart (and easy) way would be to just build stuff around it:class MySomethingThatAlsoHasAMesh>@seanwasere inheritance (except maybe for extending React.Component)似乎产生了比解决方案更多的问题4-它的耦合和链接类,这会使以后的任何修改变得有点困难。猴子补丁是一种有效的方法,也是我非常不喜欢ES6类锁定此功能的原因。一些无需核心修改就可以修补的功能无法再使用它了,因此,透明是一项要求。这是一个完美的例子,说明了为什么“组合而非继承”是一个好的实践。如前所述,您应该围绕THREE.js物体。让THREE.js成为引擎中的“内部”,而不是“融入”的东西,否则在更新到新版本时,您总是会遇到类似的问题。我一直采用不接触或修改原始代码的方法,而是围绕对象编写包装。是的,您将创建一些样板代码(基本上有很多代理方法),但至少它不会破坏您自己引擎的内部API。更新THREE时,您只需修复自己代码中直接使用THREE自身对象的点。例如:# Your Mesh class which extends THREE.Meshexport class MyMesh extends Mesh{// Your own code.}# Some random part in your own code:const>If for whatever reason, THREE decides to change the method signature of set,您必须更新自己代码中调用set的每个部分。现在,采用“组合重于继承”的方法:# MyMesh wraps THREE.Meshexport class MyMesh{private _mesh:>Now, if THREE decides to change the method signature of the set方法,您只需要在自己的代码中更新setPositio
方法。当然,这只是一个假设的示例,但希望它能显示当您想要使用的三个新的更新发布时,您自己的代码变得多么容易维护
Extending THREE objects in r121 Module versionn

three.js[已解决]正交摄影机的变换控件:gizmos缩放问题

您好,我正在使用带轨道控制的正交摄影机。我注意到当缩放照相机变焦不改变相机的位置(如透视相机)。首先,我想知道为什么这两个相机的实现方式不同?第二,我也在使用TransformControls,对于透视摄影机,更新功能上的小控件的重新缩放在这个等式中非常有效>但是使用OrbitControls更改缩放而不是正交摄影机的位置时,它没有正常工作。我试着像这样在等式中添加缩放,但没有得到任何好的结果>我应该以不同的方式包括它吗?我应该使用其他控件吗?谢谢大家的帮助!NaDaMa:首先,我很想了解为什么这两个摄像头...

日期:2021-12-11 08:00:01 浏览:1739

three.js多次渲染同一模型(obj模型),FPS要低得多

我试图在程序中渲染150个相同的树模型,但FPS突然从60下降到30+。你能告诉我什么是最好的解决办法吗?非常感谢。和平与爱。skr有两种典型的方法可以解决这个性能问题(太多的绘制调用):- 使用实例化渲染- 将所有几何体合并为一个几何体(因此只有一个网格)...

日期:2021-12-11 08:00:02 浏览:1746

three.js可缩放场景背景

three.js大家好,我有一个场景,由一个物体(反射雕像)组成,保持在一个漂亮背景的中心。我一直在使用威尼斯日落矩形hdr地图作为我的场景背景它既可以作为环境地图,也可以作为背景我看到背景不会与场景中渲染的网格一起缩放。这给人一种场景完全是假的感觉。i、 e状态向上/向下缩放,但背景不缩放。目前,我已经禁用了放大/缩小功能,这样用户就不会感到害怕。我的问题是:1. 当轨道控制放大/缩小时,我是否需要在此处使用一些着色器魔法来放大或缩小场景背景,以便看起来场景中的所有对象都在均匀缩放?或者这根本不可能做到?...

日期:2021-12-11 09:00:02 浏览:1272

three.js移动导入的Gltf模型

three.js我导入了我的gltf模型并将其添加到场景中,但现在如果我尝试移动它,它将不会=新建三、几何();var=混音器( 模型动画[0]>如何移动模式?Prakar_Srivastava:var>3D对象不能是Geometry或BufferGeometry类型。它应该是Object3D或类似Mesh、Points或Line的派生类的实例。在您的情况下,我只是这样声明变量:var mode;在动画循环中,执行以下操作:如果(mod!==未定义)>还请记住,基本3D场景的重要部分在代码片段中丢失(例如相...

日期:2021-12-11 10:00:01 浏览:1111

three.js平面明暗处理的问题

three.js嗨!我在项目中使用节点材质。我在模型渲染方面有问题。它看起来像是真实的平面阴影。如何平滑多边形?也有点像低分辨率阴影纹理贴图的自阴影。可能不是,但可能是。@Arkadiy\\u Vinkovskiy您需要在您的帖子中添加更多细节。屏幕截图不足以说明这里发生了什么。始终包括引起问题的代码,如果您使用的是模型,也要包括这些代码。更好的是,使用codepe制作一个工作示例...

日期:2021-12-11 10:00:02 浏览:997

three.js如何渲染立方体材质?

您好,直到昨天,我才相信Object3D是一组网格,而网格是一组几何体+材质,每个对象只有一个对象。我发现了立方体材质的结构,因此object3D的网格包含1个几何体(boxGeometry)和6个材质!所以问题是,这种网格的渲染效果如何?有关于它的文件吗?(这是为了提高我对three.js)非常感谢还有其他问题,与我的上一个帖子相关,如果一个网格中可能有多个材质,如何设置CustomDistanceMaterial以考虑所有材质的所有贴图?elysium11:所以问题是,渲染如何在这种类型的网格上工作?您...

日期:2021-12-11 11:00:03 浏览:857

three.js如何创建要在网格中拟合的线段

three.js伙计们,我想帮忙,假设我有一个这样的网格图像718×729 1.25 KB我想在网格面内创建线段,也就是说,我想将网格转换成这样的线图像710×828 740字节有人能帮忙吗???...

日期:2021-12-11 12:00:01 浏览:909

three.jsGLTFLoader.js这是我的登记簿错误

three.js每当我试着做决定的时候3.GLTFLoader对象我收到此错误代码:“未捕获类型错误:这是我的登记簿不是一个函数“我需要帮助!由Penta#u Trax在post#5中解决我最终发现我一直在使用错误的文件,当你需要使用jsm/example时,我使用的是js/example。其他东西也是个问题。但这是问题的基础。你能给我们看看你的代码吗?通常,如果你使用的是import语句,GLTFLoader不需要在前面加三个字符。好的,所以在这之前,我刚刚关注了这个视频,因为它是去年发布的。但是现在我试...

日期:2021-12-11 12:00:02 浏览:1069

three.js使用threejs的光流

嘿,我需要通过我的屏幕显示一束移动的光束。我不想使用任何模型或动画。我想知道我是否可以单独使用threejs来实现这一点。我也应该能够控制其运动的颜色强度和路径。嗨!也许这会有帮助:GitHub-jeromeetienne/三倍体积聚光灯: three.js扩展以提供体积聚光灯13,用于可视化光锥。您可以使用THREE.Curve()设置其路径。控制颜色强度,可能取决于曲线上的位置,也可以使用tween.js或者GSAP用于复杂的动画。创造力取决于您这是您想要的吗?https://threejs.org/e...

日期:2021-12-11 13:00:01 浏览:1316

three.js使用光线投射动态绘制多边形

我要画多边形three.js具有交点。为此,我使用下面的函数。首先,我使用光线投射器在第一个交点的第一个点添加球体。每次单击后,在交点处创建新球体,并在该交点和上一点之间创建线。现在,我希望在第一次单击时关闭多边形指向或单击该点周围。如何实现此目标。raycaster params是否与网格一起工作以检测鼠标位置周围的网格?function checkIntersectionclick() = raycaster.intersectObjects(addedObject, true);if (interse...

日期:2021-12-11 13:00:02 浏览:868