Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Где посмотреть инфу о натяжении текстуры (http://www.flasher.ru/forum/showthread.php?t=120259)

ВАРАН 15.01.2009 19:12

Где посмотреть инфу о натяжении текстуры
 
Я сделал 3d плашку которая вращается от движения мышки. Хочу теперь наложить на неё текстуру. Подскажите может знает кто где посмотреть примеры или что то в этом роде?

Fatality 15.01.2009 19:14

3D говоришь, а ты разделом не ошибся может тебе в AS3 надо ? =/

gloomyBrain 15.01.2009 21:21

Версия AS значения не имеет (хотя AS3 математику быстрее считает)
silin.fatal.ru

Fatality 15.01.2009 21:36

как так не имеет ?
для тех кто в танке - в AS3 в отличии от AS2 и AS1(не будем учитывать разные псевдо-3D плагины) мало-мальски реализована работа с 3D, по крайней мере есть возможность создать MovieClip с координатами x,y и z и натянуть на него текстуру.

P.S вот кусок из официального руководства по AS3:

Общие задачи работы в трех измерениях
В этой главе описываются следующие общие операции, связанные с работой в трех измерениях:
• создание трехмерного объекта;
• перемещение объекта в трехмерном пространстве;
• поворот объекта в трехмерном пространстве;
• представление глубины с использованием перспективной проекции;
• изменение порядка элементов в списке отображения в соответствии с относительными осями Z, чтобы
объекты правильно располагались друг перед другом;
• преобразование трехмерных объектов с помощью трехмерных матриц;
• использование векторов для манипуляции объектами в трехмерном пространстве;
• использование метода Graphics.drawTriangles() для создания перспективы;
• использование UV-наложения для добавления растровых текстур в трехмерный объект;
• настройка параметра отбора метода Graphics.drawTriangles() , чтобы ускорить визуализацию и скрыть
части трехмерного объекта, которые не видны с текущей точки зрения.

gloomyBrain 15.01.2009 21:39

Для тех, кто сам в танке >> пройдите по ссылке и посмотрите
имитацию z можно создать и ручками, причем, вероятнее всего способ реализации вряд ли будет сильно отличаться от AS3

Fatality 15.01.2009 21:47

=) я то как раз не в танке и в курсе что можно сделать псевдо-3D математическим просчетом, но что мы имеем глюковатую, судорожно-подергивающуюся анимацию ?
Это полумеры, хотя до появления AS3 являлось наилучшим выходом из ситуации.

gloomyBrain 15.01.2009 21:56

Цитата:

Это полумеры, хотя до появления AS3 являлось наилучшим выходом из ситуациию
Что-то я Вас не совсем понимаю..
Спроецировать на экран трехмерное изображение можно:
- самодельными методами
- встроенными методами
Второе в большей части относится к AS3
Однако принципиальной разницы никакой нет
то, что у мувиклипа уже существует свойство z полностью равносильно созданию этого свойства самостоятельно

Если Вы имеете ввиду, что FlashPlayer 10 поддерживает работу с аппаратной частью - то это версия FP, а не AS. Есть разница

ВАРАН 15.01.2009 22:07

Сенкс ту gloomyBrain.
Спаасибо за ссылку. AS3 это конечно хорошо, но у меня мозг пока под AS2 заточен.

Fatality 15.01.2009 22:16

использование самодельных методов для меня и есть полумеры, хотя имея правильно растущие руки можно 3D хоть на коленке сделать =)

Mur4ik 16.01.2009 01:48

Вложений: 1
самодельные методы могут зачастую оказаться лучше встроенных или пришитых adobовцами (пример mx классов - чет многие именно из "полумерок" делают чет безглючно рабочее)
А пооддержка 3d существует только для 10 плеера (AS3 соответсвенно), на который еще не скоро пересядет рядовой интернет-пользователь (не зря ведь до сих пор бОльшая часть заказов поступает с требованием as2 и не выше 8 плеера), т.ч остается именно использовать по Вашему "методы-полумеры" :)

терь по теме...
если плашка, то вот есть AS2 класс который может перспективно искажать изображения, его просто адаптировать для вращения чего нить плоского в трехмерном пространстве
http://www.flashsandy.org/blog/disto...ionscript.html, причем там в примере искажается не просто изображение а потоковое видео с веб-камеры (и довольно таки шустро)...

