现在的位置: 首页 > 综合 > 正文

脚本与渲染器 .

2013年04月28日 ⁄ 综合 ⁄ 共 1613字 ⁄ 字号 评论关闭

       一直以来都想做一个脚本驱动的渲染器.就是说可以用脚本定制渲染器的行为,比如创建多少个渲染队列,如何渲染.多少RenderTarget, 每个物体的材质也是一样. 要生成多少个Pass,每个Pass是立即渲染呢还是放到那个队列里 .
      其实我是个很懒的人 ,这个想法早在去年就有了.一直拖到现在,昨天晚上实在受不了自己的懒惰了.也受点老宋一些刺激,顺手就抓了个AngelScript.把它集成到 渲染器里了.一个简单的渲染脚本类似如下
int  queueNormal;
int  queueTranslucy;
int  queueGlow;
int  texScreen;
int  quadShader;
int  colorMorphShader;
int  rt;
int x , y ;
int x2 , y2;
int dx , dy;
int dx2 , dy2;
void StartRenderer()
{
      x = 0;
      y = 0;
      dx = 1;
      dy = 2;

      x2 = 10;
      y2 = 40;
      dx2 = 2;
      dy2 = 1;

      queueNormal    = createQueue("Normal");
      queueTranslucy = createQueue("Translucy");
      queueGlow      = createQueue("Glow");
      texScreen      = load2DTexture("default","videoTexture.mpeg");
      quadShader     = loadShader("Simple.shader");
      colorMorphShader     = loadShader("SimpleColorMorph.shader");
      rt             = createRenderTexture("RT",1024,1024,1);
}

void StopRenderer()
{
    clearRenderContex();
}

 

void Render(float passedTime)
{
      x += dx;
      y += dy;
      if(x 600) dx =-dx;
      if(y 400) dy =-dy;

      x2 += dx2;
      y2 += dy2;
      if(x2 600) dx2 =-dx2;

      if(y2 400) dy2 =-dy2;
      renderQueue(queueNormal);

      pushRenderTexture(rt,0);
      clearScene(1.0f,0.0f,0.0f,1.0f,1,0);
      renderQueue(queueNormal);
      popRenderTexture();

      enter2DMode();
 
      pushShader(quadShader); 
      draw2DTextureRect(rt,x,y,500,400,1.0,1.0,1.0,1.0);
      popShader();

      pushShader(colorMorphShader);
      draw2DTextureRect(texScreen,x2,y2,400,300,1.0,1.0,1.0,1.0);
      popShader();
      leave2DMode();
}

AngelScript是C语法的. 可以方便的把脚本稍加转化编译进程序里,或者做成dll插件的形式,在发布程序的时候能保证最大的效率.非常的不错.

以上这个脚本能在正常绘制一个普通渲染队列以外,额外的绘制两个矩形.  脚本能控制渲染器多少的行为完全看你给脚本暴露了多少的接口.

抱歉!评论已关闭.