Team Ai
Apppublic

awacke1/HTML5-ThreeJS

sourceHugging Facemitupdated 3y agoView on Hugging Face
1likes
backup.html93 linesDownload Raw Back to root
1<script>2    var scene = new THREE.Scene();3    var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);4    camera.position.set(0, 20, 50);5    var renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('gameCanvas') });6    renderer.setSize(window.innerWidth, window.innerHeight);7    // Lighting8    var ambientLight = new THREE.AmbientLight(0x404040); // Soft white light9    scene.add(ambientLight);10    var directionalLight = new THREE.DirectionalLight(0xffffff, 0.5);11    directionalLight.position.set(0, 1, 1);12    scene.add(directionalLight);13    // Table14    var tableGeometry = new THREE.BoxGeometry(100, 1, 100);15    var tableMaterial = new THREE.MeshLambertMaterial({ color: 0x8B4513 });16    var table = new THREE.Mesh(tableGeometry, tableMaterial);17    table.position.set(0, -0.5, 0);18    scene.add(table);19    // Cards20    var cardGeometry = new THREE.BoxGeometry(5, 0.1, 7);21    var cards = [];22    var textureLoader = new THREE.TextureLoader();23    var imageNames = [24        'the_hidden_city_known_as_civilization1.png',25        'the_hidden_city_known_as_civilization2.png',26        'the_hidden_city_known_as_civilization3.png',27        'the_hidden_city_known_as_civilization4.png',28    ];29 30    // Generate and place cards31    for (let i = 0; i < 52; i++) {32        const imageName = imageNames[i % 4]; // Cycle through the image names33        const texture = textureLoader.load(imageName);34        texture.wrapS = THREE.RepeatWrapping;35        texture.wrapT = THREE.RepeatWrapping;36        texture.repeat.set(4, 4);37 38        var materials = [39            new THREE.MeshLambertMaterial({ map: texture }), // top side40            new THREE.MeshLambertMaterial({ map: texture }), // bottom side41            new THREE.MeshLambertMaterial({ color: 0xaaaaaa }), // side materials42            new THREE.MeshLambertMaterial({ color: 0xaaaaaa }),43            new THREE.MeshLambertMaterial({ color: 0xaaaaaa }),44            new THREE.MeshLambertMaterial({ color: 0xaaaaaa }),45        ];46        var card = new THREE.Mesh(cardGeometry, materials);47        card.position.set(Math.random() * 10 - 5, 0.1 * i, Math.random() * 10 - 5);48        scene.add(card);49        cards.push(card);50    }51    var raycaster = new THREE.Raycaster();52    var mouse = new THREE.Vector2();53    var selectedCard = null;54    var offset = new THREE.Vector3();55    function onMouseMove(event) {56        mouse.x = (event.clientX / window.innerWidth) * 2 - 1;57        mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;58        if (selectedCard) {59            raycaster.setFromCamera(mouse, camera);60            var intersects = raycaster.intersectObject(table, true);61            if (intersects.length > 0) {62                var intersect = intersects[0];63                selectedCard.position.copy(intersect.point.add(offset));64            }65        }66    }67    function onMouseDown(event) {68        mouse.x = (event.clientX / window.innerWidth) * 2 - 1;69        mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;70        raycaster.setFromCamera(mouse, camera);71        var intersects = raycaster.intersectObjects(cards, true);72        if (intersects.length > 0) {73            selectedCard = intersects[0].object;74            var intersects = raycaster.intersectObject(table, true);75            if (intersects.length > 0) {76                var intersect = intersects[0];77                offset.subVectors(selectedCard.position, intersect.point);78            }79        }80    }81    function onMouseUp(event) {82        selectedCard = null;83    }84    window.addEventListener('mousemove', onMouseMove, false);85    window.addEventListener('mousedown', onMouseDown, false);86    window.addEventListener('mouseup', onMouseUp, false);87    function animate() {88        requestAnimationFrame(animate);89        renderer.render(scene, camera);90    }91    animate();92</script>93