Если все же хочется написАть что то свое, то общий принцип таков:
Все строится на матрицах трансформаций, про них читаем здесь http://www.senocular.com/flash/tutor...ansformmatrix/
чтоб добиться именно перспективных искажений примерный алгоритм на картинке ниже, чем больше треугольников - тем качественней результат.

Если нужна более сложная поверхность, то там и алгоритмы уже по-сложнее будут.

ВАРАН 16.01.2009 10:47

Я вот знаю пример с методом split(). Один дядька переписал его для AS2 и он стал работать намного шустрее чем родной flashовый метод. Это ещё на MX было.

Добавлено через 1 час 37 минут
может мне кто нибудь помоч натянуть вот на это текстуру

Добавлено через 1 час 38 минут
Код AS1/AS2:

import flash.display.BitmapData;
import flash.geom.Matrix;
import flash.filters.ColorMatrixFilter;
 
var focalLength = 400;
var lastMouseX = lastMouseY=kX=kY=0;
//-----------------------------------------------
function create(targed) {
        this.createEmptyMovieClip(targed,2);
        this[targed].param = {x:Stage.width/2, y:Stage.height/2, z:0};
        this[targed].vertex = [{x:-100, y:-100, z:0}, {x:100, y:-100, z:0}, {x:100, y:100, z:0}, {x:-100, y:100, z:0}];
        this[targed].onPress = function() {
                MouseMove = true;
        };
        this[targed].onRelease = function() {
                MouseMove = false;
        };
        this[targed].onReleaseOutside = function() {
                MouseMove = false;
        };
 
}
function render(targed) {
        targed.clear();
        targed.beginFill(0x0000FF,30);
        for (i=0; i<targed.vertex.length; i++) {
                var scale = focalLength/(focalLength-targed.vertex[i].z);
                x = targed.vertex[i].x*scale;
                y = targed.vertex[i].y*scale;
                if (i == 0) {
                        targed.moveTo(x,y);
                } else {
                        targed.lineTo(x,y);
                }
        }
        //
        targed._x = targed.param.x;
        targed._y = targed.param.y;
}
 
rotateY = function (targed, degree) {
        var sin = Math.sin(degree*Math.PI/180);
        var cos = Math.cos(degree*Math.PI/180);
        for (var i = 0; i<targed.vertex.length; i++) {
                var x = cos*targed.vertex[i].x-sin*targed.vertex[i].z;
                var z = cos*targed.vertex[i].z+sin*targed.vertex[i].x;
                targed.vertex[i].z = z;
                targed.vertex[i].x = x;
        }
};
rotateX = function (targed, degree) {
        var sin = Math.sin(degree*Math.PI/180);
        var cos = Math.cos(degree*Math.PI/180);
        for (var i = 0; i<targed.vertex.length; i++) {
                var y = cos*targed.vertex[i].y-sin*targed.vertex[i].z;
                var z = cos*targed.vertex[i].z+sin*targed.vertex[i].y;
                targed.vertex[i].z = z;
                targed.vertex[i].y = y;
        }
};
create("rektangl1");
 
this.onEnterFrame = function() {
        if (MouseMove) {
                kX = this._xmouse-lastMouseX;
                kY = this._ymouse-lastMouseY;
                lastMouseX = this._xmouse;
                lastMouseY = this._ymouse;
        } else {
                lastMouseX = this._xmouse;
                lastMouseY = this._ymouse;
                kX = kY=0;
        }
        rotateY(rektangl1,-kX/2);
        rotateX(rektangl1,-kY);
        render(rektangl1);
 
};


Mur4ik 16.01.2009 15:36

Вложений: 1
Может ;)
В аттаче, собственно, Ваш же код но уже с текстуркой.
Непугайтесь, немного изменил и оптимизировал Ваш код (без обид), но сильно не вникал... думаю можно еще немного ускорить просчеты.

ВАРАН 16.01.2009 19:07

О! Зур рахмет. Что по нашему означает дословно - большое спасибо. А что void реально ускоряет вычисление?

Mur4ik 17.01.2009 00:47

Кто то тут говорил что строгая типизация ускоряет выполнение, но в данном случае это просто уже привычка )
Да и плюс есть некие правила хорошего тона в программировании.


Часовой пояс GMT +4, время: 17:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.