Ein gedrehtes Objekt (Zylinder in diesem Fall) schneidet Objekte ab (ein Dreieck, das in diesem Fall durch Linien gebildet wird), obwohl das renderOrder
des zweiten Objekts höher ist. Siehe this jsfiddle demo für den Effekt.Objekt mit einem höheren renderOrder wird durch rotiertes Element geclippt
Das Dreieck sollte vollständig auf der Oberseite des Zylinders gerendert werden, wird aber abgeschnitten, wo die Außenseite des Zylinders es schneidet. Es ist einfacher zu verstehen, was passiert, wenn eine Textur verwendet wird, aber jsfiddle ist schlecht bei der Verwendung externer Bilder.
var mesh, renderer, scene, camera, controls;
init();
animate();
function init() {
renderer = new THREE.WebGLRenderer({
antialias: true,
preserveDrawingBuffer: true
});
renderer.setClearColor(0x24132E, 1);
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(40, window.innerWidth/window.innerHeight, 0.1, 10000);
camera.position.set(0, 0, 7);
camera.lookAt(scene.position)
scene.add(camera);
var geometry = new THREE.CylinderGeometry(1, 1, 100, 32, 1, true);
var material = new THREE.MeshBasicMaterial({
color: 0x0000ff
});
material.side = THREE.DoubleSide;
mesh = new THREE.Mesh(geometry, material);
mesh.rotation.x = Math.PI/2;
scene.add(mesh);
var c = 3, // Side length of the triangle
a = c/2,
b = Math.sqrt(c * c - a * a),
yOffset = -b/3; // The vertical offset (if 0, triangle is on x axis)
// Draw the red triangle
var geo = new THREE.Geometry();
geo.vertices.push(
new THREE.Vector3(0, b + yOffset, 0),
new THREE.Vector3(-a, 0 + yOffset, 0),
new THREE.Vector3(a, 0 + yOffset, 0),
new THREE.Vector3(0, b + yOffset, 0)
);
var lineMaterial = new THREE.LineBasicMaterial({
color: 0xff0000,
linewidth: 5,
linejoin: "miter"
});
plane = new THREE.Line(geo, lineMaterial);
// Place it on top of the cylinder
plane.renderOrder = 2; // This should override any clipping, right?
scene.add(plane);
}
function animate() {
requestAnimationFrame(animate);
render();
}
function render() {
renderer.render(scene, camera);
}
Mache ich etwas falsch oder ist das ein Fehler?
Sie base64 Bilder in jsfiddle als textures.not sicher verwenden können, aber einige Teile des Dreieck ist innerhalb des Zylinders und beide Objekte sind sichtbar. Auch sollte Dreieck vollständig sichtbar sein? –
hier ist der aktualisierte Code mit Textur und Bahnkontrolle http://jsfiddle.net/akmcv7Lh/60/ –