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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 06.05.2011, 02:07
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 1  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
По умолчанию попиксельная точность drawTriangles/правила растеризации её

Пример: берём битмапу (рисуем на ней), рисуем втупую её 1 к 1 квадом при помощи drawTriangles - то, что нарисовано не совпадает с выведенной рядом битмапой. Код ниже это и делает.
Нашел какой-то шаманский способ сделать, чтоб 1 к 1 выводило корректно. Но 1 к 2 (drawTriangles рисует в 2 раза увеличенную битмапу) - не хочет совсем никак.
Собсно хочу об этом поговорить =) Дядьки (и тётки), научите, как работает drawTriangles и как её заставить нарисовать в 2 раза увеличенную модель корректно. По какому принципу оно рисует так, как рисует? Вроде имею представление, как тексели в пикселы перелезают, но везде в 2 раза увеличить текстуру при этом - нет проблем.
Растеризация при помощи moveTo/lineTo и матрицы при beginBitmapFill - работает отлично.
Собсно, если нельзя корректно даже в 2 раза увеличенную текстуру на кваде нарисовать, то как-то стрёмно вообще drawTriangles использовать.
Код AS3:
var xSize:int = 4;//размеры битмапы, можно ими играться
			var ySize:int = 4;
			var s:Shape = new Shape();
			s.x = xSize;
			s.y = ySize;
 
			var bmpd:BitmapData = new BitmapData(xSize, ySize, true, 0xffffffff);
			for (var i:int = 0; i < Math.min(xSize, ySize); ++i) {
				bmpd.setPixel(i, i, 0x0);
			}
			var bmp:Bitmap = new Bitmap(bmpd);
			addChild(bmp);
			s.graphics.beginBitmapFill(bmpd, null, true, false);
			var testv:Vector.<Number> = new Vector.<Number>();
			var rectCoords:Rectangle = new Rectangle(0, 0, xSize, ySize);//умножьте xSize и xSize на n, чтоб в n раз больше рисовалась
			testv.push( rectCoords.x, rectCoords.y, rectCoords.x, rectCoords.height, rectCoords.width,
			rectCoords.y, rectCoords.x, rectCoords.height, rectCoords.width, rectCoords.y, rectCoords.width, rectCoords.height);
 
			var pixelmul:Number = 0.0;//если поставить 0.5, то в масштабе 1 к 1 (и только) нарисует корректно
			var pixelDerX:Number = bmpd.width;
			var pixelDerY:Number = bmpd.height;
 
			var one:Number = 1;//это уже от безысходности %)
			var two:Number = 1;
			var texCoords:Rectangle = new Rectangle(0 + one * pixelmul / pixelDerX, 0 + one * pixelmul / pixelDerY,
					1 + two * pixelmul / pixelDerX, 1 + two * pixelmul / pixelDerY);
			//var tVal:Number = 1;
			var testt:Vector.<Number> = new Vector.<Number>();
					testt.push( texCoords.x, texCoords.y,// tVal,
					texCoords.x, texCoords.height,// tVal,
					texCoords.width, texCoords.y,// tVal,
					texCoords.x, texCoords.height,// tVal,
					texCoords.width, texCoords.y,// tVal,
					texCoords.width, texCoords.height//, tVal
					);
 
			s.graphics.drawTriangles(testv, null, testt);
 
			addChild(s);
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

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

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


 


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


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