- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个使用四个纹理的 OBJ。文件中定义的 UV 范围从 (0, 0) 到 (2, 2),例如 (0.5, 0.5) 指的是第一个纹理中的坐标,(0.5, 1.5) 是第二个纹理中的 UV 坐标, (1.5, 0.5) 是第三个纹理中的坐标,(1.5, 1.5) 是最后一个纹理中的坐标。
我已经有了正确的 three.js 几何体或对象。但是,我现在需要能够将正确的纹理贴图应用到这些对象。
在代码中:
我有一个 THREE.Mesh
,它具有正确的几何形状(UV 坐标使得 U = [0, 2],V = [0, 2])和一个虚拟占位符 Material 。我目前像这样加载单个纹理:
var texture = new THREE.TextureLoader().load('tex_u1_v1.png', function() {
object.material.map = texture;
object.material.map.needsUpdate = true;
});
正如预期的那样,四分之一的网格纹理正确。我还有三个纹理文件,tex_u1_v2.png
、tex_u2_v1.png
和 tex_u2_v2.png
。我希望能够将这些纹理也应用到 object
(THREE.js 网格),这样网格中的每个有效 UV 都有一个纹理。
但是,我不知道如何在 object
创建后将多个 Material 添加到它。此外,我不知道如何向网格指定 tex_u1_v2.png
,例如,应该用于范围内的 UVs (U = [0, 2], V = [1, 2] ).
最佳答案
三中的标准 Material 只接受单个texture各种对象 map -参数(并且纹理对象将只包含一个图像),因此为了在您的对象上使用多个纹理,您将不得不使用多种 Material 或创建您自己的多纹理- Material 。如果您有着色器编程经验,您可能会使用后一种方法获得最佳性能(假设您有足够的显存用于大型纹理),因为您可以在单个绘制调用中绘制整个网格,而无需加载新的着色器或纹理。
要创建自己的着色器,您可以使用 ShaderMaterial
或 RawShaderMaterial
,给它一个纹理uniform对于您需要的每个纹理(在您的情况下是四个),然后在着色器代码中根据坐标选择正确的纹理进行采样。
要使一个对象使用多种 Material ,您可以设置 material
Material 数组的属性(在使用构造函数参数创建期间,或者只是在稍后阶段手动替换它)。
const myMaterials = [tex1Material, tex2Material, tex3Material, tex4Material];
const myMesh = new THREE.Mesh(myGeometry, myMaterials);
//Or:
myMesh.materials = myMaterials;
然后,要使网格的不同部分使用您必须创建的适当 Material groups
如果它是一个 BufferGeometry
;或设置 materialIndex
如果您使用的是 Geometry
,则为面的一部分。 Material 索引(在组和面中)是上面显示的 mesh.material
数组中 Material 的索引。
现在网格的不同部分具有不同的 Material ,您可以为每种 Material 赋予它们自己的纹理。
如果您不想修改已经存在的坐标,则有两种替代方法:
设置texture wrapping到 THREE.RepeatWrapping
:
myTexture.wrapS = THREE.RepeatWrapping;
myTexture.wrapT = THREE.RepeatWrapping;
这将使纹理重复超出标准 [0-1] uv 间隔。
另一种方法是使用 offset
纹理的属性将其推回 [0-1] 区间。对于要放置的纹理u[0,1], v[1,2] 间隔你会设置偏移量的 v 坐标通过-1:
myTexture.offset = new THREE.Vector2(0, -1);
这是一个演示这些方法的 jsfiddle 链接: https://jsfiddle.net/xfehvmb4/
关于javascript - THREE.js 中单个网格的多个 UV/纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50340994/
我正在尝试实现凸多边形的正确纹理。我有一个带有 n 个三角形的多边形,对于每个三角形,我正在计算重心坐标,它们是每个三角形的 uv,但在每个三角形的 [0..1] 中,而不是整个多边形。如何插入每个
我目前正在开发一款 map 工具,可以为我的游戏生成自定义 map 。我的网格生成工作得很好,但我看不出如何正确地对我的脸进行 UV 贴图以使纹理保持一致。我已经通过使用相应的坐标对使 UV 贴图在地
我打算编写一个纹理图集管理器,但我遇到了问题。当我修改原始 UV 坐标时,我的程序不再渲染任何内容?这是我的抽奖代码: - (void)drawFrame { [(EAGLView *)self.vi
我有一个 3D 地形(体素网格,我的“任意网格”)。我知道如何从网格上方“拍打”纹理,但在垂直或陡峭的斜坡上它会弄脏。 我可以访问每个顶点的法线和位置。我将如何生成 UV(不使用着色器,因此没有真正的
我有几个 (3-4) 带(基本上是长三角形带),它们共享相同的纹理并且基本上从相同的位置开始。我通过将每一帧的偏移量添加到 V 坐标来垂直滚动该纹理。该偏移量只是我添加到每一帧的一个成员变量(是的,它
在 Android 上为 OpenGL 创建缓冲区时,有什么方法可以为 UV 使用与顶点不同的索引吗? 例如,如果您有 5000 个顶点和 12000 个 UV,并且不希望只为每个唯一的 UV 顶点对
Nginx: PV、UV、独立IP 做网站的都知道,平常经常要查询下网站PV、UV等网站的访问数据,当然如果网站做了CDN的话,nginx本地的日志就没什么意义了,下面就对nginx网站的日志访问
我有从二维形状生成三角形网格的代码。因为在大多数情况下这些形状在表面上的顶点分布不均匀,所以我在生成 UV 时遇到了问题,因此它不会导致纹理失真。任何人都可以推荐一些讨论平面网格上 UV 计算技术的文
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 4 年前。 Improve th
我有一张 UV 贴图: 我想像这样在连接的网格边周围获取纹理像素(以红色选中): 如何使用 Python Blender API 做这样的事情? 最佳答案 制作“UV”bmesh 给定上面带有 UV
摘要 我正在尝试将位移贴图(高度贴图)应用于一个相当简单的对象(六角形平面),并且得到了一些意想不到的结果。我使用的是灰度,因此,我的印象是我的高度图应该只影响网格的 Z 值。然而,我创建的置换贴图在
我有一张 UV 贴图: 我想像这样在连接的网格边周围获取纹理像素(以红色选中): 如何使用 Python Blender API 做这样的事情? 最佳答案 制作“UV”bmesh 给定上面带有 UV
在对多重采样纹理进行采样时,我们必须使用整数坐标,即 ivec2 Texcoord = ivec2(textureSize(texsampler) * In.Texcoord); vec4 color
我正在尝试将纹理应用于我的 .md2 模型。我使用 Gouraud 着色给它上色(底部/顶部平面三角形的标准算法),我必须使用类似的代码来处理纹理坐标 U 和 V。但我真的不明白如何对它们进行插值。从
这个问题在这里已经有了答案: When is @uncheckedVariance needed in Scala, and why is it used in GenericTraversableT
我不知道“膨胀”是否是正确的术语,但这是我现在能想到的全部。我正在尝试沿着三角形 strip 映射一个 1 像素宽(尽管从技术上讲每个纹理都会有这个问题)的图像来模拟激光。当它完全均匀且正方形时,它看
我正在尝试为我在代码中生成的网格计算 uv。这是一个非常简单的圆圈 (2d) 我想像下面这样构造它 并将此代码用于 uvs uvs[i] = new Vector2((verts[i].x+radiu
我正在使用三个 v.73我有来自 raycaster 交叉点的 UV 坐标。我也有这个物体的纹理。我怎样才能在 UV 坐标处获得所用纹理的颜色(RGB 或 RGBA)? 我曾尝试使用从纹理中获取图像的
假设我们有一个 3D 网格,每个顶点都有纹理坐标,所以如果我渲染它展开,我会得到这样的东西(忽略红色方 block ): 现在我正在尝试找到合适的算法来使用顶点 UV 唯一标识这些区域并存储具有此唯一
我正在尝试在 Unity 中更改和调整放置在 bilt-in 立方体面上的纹理。没有任何问题,我设法用这段代码在每张脸上放置不同的图像: void Start() { Mesh mesh =
我是一名优秀的程序员,十分优秀!