Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.10.2011, 23:24
kilka вне форума Посмотреть профиль Отправить личное сообщение для kilka Найти все сообщения от kilka
  № 1  
Ответить с цитированием
kilka

Регистрация: Oct 2011
Сообщений: 14
Question проблема с текстурированием поверхности

Доброго времени суток.

У меня есть задачка, за которую мне интересно было взяться, хотя ничего в это до нынешнего момента не знал, прочитал книги,справки по ActionScript 3.0, нашел этот замечательный форум, где мне умные люди ответили и сильно помогли. Суть задачи в том, чтобы растянуть картинку по сфере изнутри, попробовал с помощью drawTriangles() и текстурированием поверхности, но при запуске у меня ничего не происходит и выводится ошибка:

Error: Error #1502: Сценарий выполнялся дольше периода ожидания, установленного по умолчанию на 15 секунд.
at _fla::MainTimeline/OnComplete()

Может кто-нибудь найдет что-то неладное в моем коде:

Код AS3:
import flash.display.Loader;
import flash.events.Event;
import flash.net.URLRequest;
import flash.display.BitmapData;
 
var imageLoader: Loader = new Loader();
 
imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, OnComplete);
 
imageLoader.load(new URLRequest('4.jpg'));
 
function OnComplete(e: Event): void
{
	var focalLength: Number = 200;
	var bitmapData: BitmapData = Bitmap(imageLoader.content).bitmapData;
	var verticles: Vector.<Number> = new Vector.<Number>();
	var indices: Vector.<int> = new Vector.<int>;
	var t1, t2, t3, t4: Number = 0;
	var uvtData: Vector.<Number> = new Vector.<Number>();
 
	this.graphics.clear();
	this.graphics.beginBitmapFill(bitmapData);
 
	for (var i: int = -300; i < 296; i+=4)
	{
		for (var j: int = -300; j < 296; j+=4)
		{
			t1 = focalLength/(focalLength - Math.sqrt(360000 - i*i - j*j));
			t2 = focalLength/(focalLength - Math.sqrt(360000 - (i + 4)*(i + 4) - j*j));
			t3 = focalLength/(focalLength - Math.sqrt(360000 - i*i - (j + 4)*(j + 4)));
			t4 = focalLength/(focalLength - Math.sqrt(360000 - (i + 4)*(i + 4) - (j + 4)*(j + 4)));
			verticles.push((i+300)*t1,(j+300)*t1, (i+304)*t2,(j+300)*t2, (i+300)*t3,(j+304)*t3, (i+304)*t4,(j+304)*t4);
			indices.push(0,2,1, 1,2,3);
			uvtData.push((i+300)/600,(j+300)/600,t1, (i+304)/600,(j+300)/600,t2, (i+300)/600,(j+304)/600,t3, (i+304)/600,(j+304)/600,t4);
			this.graphics.drawTriangles(verticles, indices, uvtData);
		}
	}
}

Старый 01.11.2011, 18:31
DCH вне форума Посмотреть профиль Отправить личное сообщение для DCH Найти все сообщения от DCH
  № 2  
Ответить с цитированием
DCH
 
Аватар для DCH

Регистрация: Jun 2009
Адрес: Нерезиновая
Сообщений: 23
Ответ кроется в самом вопросе - ваш код выполняется дольше 15 секунд. В данном случае неладен сам подход, ибо такие вычисления могут "положить" машину надолго. Если это приемлимо - у компилятора есть параметр -max-execution-time <число> , которое определяет эту цифру (в случае компилирования в mxmlc.)

Старый 01.11.2011, 21:18
kilka вне форума Посмотреть профиль Отправить личное сообщение для kilka Найти все сообщения от kilka
  № 3  
Ответить с цитированием
kilka

Регистрация: Oct 2011
Сообщений: 14
да,может подход не оптимизирован,но я пока не знаю как можно разбить картинку на треугольники и с помощью uvtData преобразовать его,чтобы увидеть псевдо3д и исказить по полусфере картинку

Старый 01.11.2011, 21:29
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 4  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Там просто неладно слишком многое, чтоб это имело смысл править. Сфера там точно не рисуется. Возьмите 3д движок какой-нить, там наверняка есть пример со сферой.
Ну или нарисуйте сперва один треугольник при помощи drawTriangles. Потом два, много, учитесь делать перспективу и пр.)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 01.11.2011, 21:51
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 5  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
kilka по Away3D есть просто гора уроков в инете, и даже есть пара книжек, причем написанных самими авторами движка. Эвэй точно справится с этой задачей запросто

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:18.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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