![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Здравствуйте
Я хочу отрисовать в BitmapData 3d сцену нарисованную с помощью Away3D, причем, мне нужно чтобы эта BitmapData была с прозрачностью, то бишь, если на сцене есть сфера, то все остальное должно быть прозрачным Это реально сделать ? Я делаю так: var bmp:BitmapData = new BitmapData(awayContainer.view.width, awayContainer.view.height,true,0xffffff00); awayContainer.view.renderer.swapBackBuffer = false; awayContainer.view.render(); awayContainer.view.stage3DProxy.context3D.drawToBitmapData(bmp); awayContainer.view.renderer.swapBackBuffer = true; resultImage.source = new Bitmap(bmp); |
|
|||||
|
не помогло
![]() |
|
|||||
|
BlendFactors установили?
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
ОО. я и не знал о таком, буду пробовать, спасибо за наводки
А это в каком месте кода устанавливать ? до рендера, ? До добавления детей в контейнер ? Последний раз редактировалось djyamato; 06.08.2012 в 16:51. |
|
|||||
|
Во всех последних билдах плеера 11.4 - они сломали. В предыдущих сохранение с альфой работает 100%.
В объектах BitmapData хранятся цвета, которые уже умножены на альфа-компонент. Можно настроить коэффициенты наложения, чтобы цвета, визуализированные в буфере, умножались на значение альфа, или можно выполнить эту операцию во фрагментном шейдере. |
|
|||||
|
Цитата:
Может ссылку наводящую дадите или что-то вроде того |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Помогло выставление всех компонентов цвета в ноль:
Результат в 11.4.402.287: Полный код примера: /*!***************************************************************** * * File created: '30.11.2012 6:10 PM' * * Copyright (c) 2012 iodev (i.o.developer@gmail.com) * All Rights Reserved. * * NOTICE: using this code allowed after author approving only. * **/ package { import com.adobe.utils.*; import flash.display.*; import flash.display3D.*; import flash.display3D.textures.*; import flash.events.*; import flash.utils.*; /** * @author iodev (i.o.developer[at]gmail.com) */ public class Main extends Sprite { [Embed(source="flash_logo_alpha.png")] private static const alphaTextureCl : Class; public function Main() { _init(); } private var _stage3D : Stage3D; private var _context3D : Context3D; private var _vbufA : VertexBuffer3D; private var _vbufB : VertexBuffer3D; private var _uvBufCube : VertexBuffer3D; private var _ibufCube : IndexBuffer3D; private var _ibufPlane : IndexBuffer3D; private var _texture : Texture; private var _shader : Program3D; private var _bitmap : Bitmap; private var _bitmapData : BitmapData; private function _init() : void { stage.frameRate = 60.0; trace(stage.stage3Ds); _stage3D = stage.stage3Ds[0]; _stage3D.addEventListener(Event.CONTEXT3D_CREATE, _onContext3D); _stage3D.requestContext3D(Context3DRenderMode.AUTO); var s:Shape = new Shape(); s.graphics.beginFill(0xFF00FF, 1.0); s.graphics.drawEllipse(100, 100, 100, 100); s.graphics.endFill(); s.alpha = 0.5; addChild(s); _bitmapData = new BitmapData(512, 512, true, 0x0); _bitmap = new Bitmap(_bitmapData); _bitmap.x = 200.0; _bitmap.y = 100.0; addChild(_bitmap); } private function _onContext3D( e:Event ) : void { _context3D = _stage3D.context3D; _context3D.configureBackBuffer(512, 512, 0, false); _vbufA = _context3D.createVertexBuffer(8, 7); _vbufA.uploadFromVector(new <Number>[ // x, y, z, r, g, b, a -0.5, -0.5, -0.5, 1.0, 0.0, 0.0, 0.0, +0.5, -0.5, -0.5, 0.0, 1.0, 0.0, 1.0, +0.5, +0.5, -0.5, 0.0, 0.0, 1.0, 0.0, -0.5, +0.5, -0.5, 1.0, 0.0, 1.0, 1.0, -0.5, -0.5, +0.5, 1.0, 0.0, 1.0, 1.0, +0.5, -0.5, +0.5, 1.0, 1.0, 0.0, 0.0, +0.5, +0.5, +0.5, 0.0, 1.0, 1.0, 1.0, -0.5, +0.5, +0.5, 0.0, 1.0, 0.0, 0.0 ], 0, 8); _vbufB = _context3D.createVertexBuffer(8, 7); _vbufB.uploadFromVector(new <Number>[ // x, y, z, r, g, b, a -0.5, -0.35, -0.9, 0.0, 1.0, 0.0, 1.0, +0.5, -0.35, -0.9, 1.0, 0.0, 0.0, 0.0, +0.5, +0.65, -0.9, 1.0, 0.0, 1.0, 1.0, -0.5, +0.65, -0.9, 0.0, 0.0, 1.0, 0.0, -0.5, -0.35, +0.2, 1.0, 1.0, 0.0, 0.0, +0.5, -0.35, +0.2, 1.0, 0.0, 1.0, 1.0, +0.5, +0.65, +0.2, 0.0, 1.0, 0.0, 0.0, -0.5, +0.65, +0.2, 0.0, 1.0, 1.0, 1.0, ], 0, 8); _uvBufCube = _context3D.createVertexBuffer(8, 2); _uvBufCube.uploadFromVector(new <Number>[ // u, v 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0 ], 0, 8); _ibufCube = _context3D.createIndexBuffer(36); _ibufCube.uploadFromVector(new <uint>[ 0, 1, 2, 0, 2, 3, 4, 6, 5, 4, 7, 6, 0, 7, 4, 0, 3, 7, 1, 5, 6, 1, 6, 2, 0, 4, 5, 0, 5, 1, 3, 6, 7, 3, 2, 6 ], 0, 36); _ibufPlane = _context3D.createIndexBuffer(6); _ibufPlane.uploadFromVector(new <uint>[ 0, 1, 2, 0, 2, 3, ], 0, 6); var asmVShader:String = "mov op, va0 \n" + //copy position to output "mov v0, va1"; //copy color to varying variable v0 var asmPShaderTex:String = "tex oc, v0, fs0 <2d, linear, mipnone>"; //Set the output color to the value interpolated from the three triangle vertices _shader = _context3D.createProgram(); _shader.upload((new AGALMiniAssembler()).assemble(Context3DProgramType.VERTEX, asmVShader), (new AGALMiniAssembler()).assemble(Context3DProgramType.FRAGMENT, asmPShaderTex)); var texBd:BitmapData = (new alphaTextureCl() as Bitmap).bitmapData; _texture = _context3D.createTexture(texBd.width, texBd.height, Context3DTextureFormat.BGRA, true); _texture.uploadFromBitmapData(texBd); super.addEventListener(Event.ENTER_FRAME, _onEnterFrame); } private function _onEnterFrame( e:Event ) : void { _context3D.clear(0.0, 0.0, 0.0, 0.0, 1.0, 0.0, Context3DClearMask.ALL); _context3D.setBlendFactors(Context3DBlendFactor.SOURCE_ALPHA, Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA); _context3D.setProgram(_shader); _context3D.setTextureAt(0, _texture); _context3D.setVertexBufferAt(0, _vbufA, 0, Context3DVertexBufferFormat.FLOAT_3); _context3D.setVertexBufferAt(1, _uvBufCube, 0, Context3DVertexBufferFormat.FLOAT_2); _context3D.drawTriangles(_ibufCube, 0, 12); _context3D.setVertexBufferAt(0, _vbufB, 0, Context3DVertexBufferFormat.FLOAT_3); _context3D.setVertexBufferAt(1, _uvBufCube, 0, Context3DVertexBufferFormat.FLOAT_2); _context3D.drawTriangles(_ibufCube, 0, 12); _context3D.drawToBitmapData(_bitmapData); _context3D.present(); // e.currentTarget.removeEventListener(e.type, arguments.callee); } } }
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Как к Away3D это применить не знаю
![]()
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
В авей есть же опаситимап, применяйте карту непрозрачности, а так-же там должны были уже сделать использование формата ATF, в нём прозрачность встроена и понятна видеокарте. Самому с блендингом много экспериментировать прийдётся, так как отрисовка по глубине может обратной получиться. В стейдж 3D нет прозрачности только смешивание, отвечает за него Context3DBlendFactor - определяет значения, которые должны использоваться для указания коэффициентов исходного и целевого наложения, как в DirectX
|
![]() |
![]() |
Часовой пояс GMT +4, время: 07:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|