2013-07-19 34 views
0

我創建了一個封閉的樣條和拉伸矩形的幾何形狀來爲我的遊戲創建一個軌跡。我使用樣條來計算我的船的位置,但是當我檢查時,樣條與幾何不完全匹配。有什麼不對?樣條不匹配在Three.js中的拉伸幾何

shape used to extrude example

extrude geometry and spline not match

這裏是我的代碼:

var genTrack = function (lanes, controlPoints, material, isClose) { 

//extrude setting 
var extrudeSettings = { 
    bevelEnabled: true, 
    bevelSegments: 2, 
    steps: 200, 
    material: 1, 
    extrudeMaterial: 1 
}; 

//track shape 
var trackShape = new THREE.Shape([ 
    new THREE.Vector2(-config.laneHeight/2, config.laneWidth/2), 
    new THREE.Vector2(-config.laneHeight/2, - config.laneWidth/2), 
    new THREE.Vector2(config.laneHeight/2, - config.laneWidth/2), 
    new THREE.Vector2(config.laneHeight/2, config.laneWidth/2), 
]); 
//spline 
if (isClose) 
    var spline = new THREE.ClosedSplineCurve3(controlPoints); 
else 
    var spline = new THREE.SplineCurve3(controlPoints); 

utils.public('spline', spline); 
//set path 
extrudeSettings.extrudePath = spline; 

//frenet 
var frenet = new THREE.TubeGeometry.FrenetFrames(spline, 200, false) 
extrudeSettings.frames = frenet; 
utils.public('extrudeSettings', extrudeSettings); 

//create geometry 
var geometry = new THREE.ExtrudeGeometry(trackShape, extrudeSettings); 

var splineGeo = new THREE.TubeGeometry(spline, 200, 1, 4, true, false); 

utils.public('frenet', frenet); 
var angle = 0; 
var track = new THREE.Object3D(); 
track.matrixAutoUpdate = false; 
track.receiveShadow = true; 
for (var i=0; i< lanes; i++){ 
    var mesh = new THREE.Mesh(geometry, material); 
    mesh.position.set(i * (config.laneSpan + config.laneWidth), -30, 0); 
    //mesh.rotation.set(0, 0,angle); 
    //angle += Math.PI/180 * 20; 
    track.add(mesh); 
} 
track.scale.set(1.5, 1.5, 1.5); 
var splineMesh = new THREE.Mesh(splineGeo, new THREE.MeshBasicMaterial({color: 0xffffff})); 
return { 
    'geometry': geometry, 
    'mesh': track, 
    'spline': spline, 
    'frenet': frenet, 
    'splineMesh': splineMesh, 
    'controlPoints' : controlPoints 
}; 
} 

回答

0

我相信你的問題是這一行:

mesh.position.set(i * (config.laneSpan + config.laneWidth), -30, 0); 

我想你想要的是更多的東西如:

mesh.position.set(i * config.laneWidth/lanes, config.laneHeight/2, 0); 

我還沒有測試過它,但我認爲你需要這樣的東西。

+0

感謝您的建議和回覆:D。但這對解決問題沒有幫助。 – newvalue

+2

對不起。這是真的在哪裏導致我的問題。我想確定我的船總是在賽道上,所以我把它翻譯下來。這是不正確的,因爲我的樣條是隨機的。只需修復:mesh.position.set(i *(config.laneSpan + config.laneWidth),0,0);並改變矩形。謝謝你 – newvalue

+0

啊,明白了。那麼,很高興我能幫助至少找到問題線。 –