three.js - 将不同的材料应用于挤压形状

时间:2013-02-25 19:29:25

标签: three.js webgl

我有Three.Shape,我可以申请挤压 为了得到一架飞机,我首先绘制了一个正方形然后应用拉伸

var squareShape = new THREE.Shape();
squareShape.moveTo( 0,0 );
squareShape.lineTo( 0, sqLength );
squareShape.lineTo( sqLength, sqLength );
squareShape.lineTo( sqLength, 0 );
squareShape.lineTo( 0, 0 );

var geometry = new THREE.ExtrudeGeometry( squareShape,extrudeSettings);

现在我的浏览器上出现了一个3D正方形。

接下来我想在其顶面应用256x256的图像纹理。怎么做?

2 个答案:

答案 0 :(得分:4)

如果你看一下THREE.js中的src / extras / geometry / ExtrudeGeometry.js,你会看到这些评论。

  • material://正面和背面的材质索引
  • extrudeMaterial://挤出和斜面的材质索引

例如,您可以说(显然不会直接运行,因为它不完整)

// The face material will be index #0.  The extrusion (sides) will be #1.
var extrudeSettings = { amount: 10, bevelEnabled: true, bevelSegments: 3, steps: 4, bevelThickness: 8, material: 0, extrudeMaterial: 1 };

当您创建网格时,您可以创建2个材质并将它们分配给网格。

var mesh = THREE.SceneUtils.createMultiMaterialObject( geometry, [ new THREE.MeshLambertMaterial( { color: color } ), new THREE.MeshBasicMaterial( { color: 0x000000, wireframe: true, transparent: true } ) ] );

希望这能让你走上正确的道路。

在旁注上,与其他答案相关,您希望使用拉伸来创建尺寸类似于正方形但具有斜面的东西。一个例子是如果你试图绘制骰子并想要绕过边缘。

答案 1 :(得分:0)

如果您想要的只是一个立方体,为什么要挤出?为什么不使用CubeGeometry。