Программный тайлинг текстур

Если создавать модель в максе, то там же и задается тайлинг, если надо ручками, то надо умножить uv координаты на количество частей. В данном примере делаем тайлинг 2х2:

var a:Number = 2;
plane.setUVsToFace(new Point(0, 0), new Point(a, 0), new Point(a, a), "front0_0");
plane.setUVsToFace(new Point(0, 0), new Point(0, a), new Point(a, a), "back0_0");

В итоге получаем плейн с тайлингом 2х2, а также отраженные текстурки сзади:
post2

Ниже код:

 package
{
	import alternativa.engine3d.controllers.CameraController;
	import alternativa.engine3d.core.Camera3D;
	import alternativa.engine3d.core.Object3D;
	import alternativa.engine3d.core.Scene3D;
	import alternativa.engine3d.display.View;
	import alternativa.engine3d.materials.TextureMaterial;
	import alternativa.engine3d.primitives.Plane;
	import alternativa.types.Texture;
	import alternativa.utils.FPS;
	import fl.controls.Slider;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.net.navigateToURL;
	import flash.net.URLRequest;
 
	/**
	 * ...
	 * @author Romano (www.romano.su)
	 */
	public class Main extends Sprite
	{
		private var scene:Scene3D;
		private var view:View;
		private var camera:Camera3D;
		private var cameraController:CameraController;
		private var plane:Plane;
 
		[Embed(source = "../assets/alternativa3d_medium.png")]
		private var Logo:Class;
 
		[Embed(source = "../assets/image.png")]
		private var MyImage:Class;
 
		public function Main():void
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
 
			// Создание сцены
			scene = new Scene3D();
			scene.root = new Object3D();
 
			// Добавление камеры и области вывода
			camera = new Camera3D();
			camera.x = 100;
			camera.y = -150;
			camera.z = 100;
			camera.rotationX = 0;
			camera.rotationY = 0;
			camera.rotationZ = 0;
			scene.root.addChild(camera);
 
			view = new View();
			addChild(view);
			view.camera = camera;
			view.interactive = true;
 
			// создание текстуры
			var bmpImage:BitmapData = new BitmapData(400, 400);
			bmpImage.draw(new MyImage());
			var texture:Texture = new Texture(bmpImage);
			var textureMaterial:TextureMaterial = new TextureMaterial(texture, 1, true, true);
 
			// создание плейна
			plane = new Plane(100, 100);
			plane.cloneMaterialToAllSurfaces(textureMaterial);
			plane.x = 100;
			scene.root.addChild(plane);
 
			// тайлинг
			var a:Number = 2;
			plane.setUVsToFace(new Point(0, 0), new Point(a, 0), new Point(a, a), "front0_0");
			plane.setUVsToFace(new Point(0, 0), new Point(0, a), new Point(a, a), "back0_0");
 
			// Подключение контроллера камеры
			cameraController = new CameraController(stage);
			cameraController.camera = camera;
			cameraController.setDefaultBindings();
			cameraController.checkCollisions = true;
			cameraController.collisionRadius = 20;
			cameraController.lookAt(plane.coords);
 
			// Запуск счётчика кадров
			FPS.init(stage);
 
			stage.addEventListener(Event.RESIZE, onResize);
			stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
 
			// создаем и добавляем слайдер на сцену
			insertSlider();
 
			insertLogo();
 
			onResize(null);
		}
 
		private function insertSlider():void
		{
			var slider:Slider = new Slider();
			slider.x = 50;
			slider.y = 50;
			slider.rotation = 90;
			slider.minimum = 0;
			slider.maximum = 360;
			slider.liveDragging = true;
			slider.snapInterval = slider.tickInterval;
			slider.addEventListener(Event.CHANGE, sliderChange);
			addChild(slider);
 
		}
 
		private function sliderChange(event:Event):void
		{
			plane.rotationX = event.currentTarget.value * (Math.PI / 180);
		}
 
		private function onResize(e:Event):void {
			view.width = stage.stageWidth;
			view.height = stage.stageHeight;
		}
 
		private function insertLogo():void
		{
			var logoSprite:Sprite = new Sprite();
			logoSprite.addChild(new Logo());
			addChild(logoSprite);
			logoSprite.x = stage.stageWidth - logoSprite.width - 5;
			logoSprite.y = stage.stageHeight - logoSprite.height - 5;
			logoSprite.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void {
					var request:URLRequest = new URLRequest("http://www.alternativaplatform.com");
					navigateToURL(request, "_blank");
				});
		}
 
		private function onEnterFrame(event:Event):void
		{			
 
			// Расчёт сцены
			scene.calculate();
		}
 
	}
 
}

Тэги: , ,

Комментариев: 4 to “Программный тайлинг текстур”

  1. shhfknbtvdh пишет:

    tBNLnc vcwfnqvzqxee, [url=http://xqdruesulonu.com/]xqdruesulonu[/url], [link=http://fzmixwrkdmyk.com/]fzmixwrkdmyk[/link], http://inlbylzjnvqn.com/

Оставить комментарий