https://acrobat.adobe.com/link/review?uri=urn:aaid:scds:US:eab58e09-fcb7-4578-8995-2ecb5163d9be
//<!DOCTYPE html>
//<html>
//<head>
// <title>OpenGL Tree with Clickable Leaves</title>
// <style>
// canvas { display: block; }
//:</style>
//</head>//
<body>
<h1>OpenGL Tree with Clickable Leaves</h1>
<canvas id="glcanvas" width="640" height="480"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gl-matrix/2.8.1/gl-matrix-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/webgl-utils/2.0.0/webgl-utils.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script>
// Set up the WebGL context and the Three.js scene
const canvas = document.getElementById("glcanvas");
const gl = canvas.getContext("webgl");
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, canvas.width / canvas.height, 0.1, 1000);
const renderer = new THREE.WebGLRenderer({canvas: canvas});
renderer.setSize(canvas.width, canvas.height);
// Add a tree to the scene
const treeGeometry = new THREE.CylinderGeometry(0, 10, 50, 8);
const treeMaterial = new THREE.MeshBasicMaterial({color: 0x00ff00});
const tree = new THREE.Mesh(treeGeometry, treeMaterial);
scene.add(tree);
// Add clickable leaves to the tree
const leafGeometry = new THREE.SphereGeometry(5, 8, 8);
const leafMaterial = new THREE.MeshBasicMaterial({color: 0xff0000});
for (let i = 0; i < 8; i++) {
const leaf = new THREE.Mesh(leafGeometry, leafMaterial);
leaf.position.set(Math.sin(i * Math.PI / 4) * 20, 25, Math.cos(i * Math.PI / 4) * 20);
leaf.name = "leaf" + i;
scene.add(leaf);
}
// Add event listeners to the leaves
canvas.addEventListener("click", function(event) {
const raycaster = new THREE.Raycaster();
const mouse = new THREE.Vector2();
mouse.x = (event.clientX / canvas.width) * 2 - 1;
mouse.y = -(event.clientY / canvas.height) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
const intersects = raycaster.intersectObjects(scene.children, true);
for (let i = 0; i < intersects.length; i++) {
if (intersects[i].object.name.startsWith("leaf")) {
window.open("https://www.example.com/" + intersects[i].object.name + ".html");
}
}
});
// Render the scene
camera.position.z = 100;
function animate() {
requestAnimationFrame(animate);
tree.rotation.y += 0.01;
renderer.render(scene, camera);
}
animate();
</script>
//</body>
//</html>//