Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript threejs:PlaneGeometry将纹理加载到特定面_Javascript_Three.js - Fatal编程技术网

Javascript threejs:PlaneGeometry将纹理加载到特定面

Javascript threejs:PlaneGeometry将纹理加载到特定面,javascript,three.js,Javascript,Three.js,是否可以将纹理加载到PlaneGeometry对象的特定面?我想做的是将单独的纹理映射到PlaneGeometry对象的特定2个三角形 下面是一个示例,该示例使用某种颜色为PlaneGeometry对象的每个2个试验段着色,并且效果良好: 标题 身体{ 字体系列:Monospace; 背景色:#f0; 边际:0px; 溢出:隐藏; } 摄像机、场景、渲染器、几何体、材质、网格; init(); 制作动画(); 函数init(){ 场景=新的三个。场景(); 摄像头=新的三个透视摄像头(50,

是否可以将纹理加载到
PlaneGeometry
对象的特定面?我想做的是将单独的纹理映射到
PlaneGeometry
对象的特定2个三角形

下面是一个示例,该示例使用某种颜色为
PlaneGeometry
对象的每个2个试验段着色,并且效果良好:


标题
身体{
字体系列:Monospace;
背景色:#f0;
边际:0px;
溢出:隐藏;
}
摄像机、场景、渲染器、几何体、材质、网格;
init();
制作动画();
函数init(){
场景=新的三个。场景();
摄像头=新的三个透视摄像头(50,window.innerWidth/window.innerHeight,11000);
摄像机位置z=500;
场景。添加(摄影机);
//几何学
var-u-width=32;
var\u高度=32;
可变宽度_段=10;
变量高度_段=10;
变量平面\几何图形\宽度=宽度\线段*缩略图\宽度;
变量平面\几何图形\高度=高度\线段*缩略图\高度;
var geometry=new THREE.PlaneGeometry(平面几何体宽度、平面几何体高度、宽度分段、高度分段);//faces.length=widthSegments*heightSegments*2
//使用静态颜色绘制网格
//材料
var材料=[];
材料。推送(新的三网格基本材料({
颜色:0xff0000,侧面:三。双面
}));
材料。推送(新的三网格基本材料({
颜色:0x00ff00,侧面:三个。双面
}));
材料。推送(新的三网格基本材料({
颜色:0x0000ff,侧面:三个。双面
}));
//将materialIndex添加到面
var l=geometry.faces.length/2;
对于(变量i=0;i
您有两个选择

一种是更改几何体的UV,使每个正方形的UV范围从(0,0)左下角到(1,1)右上角

另一种解决方案是只设置纹理的
repeat

texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set( 10, 10 );

顺便说一句,在控制台中键入
renderer.info
,您将看到您正在生成100个绘图调用

设置材质索引后,将以下内容添加到代码中:

geometry.sortFacesByMaterialIndex();
您现在应该只看到3次平局

three.js r.89

您有两个选择

一种是更改几何体的UV,使每个正方形的UV范围从(0,0)左下角到(1,1)右上角

另一种解决方案是只设置纹理的
repeat

texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set( 10, 10 );

顺便说一句,在控制台中键入
renderer.info
,您将看到您正在生成100个绘图调用

设置材质索引后,将以下内容添加到代码中:

geometry.sortFacesByMaterialIndex();
您现在应该只看到3次平局


three.js r.89

第二种解决方案可行,但实际上我需要在这个网格的不同“单元”中放置不同的纹理。对于第一个解决方案,您能否举例说明如何填充UV,例如网格的“单元格”(2,3)?请帮我一个忙,然后首先尝试。我在这里找到了您的示例,但由于某些原因,Wewer texture Y翻转,并且
texture.flipY=true
没有帮助,请参阅Update2。从您的内联注释中,您似乎没有像
PlaneGeometry
那样布置几何体/UV。看看你的想法是对的第二种解决方案可行,但实际上我需要在网格的不同“单元”中放置不同的纹理。对于第一个解决方案,您能否举例说明如何填充UV,例如网格的“单元格”(2,3)?请帮我一个忙,然后首先尝试。我在这里找到了您的示例,但由于某些原因,Wewer texture Y翻转,并且
texture.flipY=true
没有帮助,请参阅Update2。从您的内联注释中,您似乎没有像
PlaneGeometry
那样布置几何体/UV。看看你的想法是对的最好生成一个,并调整UV以映射到地图集中的特定图像。最好生成一个,并调整UV以映射到地图集中的特定图像。