|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
попиксельная точность drawTriangles/правила растеризации её
Пример: берём битмапу (рисуем на ней), рисуем втупую её 1 к 1 квадом при помощи drawTriangles - то, что нарисовано не совпадает с выведенной рядом битмапой. Код ниже это и делает.
Нашел какой-то шаманский способ сделать, чтоб 1 к 1 выводило корректно. Но 1 к 2 (drawTriangles рисует в 2 раза увеличенную битмапу) - не хочет совсем никак. Собсно хочу об этом поговорить =) Дядьки (и тётки), научите, как работает drawTriangles и как её заставить нарисовать в 2 раза увеличенную модель корректно. По какому принципу оно рисует так, как рисует? Вроде имею представление, как тексели в пикселы перелезают, но везде в 2 раза увеличить текстуру при этом - нет проблем. Растеризация при помощи moveTo/lineTo и матрицы при beginBitmapFill - работает отлично. Собсно, если нельзя корректно даже в 2 раза увеличенную текстуру на кваде нарисовать, то как-то стрёмно вообще drawTriangles использовать. 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);
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Lorem ipsum
|
При текстурировании треугольника происходит интерполяция, которая далека от копирования точек 1-в-1 из текстуры в рамках треугольной области.
__________________
Поймай яблоко 2! |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
А как она работает-то на флэше?
Если нельзя получить тупо в 2 раза увеличенную текстуру, то это хреновая интерполяция. У меня было текстурирование треугольников при помощи moveTo/lineTo и матрицы при beginBitmapFill - всё отлично и предсказуемо (ну без перспективной коррекции, есстесно). В директе тоже 0 проблем.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Lorem ipsum
|
Покажи, что у тебя выходит.
__________________
Поймай яблоко 2! |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
ээ выше ж код, в комментах написано, что делать, чтоб в 2 раза увеличить. При moveTo/lineTo - тупо всё как надо, код не приводил, чтоб не захламлять.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Lorem ipsum
|
Я имел в виду изображения.
__________________
Поймай яблоко 2! |
|
|||||
var xSize:int = 50;//размеры битмапы, можно ими играться var ySize:int = 50; var s:Shape = new Shape(); s.x = xSize; s.y = ySize; var bmpd:BitmapData = new BitmapData(xSize, ySize, true, 0xffffffff); var testShape:Shape = new Shape(); testShape.graphics.beginFill(0xFF0000); testShape.graphics.drawCircle(25, 25, 15); testShape.graphics.endFill(); bmpd.draw(testShape); var bmp:Bitmap = new Bitmap(bmpd); addChild(bmp); s.graphics.beginBitmapFill(bmpd, null, true, false); s.graphics.drawTriangles( Vector.<Number>([0, 0, 100, 0, 0, 100, 100,100]), Vector.<int>([0, 1, 2, 1, 3, 2]), Vector.<Number>([0,0,1,0,0,1,1,1])); addChild(s); |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Изображение, на котором виден горький катаклизм в том коде генерится, мож фон поменять на чёрный, или цвет чёрный непрозрачный поставить в setPixel().
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
|
Почему не устраивает вариант с увеличением изображения с помощью Matrix.scale?
|
Часовой пояс GMT +4, время: 08:33. |
|
« Предыдущая тема | Следующая тема » |
|
|