Здравствуйте уважаемые форумчане! Если вам не трудно уделить парочку минут своего времени моей проблеме, то помогите пожалуйста
Я делаю свой сайт на тему игры 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);
?>
Заранее благодарен))