more versions added

This commit is contained in:
Tubix
2024-10-05 12:11:16 +01:00
parent 413f563f33
commit c32c7e8c34
7661 changed files with 1343635 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
K 25
svn:wc:ra_dav:version-url
V 99
/!svn/ver/497/platform/clients/fp10/libraries/Alternativa3D/tags/5.4.1/alternativa/engine3d/display
END
Skin.as
K 25
svn:wc:ra_dav:version-url
V 107
/!svn/ver/497/platform/clients/fp10/libraries/Alternativa3D/tags/5.4.1/alternativa/engine3d/display/Skin.as
END
View.as
K 25
svn:wc:ra_dav:version-url
V 107
/!svn/ver/497/platform/clients/fp10/libraries/Alternativa3D/tags/5.4.1/alternativa/engine3d/display/View.as
END

View File

@@ -0,0 +1,52 @@
8
dir
46043
http://svndev.alternativaplatform.com/platform/clients/fp10/libraries/Alternativa3D/tags/5.4.1/alternativa/engine3d/display
http://svndev.alternativaplatform.com
2008-09-08T06:50:26.103978Z
468
mike
svn:special svn:externals svn:needs-lock
d9e2387a-1f3e-40e2-b57f-9df5970a2fa5
Skin.as
file
2010-10-28T04:31:16.000000Z
a49c915b68556525f014d6b2b1477b38
2008-09-08T06:50:26.103978Z
468
mike
View.as
file
2010-10-28T04:31:16.000000Z
d9cfe36eb0034482d153d4b0f47c7759
2008-08-29T11:41:21.451513Z
304
wolf

View File

@@ -0,0 +1 @@
8

View File

@@ -0,0 +1,66 @@
package alternativa.engine3d.display {
import alternativa.engine3d.*;
import alternativa.engine3d.core.PolyPrimitive;
import alternativa.engine3d.materials.SurfaceMaterial;
import flash.display.Graphics;
import flash.display.Sprite;
use namespace alternativa3d;
/**
* @private
* Контейнер, исползуемый материалами для отрисовки примитивов. Каждый примитив BSP-дерева рисуется в своём контейнере.
*/
public class Skin extends Sprite {
/**
* @private
* Графика скина (для быстрого доступа)
*/
alternativa3d var gfx:Graphics = graphics;
/**
* @private
* Ссылка на следующий скин
*/
alternativa3d var nextSkin:Skin;
/**
* @private
* Примитив
*/
alternativa3d var primitive:PolyPrimitive;
/**
* @private
* Материал, связанный со скином.
*/
alternativa3d var material:SurfaceMaterial;
// Хранилище неиспользуемых скинов
static private var collector:Array = new Array();
/**
* @private
* Создание скина.
*/
static alternativa3d function createSkin():Skin {
// Достаём скин из коллектора
var skin:Skin = collector.pop();
// Если коллектор пуст, создаём новый скин
if (skin == null) {
skin = new Skin();
}
return skin;
}
/**
* @private
* Удаление скина, все ссылки должны быть почищены.
*/
static alternativa3d function destroySkin(skin:Skin):void {
collector.push(skin);
}
}
}

View File

@@ -0,0 +1,186 @@
package alternativa.engine3d.display {
import alternativa.engine3d.*;
import alternativa.engine3d.core.Camera3D;
import alternativa.engine3d.core.Face;
import flash.display.Sprite;
import flash.geom.Point;
use namespace alternativa3d;
/**
* Область для вывода изображения с камеры.
*/
public class View extends Sprite {
/**
* @private
* Область отрисовки спрайтов
*/
alternativa3d var canvas:Sprite;
private var _camera:Camera3D;
/**
* @private
* Ширина области вывода
*/
alternativa3d var _width:Number;
/**
* @private
* Высота области вывода
*/
alternativa3d var _height:Number;
/**
* Создание экземпляра области вывода.
*
* @param camera камера, изображение с которой должно выводиться
* @param width ширина области вывода
* @param height высота области вывода
*/
public function View(camera:Camera3D = null, width:Number = 0, height:Number = 0) {
canvas = new Sprite();
canvas.mouseEnabled = false;
canvas.mouseChildren = false;
canvas.tabEnabled = false;
canvas.tabChildren = false;
addChild(canvas);
this.camera = camera;
this.width = width;
this.height = height;
}
/**
* Камера с которой ведётся отображение.
*/
public function get camera():Camera3D {
return _camera;
}
/**
* @private
*/
public function set camera(value:Camera3D):void {
if (_camera != value) {
// Если была камера
if (_camera != null) {
// Удалить камеру
_camera.removeFromView(this);
}
// Если новая камера
if (value != null) {
// Если камера была в другом вьюпорте
if (value._view != null) {
// Удалить её оттуда
value._view.camera = null;
}
// Добавить камеру
value.addToView(this);
} else {
// Зачистка скинов
if (canvas.numChildren > 0) {
var skin:Skin = Skin(canvas.getChildAt(0));
while (skin != null) {
// Сохраняем следующий
var next:Skin = skin.nextSkin;
// Удаляем из канваса
canvas.removeChild(skin);
// Очистка скина
if (skin.material != null) {
skin.material.clear(skin);
}
// Зачищаем ссылки
skin.nextSkin = null;
skin.primitive = null;
skin.material = null;
// Удаляем
Skin.destroySkin(skin);
// Следующий устанавливаем текущим
skin = next;
}
}
}
// Сохраняем камеру
_camera = value;
}
}
/**
* Ширина области вывода в пикселях.
*/
override public function get width():Number {
return _width;
}
/**
* @private
*/
override public function set width(value:Number):void {
if (_width != value) {
_width = value;
canvas.x = _width*0.5;
if (_camera != null) {
camera.addOperationToScene(camera.calculatePlanesOperation);
}
}
}
/**
* Высота области вывода в пикселях.
*/
override public function get height():Number {
return _height;
}
/**
* @private
*/
override public function set height(value:Number):void {
if (_height != value) {
_height = value;
canvas.y = _height*0.5;
if (_camera != null) {
camera.addOperationToScene(camera.calculatePlanesOperation);
}
}
}
/**
* Метод возвращает грань, находящуюся под указанной точкой в области вывода.
*
* @param viewPoint координаты точки относительно области вывода
*
* @return ближайшая к камере грань под заданной точкой области вывода
*/
public function getFaceUnderPoint(viewPoint:Point):Face {
var p:Point = localToGlobal(viewPoint);
var objects:Array = canvas.getObjectsUnderPoint(p);
var skin:Skin = objects.pop() as Skin;
if (skin != null) {
return skin.primitive.face;
}
return null;
}
/**
* Метод возвращает грани, находящиеся под указанной точкой в области вывода.
*
* @param viewPoint координаты точки относительно области вывода
*
* @return массив граней, расположенных под заданной точкой области вывода. Первым элементом массива является самая дальняя грань.
*/
public function getFacesUnderPoint(viewPoint:Point):Array {
var p:Point = localToGlobal(viewPoint);
var objects:Array = canvas.getObjectsUnderPoint(p);
var res:Array = new Array();
var length:uint = objects.length;
for (var i:uint = 0; i < length; i++) {
var skin:Skin = objects[i];
res.push(skin.primitive.face);
}
return res;
}
}
}