FLSL2.0学习笔记(三)

五、FLSL2.0的命名空间
        FLSL2.0文件的开头都使用了命名空间。那么不禁要问:FLSL2.0的命名空间在哪儿?里面包括了些什么基本数据类型和函数?命名空间的内容可以修改和增加吗?FLSL2.0文件一定要有命名空间吗?
       下面就逐个回答这些疑问.
        1、在前面我章节中建议大家FLSL2.0文件的调试和编译最好在免费的Flare3D的IDE中进行。你下载安装了这个软件,命名空间就在这个软件的安装目录下的libs文件夹中的三个FLSL文件里定义。如图:

        2、FLSL2.0命名空间所用基本数据类型和函数都在 01 flare3d.flsl、02 flare3d.flsl、03 flare3d.flsl 这三个文件中。有空多看看这三个文件,对你会有很大的帮助。
        3、这三个文件是可以修改和增加内容的,你可以在里面定义自己函数。
        4、在编辑FLSL2.0文件时所用了命名空间,命名空间里有的数据类型和函数可以直接使用。当然也可以不使用命名空间,那样编辑FLSL2.0的文件就要复杂些。

使用了命名空间:

use namespace flare;
use namespace flare.transforms;
use namespace flare.filters;

sampler2D texture;
param float alpha = 1;

technique template
{
	output vertex = transform();
	output fragment = sampler2D( texture, iUV0 ) * alpha;
}


没有使用命名空间:

sampler2D texture;
param float alpha = 1;

float4 gxtransform()
{
    param WORLD_VIEW_PROJ worldViewProj;
    input POSITION position;
    return position.xyzw * worldViewProj;
}

float4 textureMap( sampler2D texture )
{
    input UV0 uv;
    interpolated float2 iUV = uv;
    return sampler2D( texture, iUV ) 
}

technique main()
{
    output vertex = gxtransform();
    output fragment = textureMap( texture ) * alpha;
}

这2个FLSL文件是完全一样的,可见没有使用命名空间会复杂很多。

六、FLSL2.0的FLSLMaterial和FLSLFilter

         这里谈谈FLSLMaterial和FLSLFilter的不同,FLSLMaterial是一个完整的shader,它必须包括顶点着色器和片元着色器;FLSLFilter只是整个shader的一个部分,所以它可以没有顶点着色器。如:

use namespace flare;
use namespace flare.transforms;
use namespace flare.filters;
  
sampler2D texture;
param TIME time;
  
technique template
{
        output fragment = textureMap( texture, float2(1), time.xy );
}

另外,在AS方面的应用就完全不一样了。

package
{
	import flare.basic.*;
	import flare.core.*;
	import flare.flsl.*;
	import flare.materials.*;
	import flare.materials.filters.*;
	import flare.primitives.*;
	import flash.display.*;
	
	public class TimeFLSLFilter extends Sprite
	{
		[Embed(source = "timetexture.flsl.compiled", mimeType = "application/octet-stream")] 
		private var flslFilterAsset:Class;
		
		[Embed(source = "../bin/clay4.png")] 
		private var textureAsset:Class;
		
		private var _scene:Scene3D;
		private var _cube:Cube;
		private var _flslFilter:FLSLFilter;
		private var _shader:Shader3D;
		
		public function TimeFLSLFilter():void
		{
			_scene = new Viewer3D( this );
			_scene.camera.setPosition( 10, 20, -30 );
			_scene.camera.lookAt( 0, 0, 0 );
			
			_flslFilter = new FLSLFilter( new flslFilterAsset, BlendMode.NORMAL );
			_flslFilter.params.texture.value = new Texture3D( new textureAsset );
			_shader = new Shader3D( "", [ _flslFilter, new ColorFilter( 0xff0000, 0.5,BlendMode.ADD ) ] );
			_cube = new Cube( "cube", 10, 10, 10, 1, _shader );
			
			_scene.addChild( _cube );
		}
	}
}



 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值