three.jsMaxScript移植帮助(setTVert和setTVFace)

我一直在使用three.js. 我把所有的逻辑都移植了。最后一部分是根据检索到的数据构建网格。这对于网格顶点和面很容易。然而,当涉及到UV数据时,它变得极其复杂。我在一个由三个点值数组组成的数组中获取UV数据,如[-0.600184977054596, 1.9818799495697021, 0](很长的数字),但比较实际脚本的输出,值是正确的。此外,第三点始终为0)。我所看到的faceVertexUvs的每个示例都是这样的:ngeometry.faceVertexUvs[0].push(// front[ new THREE.Vector2(0, 0), new THREE.Vector2(1, 1), new THREE.Vector2(0, 1) ],[ new THREE.Vector2(0, 0), new THREE.Vector2(1, 0), new THREE.Vector2(1, 1) ],// right[ new THREE.Vector2(0, 0), new THREE.Vector2(1, 1), new THREE.Vector2(0, 1) ],[ new THREE.Vector2(0, 0), new THREE.Vector2(1, 0), new THREE.Vector2(1, 1) ],// back[ new THREE.Vector2(0, 0), new THREE.Vector2(1, 1), new THREE.Vector2(0, 1) ],[ new THREE.Vector2(0, 0), new THREE.Vector2(1, 0), new THREE.Vector2(1, 1) ],// left[ new THREE.Vector2(0, 0), new THREE.Vector2(1, 1), new THREE.Vector2(0, 1) ],[ new THREE.Vector2(0, 0), new THREE.Vector2(1, 0), new THREE.Vector2(1, 1) ],// top[ new THREE.Vector2(0, 0), new THREE.Vector2(1, 1), new THREE.Vector2(0, 1) ],[ new THREE.Vector2(0, 0), new THREE.Vector2(1, 0), new THREE.Vector2(1, 1) ],// bottom[ new THREE.Vector2(0, 0), new THREE.Vector2(1, 1), new THREE.Vector2(0, 1) ],[ new THREE.Vector2(0, 0), new THREE.Vector2(1, 0), new THREE.Vector2(1, 1) ],);
源代码
但是,原始脚本确实做到了这一点
我不确定如何准确地移植它。按照setTVert和setTVFace的定义,3DS Max似乎可以基于顶点和面阵列自动计算UV?我不太确定,但逻辑与实际情况不符three.js是的。非常感谢您的帮助。nPS:
只需使用面和顶点,我就可以成功地显示网格。所以我确实把那个部分搞定了。nMax基本上把它当作两个唯一的网格,它们恰好对齐,因为它们有相同数量的三角形。如果您查看此导出器的原始输出,您将看到一个非常复杂的面定义(如果我没有记错的话),或者可能是两组面/顶点。
您的任务是将这些面/顶点组合到一个网格中。如果使用索引几何体,则很可能需要复制(定位)顶点,以考虑复制的法线和uv岛。尝试导出带有一些平滑组的立方体。
如果它是这样工作的,那么它首先是如何获得UV的?即使我这样做了,我仍然不会有UV…只是第二个网格合并成一个…
我这样做初始网格(显示为空白的MeshBasicMaterial):n// -- Now we finally create the =>nAfter is where the UV assignment happens which again, I am still having trouble figuring out a 1:1 for this. Again, you say by these methods it\"s making a second mesh and seeing how to intercept but how does this have to do with anything UV related? You say \"make another mesh and merge dealing with duplicates\" but that gets nowhere close to getting the UVs or using the UVs I have on hand…ngeotest11919×938 95.2 KBnYou noticed yourself that the uv is a vec3,它有一个x、一个y和一个z。
这与有一个顶点没有区别,它在3d空间的某个地方。您熟悉3ds max中的通道信息工具吗?您可以打开它并尝试将UV通道复制到positio
通道中,看看会发生什么。
还请注意,每个通道可能有不同数量的元素。尝试将单个平滑面指定给整个立方体,并查看顶点的数量。然后尝试自动平滑,为每个面指定不同的组,查看法线通道。
对于UV,尝试使用UV展开工具并分解一些三角形,顶点计数应该增加。
现在,虽然每个通道具有相同数量的三角形(索引),但它是一个完全不同的元素数组(位置、UV、法线、,相切,顶点颜色,foo)。
如果制作两个立方体副本,将法线通道复制到其中一个位置,将uv复制到另一个位置,您将在视口中看到3个不同的网格/对象,每个都是可编辑的网格。
这就是我所说的“它只是一个网格”-它是,因为它有一些元素数据,和一些索引(三角形)。
如果你简单地将这些元素+索引对中的每一个解包成一个“三角形汤”数组,它们将简单地=0;i
也就是说,n*for each triangleget abc ofvertexFaceuvFacenormalFacearbitraryFaceget data with abc invertexDatauvData....put in one triangle soupvertex.positionvertex.uvvertex.normaln,n*mesh_vertex_array.shift();
很可能是错误的,它应该是:nI still don\"t quite understand, even with the pseudo code…nYou keep saying \"element + indices\" but I don\"t have UV faces and UV indices. All I have is UV vertices.nThe only data I have to work with is mesh_vertex_array是大小为3([[0.316222, -0.0293346, -0.017658], ...])的数组中的顶点数据数组,mesh_face_array是大小为3([[1, 2, 3], ...])的数组中的顶点索引数组,mesh_uv_array是大小为3的数组中的更多顶点数据数组,其中第三个索引始终为零([[-0.600185, 1.98188, 0], ...]),和mesh_mat_array,这是每个面的材料指数数组([5, 5, 5, 5, 5, 5, 5, ...])。原始脚本不检索实际的正常值。它只获取每个子网格焊接顶点的法线,但稍后会丢弃它们,因此我没有法线可处理。三个网格可以自动计算法线,所以我不担心这一点。
我想我要问的是,我应该如何制作一个只有UV顶点的整个其他网格,并且,最终我只有另一个网格,没有UV数据,那么Max在制作第二个网格后从哪里提取UV数据?我非常困惑……nPS:**13***也是删除数组第一个索引的快捷方式,基于jsperf结果,速度更快。
我查看了AutoDesk关于纹理坐标在3DS Max中如何工作的官方解释,似乎每个UVW都对应于坐标为坐标的每个顶点的每个面索引图像上像素的位置。但是,3可以作为0到1的纹理空间,而不是通过坐标,因此如何仅从坐标中获取所需的数据?
我必须承认,我对您正在尝试的操作感到困惑。n*setTVert-这适用于顶点
*setTFace-这适用于面
是否有人已经进行了此映射,因此您只有UV?我不确定您是否必须在此>xjonx:
中执行任何工作。我已经查看了AutoDesk关于纹理坐标在3DS Max中如何工作的官方解释,并且它看起来是这样的s每个UVW代表每个顶点的每个面索引,其坐标是图像上像素的坐标位置。
我不认为这是真的。就像我说的,你可以使用频道信息工具来查看发生了什么。如果打开uvw编辑器,将看到值。它们可以是0-1,0-3411284,-73.4546-1.345,或者计算机可以或多或少处理的任何范围。<xjonx:nPS:**16***也是删除数组第一个索引的快捷方式,并且基于jsperf结果速度更快。
我想你可能会对此感到困惑:
假设你有三个顶点:</xjonx:n****17***
你需要这样移动它它是:n****18******确实:n****19***
应该是:n****20***
所以UV数据可以是十进制数据?如果我这么做了,我会收到很多***21***警告。如果我在阵列中循环并以三个矢量2为一组指定UV,UV将严重不正确,纹理将出现扭曲。这就是为什么我相信UV数据是顶点数据而不是UV数据,特别是这个setTVert和setTVFace数据。我还参考了我在***23***中的AutoDesk帮助部分***22***中阅读的内容。而且,第一个索引总是***24***(为了便于移植,我这样做是为了复制基于一个索引的数组),所以我***25***删除了第一个索引。对于数组中的每个数组,第一个索引仍然是***26***,所以我使用***27***而不是***28***。另外,我不知道紫外线数据的“前”、“后”、“顶”等。如前所述,我所拥有的只是一组大小为3的UV数据。
更像是,我不知道如何将我拥有的UV数据正确地存储到faceVertexUvs。
我对***29***类不太熟悉,我以为它已经被删除了。但是是的,紫外线数据可以是十进制数据(任何精度)。
你有没有可能用***30***解决你的问题?
可能正在执行另一个=新的BufferGeometry()/*如果我在数组中循环并以三个向量为一组分配UV,我在这里做什么*/n,UV严重不正确,纹理扭曲。
这可能是由于***31***
尝试新的***32***
我不明白您是如何获得未定义的第一个索引的。同样,如果您使用的是max脚本,我认为这并不像您想象的那么简单,整个“两个网格”的概念开始发挥作用。如果你刚得到一些数据,就把它贴在这里,这样就可以理解了。
如果你不知道该问什么,我建议用***33***做一个简单的四边形(两个三角形),以便更好地掌握发生了什么。
首先从三角形和三角形汤开始,即没有索引,只需定位,然后添加顶点,再添加另一个三角形,然后尝试减少位置和UV的数量,并使用“索引”属性,然后尝试分割两个UV三角形,同时保留位置(实际上无法做到,因此您将恢复到三角形汤)。我想这会澄清很多。
另外,如果你拥有整个管道,在3ds中制作一个平面并导出,将结果发布在这里。
我特意做了一个>
模型数据附在这里post.model_数据.js(260.5 KB)
这似乎适用于==>
如果不注册,则无法进行fork操作,但是将js和代码粘贴到https://codepen.io/agconti/pen/Zejwjw2加载一个网格。也就是说,我得到了一些看起来像是映射的东西:n(都是负数,没有标准化,但这很好)
这就是你想要做的吗?max脚本如何适应这种情况,以及偏移量索引?
您使用了BufferGeometry,但这对UV没有什么不同的效果(即使我确实获得了正常几何体的正确结构的UV,UV也得到了相同的扭曲不正确的外观)
图像770×394 43.8 KB
编辑:
实际上,导出到OBJ并导入到Max并使用“UVW展开”修改器查看UV后,UV看起来是正确的。我现在怀疑这是因为我使用了多种材料。***34***包含每个面的材质索引。***35***与***36***长度相同。问题是,***37***按照您的示例使用***38***(由于某些原因,***39***无法像您为***40***所做的那样在UV中再次使用法线几何体失败),因此我无法将***41***解决方案应用于此。我读了***42***,但它要求我知道每个组的起始位置以及每个材质索引的每个组的长度,对此我不知道(即使我对数据进行了排序,这些组也不会对齐,因为面不是按材质索引分组的)。
对不起,我想我实际上不明白你的问题是什么。也许再问一次问题,只问相关的细节?祝你好运!n MaxScript porting help (setTVert and setTVFace)n

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

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

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

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

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

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

three.js可缩放场景背景

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

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

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 浏览:1112

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

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

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

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

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

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

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

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

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

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

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

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

three.js使用threejs的光流

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

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

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

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

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