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

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

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

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
По умолчанию context3D.drawToBitmapData можно ли отрисовать в прозрачную BitmapData

Здравствуйте
Я хочу отрисовать в BitmapData 3d сцену нарисованную с помощью Away3D, причем, мне нужно чтобы эта BitmapData была с прозрачностью, то бишь, если на сцене есть сфера, то все остальное должно быть прозрачным
Это реально сделать ?
Я делаю так:
Код AS3:
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);
Но результирующая картинка с белым фоном

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Вместо 0xffffff00 впишите 0 или 0x00ffffff. Цвет задается в формате ARGB, а не RGBA.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 06.08.2012, 15:06
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 3  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
не помогло

Старый 06.08.2012, 15:19
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
BlendFactors установили?
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 06.08.2012, 16:04
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 5  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
ОО. я и не знал о таком, буду пробовать, спасибо за наводки

А это в каком месте кода устанавливать ? до рендера, ? До добавления детей в контейнер ?


Последний раз редактировалось djyamato; 06.08.2012 в 16:51.
Старый 07.08.2012, 03:37
flastar вне форума Посмотреть профиль Отправить личное сообщение для flastar Посетить домашнюю страницу flastar Найти все сообщения от flastar
  № 6  
Ответить с цитированием
flastar
 
Аватар для flastar

Регистрация: May 2006
Адрес: Гродно
Сообщений: 249
Отправить сообщение для flastar с помощью ICQ Отправить сообщение для flastar с помощью Skype™
Во всех последних билдах плеера 11.4 - они сломали. В предыдущих сохранение с альфой работает 100%.

В объектах BitmapData хранятся цвета, которые уже умножены на альфа-компонент. Можно настроить коэффициенты наложения, чтобы цвета, визуализированные в буфере, умножались на значение альфа, или можно выполнить эту операцию во фрагментном шейдере.
__________________
Realaxy Team My Blog, @UnknownFlasher, Facebook

Старый 17.08.2012, 23:25
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 7  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Цитата:
Сообщение от flastar Посмотреть сообщение
Можно настроить коэффициенты наложения, чтобы цвета, визуализированные в буфере, умножались на значение альфа
А как кодом это сделать? Я, признаться, вообще не понял
Может ссылку наводящую дадите или что-то вроде того

Старый 01.12.2012, 14:29
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 8  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Помогло выставление всех компонентов цвета в ноль:
Код AS3:
_context3D.clear(0.0, 0.0, 0.0, 0.0, 1.0, 0.0, Context3DClearMask.ALL);
Результат в 11.4.402.287:
Нажмите на изображение для увеличения
Название: Untitled-1.png
Просмотров: 201
Размер:	114.2 Кб
ID:	28761

Полный код примера:
Код AS3:
/*!*****************************************************************
 *																	
 *  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);
		}
	}
}

Старый 01.12.2012, 14:42
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 9  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Как к Away3D это применить не знаю

Старый 01.12.2012, 15:38
Sintesis вне форума Посмотреть профиль Отправить личное сообщение для Sintesis Найти все сообщения от Sintesis
  № 10  
Ответить с цитированием
Sintesis
 
Аватар для Sintesis

Регистрация: Jul 2008
Сообщений: 912
В авей есть же опаситимап, применяйте карту непрозрачности, а так-же там должны были уже сделать использование формата ATF, в нём прозрачность встроена и понятна видеокарте. Самому с блендингом много экспериментировать прийдётся, так как отрисовка по глубине может обратной получиться. В стейдж 3D нет прозрачности только смешивание, отвечает за него Context3DBlendFactor - определяет значения, которые должны использоваться для указания коэффициентов исходного и целевого наложения, как в DirectX

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

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

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


 


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


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