[Help] Интеграция php переменной в javascript
Здравствуйте уважаемые форумчане! Если вам не трудно уделить парочку минут своего времени моей проблеме, то помогите пожалуйста :help:
Я делаю свой сайт на тему игры Minecraft И занимаясь личным кабинетом пользователя я нашел скрип, который в 3d выводит скин игрока. Сам скрипт сделан с помощью библиотеки Three.js Идея мне очень понравилась, но выполнена не очень. Скрипт работает по такому принципу: Он скачивает файл скина с указанного адреса Потом разбивает его на составные части и сохраняет в свою папку Ну и далее просто вставляет эти части в модель и получается 3d изображение Эта схема мене не нравится, так как при обновлении скина придется заново повторять всю процедуру, и сами разбитые скины будут весить очень много И я решил сделать все через php переменную изображения. Сам код, создающий изображение я написал, но как вставить его как текстуру мне непонятно Прошу вашей помощи Ну и вот сами файлики: Основной index.php <!-- 3-D Minecraft Skin Viewer By Kent Rasmussen @ earthiverse.ath.cx Using Three.Js HTML5 3D Engine from https://github.com/mrdoob/three.js/ Add ?user=USERNAME to render a specific username Add &refresh to re-grab the skin and generate new parts Add &webgl to render in webgl --> <?php include('backend/backend.php'); include('config.php'); include('backend/skin_beta.php'); if(!isset($user)) $user = 'earthiverse'; if(isset($refresh)) minecraft_skin_delete($user); minecraft_skin_download($user); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script type="text/javascript" src="backend/resources/3d/Three.js"></script> <script type="text/javascript" src="backend/resources/3d/Cube.js"></script> <script type="text/javascript" src="backend/resources/3d/ImageUtils.js"></script> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link href="style.css" rel="stylesheet" type="text/css" /> <title>3d minecraft body test v1.0</title> </head> <body> <script type="text/javascript"> var camera, scene, renderer; init(); setInterval( loop, 1000 / 60 ); function init() { camera = new THREE.Camera(20, window.innerWidth / window.innerHeight, 1, 1000); scene = new THREE.Scene(); var head_materials = [new THREE.MeshBasicMaterial({map:ImageUtils.loadTexture('Место для текстуры')}),new THREE.MeshBasicMaterial({map:ImageUtils.loadTexture('images/skins/<?php echo $user; ?>/head_left.png')}),new THREE.MeshBasicMaterial({map:ImageUtils.loadTexture('images/skins/<?php echo $user; ?>/head_top.png')}),new THREE.MeshBasicMaterial({map:ImageUtils.loadTexture('images/skins/<?php echo $user; ?>/head_bottom.png')}),new THREE.MeshBasicMaterial({map:ImageUtils.loadTexture('images/skins/<?php echo $user; ?>/head_back.png')}),new THREE.MeshBasicMaterial({map:ImageUtils.loadTexture('images/skins/<?php echo $user; ?>/head_front.png')})]; head = new THREE.Mesh( new Cube(8, 8, 8, 1, 1, head_materials), new THREE.MeshFaceMaterial()); head.position.x = 0; head.position.y = 0; head.position.z = 0; scene.addObject(head); <?php if(isset($_GET['webgl'])) echo 'renderer = new THREE.WebGLRenderer();'; else echo 'renderer = new THREE.CanvasRenderer();'; ?> renderer.setSize( window.innerWidth, window.innerHeight ); document.body.appendChild( renderer.domElement ); } var xvar = 0; function loop() { xvar += Math.PI/90 camera.target.position.x = 0; camera.target.position.y = -11; camera.target.position.z = 0; //Leg Swing leg_left.rotation.x = Math.cos(xvar); leg_left.position.z = 0 - 6*Math.sin(leg_left.rotation.x); leg_left.position.y = -16 - 6*Math.abs(Math.cos(leg_left.rotation.x)); leg_right.rotation.x = Math.cos(xvar + (Math.PI)); leg_right.position.z = 0 - 6*Math.sin(leg_right.rotation.x); leg_right.position.y = -16 - 6*Math.abs(Math.cos(leg_right.rotation.x)); //Arm Swing arm_left.rotation.x = Math.cos(xvar + (Math.PI)); arm_left.position.z = 0 - 6*Math.sin(arm_left.rotation.x); arm_left.position.y = -4 - 6*Math.abs(Math.cos(arm_left.rotation.x)); arm_right.rotation.x = Math.cos(xvar); arm_right.position.z = 0 - 6*Math.sin(arm_right.rotation.x); arm_right.position.y = -4 - 6*Math.abs(Math.cos(arm_right.rotation.x)); camera.position.x = 0 - 100*Math.sin(xvar); camera.position.y = 0 - 30*Math.sin(xvar); camera.position.z = 0 - 100*Math.cos(xvar); renderer.render( scene, camera ); } </script> </body> </html> Ну и сам файл, создающий изображение skin_beta.php <?php $im = imagecreatefrompng("http://s3.amazonaws.com/MinecraftSkins/yura29.png"); $face = imagecreatetruecolor ( 8 , 8 ); imagecopy ( $face , $im , 0 , 0 , 8 , 8 ,8 , 8 ); imagepng($face); imagedestroy($face); ?> Заранее благодарен)) |
Много кода. Че нужно то, я не понял? Вкратце напиши.
|
На 38 строке есть текст 'Место для текстуры'
Туда нужно вывести текстуру в виде переменной $face из второго файла |
Функция loadTexture принимает путь к файлу, так?
Значит нужно сохранить картинку $face в файл какой-нибудь и указать путь к нему. Либо попробовать вставить вместо пути к файлу data-uri: 'data:image/png,'.base64_encode($face) Не факт что loadTexture примет такой URI |
Попробовал через URI все исчезло и появилась ошибка
‰PNG IHDRKm)ЬУIDAT™И7яJ) ккм ьфшьсфцчццушьъыьмцЂkl чхупожћ¬¦¤}f цющпупбжЪ KzЊ\жьъKахcђ–cF№БѕNB<диЫгйнфыэгдЮђўљ Ќ ўнфчезйюююѕСНцчэыыъ VьУ)4IEND®B`‚ А на счет сохранения файла, то сам оригинал скрипта так и выполнен, но это крайне нежелательно |
А в браузере сформированный URI открывается нормально?
|
Ну в самом создающем скрипте я пробовал выводить картинку через imagepng($face); и всё работало
Заменив imagepng($face); на 'data:image/png,'.base64_encode($face) получил ошибку Warning: base64_encode() expects parameter 1 to be string, |
|
Часовой пояс GMT +3, время: 06:59. |