{"id":1573,"date":"2025-10-26T12:03:37","date_gmt":"2025-10-26T12:03:37","guid":{"rendered":"https:\/\/iaortho.ludovyzubar.sk\/?page_id=1573"},"modified":"2025-10-26T14:46:55","modified_gmt":"2025-10-26T14:46:55","slug":"test-3d","status":"publish","type":"page","link":"https:\/\/iaortho.ludovyzubar.sk\/en\/test-3d\/","title":{"rendered":"test-3d"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"1573\" class=\"elementor elementor-1573\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c08f7bf e-flex e-con-boxed e-con e-parent\" data-id=\"c08f7bf\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-35a9584 elementor-widget elementor-widget-shortcode\" data-id=\"35a9584\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div id=\"threewp-container\" style=\"display: none;\"><\/div><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7954a6c e-flex e-con-boxed e-con e-parent\" data-id=\"7954a6c\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ad0b8bb elementor-widget elementor-widget-html\" data-id=\"ad0b8bb\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"threewp-container\" style=\"display: none;\"><\/div>\n\n<div id=\"threejs-scene-container\" style=\"width: 100%; height: 500px; margin: 20px auto; border: 1px solid #ddd;\"><\/div>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function () {\n    if (typeof ThreeWP !== 'undefined') {\n        \n        const { THREE, GLTFLoader, OrbitControls } = ThreeWP; \n        \n        const container = document.getElementById('threejs-scene-container');\n        if (!container) return;\n\n        let width = container.clientWidth;\n        let height = container.clientHeight;\n        \n        let scene, camera, renderer, controls;\n        \n        function init() {\n            \/\/ Scene\n            scene = new THREE.Scene();\n            scene.background = new THREE.Color(0xf0f0f0); \n            \n            \/\/ Camera\n            camera = new THREE.PerspectiveCamera(75, width \/ height, 0.1, 1000);\n            camera.position.z = 5;\n            \n            \/\/ Renderer\n            renderer = new THREE.WebGLRenderer({ \n                antialias: true, \n                alpha: true\n            });\n            renderer.setSize(width, height);\n            \n            \/\/ CRITICAL FIXES FOR COLOR AND PBR MATERIALS\n            renderer.outputColorSpace = THREE.SRGBColorSpace; \n            renderer.toneMapping = THREE.ACESFilmicToneMapping; \n            renderer.toneMappingExposure = 1.0; \n            \n            container.appendChild(renderer.domElement);\n            \n            \/\/ Controls\n            controls = new OrbitControls(camera, renderer.domElement);\n            controls.enableDamping = true; \n            \n            \/\/ Lighting\n            const ambientLight = new THREE.AmbientLight(0xffffff, 1.5); \n            scene.add(ambientLight);\n\n            const hemiLight = new THREE.HemisphereLight(0xffffff, 0x444444, 2.5);\n            scene.add(hemiLight);\n\n            const directionalLight = new THREE.DirectionalLight(0xffffff, 5);\n            directionalLight.position.set(5, 5, 5).normalize();\n            scene.add(directionalLight);\n\n\n            \/\/ --- LOAD THE GLTF MODEL ---\n            \/\/ *** UPDATED URL PATH FOR LOCAL DEVELOPMENT (iaortho.local) ***\n            const modelUrl = '\/wp-content\/themes\/astra\/assets\/3d-models\/7076c62b5bcb455eb146990265d2e072_Textured.gltf';\n            const loader = new GLTFLoader();\n            loader.load( \n                modelUrl, \/\/ Now uses the site-root relative path\n                function (gltf) {\n                    gltf.scene.traverse(function (child) {\n                        if (child.isMesh && child.material.isMeshStandardMaterial) {\n                            child.material.needsUpdate = true;\n                        }\n                    });\n                    \n                    scene.add(gltf.scene);\n                    console.log('Model loaded successfully on local site!');\n                    animate(); \n                }, \n                (xhr) => {\n                    console.log(`Model Load: ${(xhr.loaded \/ xhr.total * 100).toFixed(2)}%`);\n                },\n                (error) => {\n                    console.error('An error happened while loading the model:', error);\n                }\n            );\n\n            \/\/ --- Animation Loop ---\n            function animate() {\n                requestAnimationFrame(animate);\n                controls.update(); \n                renderer.render(scene, camera);\n            }\n            \n            \/\/ --- Resize Handler ---\n            window.addEventListener('resize', () => {\n                width = container.clientWidth;\n                height = container.clientHeight;\n                camera.aspect = width \/ height;\n                camera.updateProjectionMatrix();\n                renderer.setSize(width, height);\n            });\n        }\n\n        init(); \/\/ Start the setup\n        \n    } else {\n        console.error('ThreeWP plugin is not active or shortcode <div id=\"threewp-container\" style=\"display: none;\"><\/div> is missing.');\n    }\n});\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1573","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/iaortho.ludovyzubar.sk\/en\/wp-json\/wp\/v2\/pages\/1573","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iaortho.ludovyzubar.sk\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/iaortho.ludovyzubar.sk\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/iaortho.ludovyzubar.sk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/iaortho.ludovyzubar.sk\/en\/wp-json\/wp\/v2\/comments?post=1573"}],"version-history":[{"count":25,"href":"https:\/\/iaortho.ludovyzubar.sk\/en\/wp-json\/wp\/v2\/pages\/1573\/revisions"}],"predecessor-version":[{"id":1598,"href":"https:\/\/iaortho.ludovyzubar.sk\/en\/wp-json\/wp\/v2\/pages\/1573\/revisions\/1598"}],"wp:attachment":[{"href":"https:\/\/iaortho.ludovyzubar.sk\/en\/wp-json\/wp\/v2\/media?parent=1573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}