当前位置: 首页 > news >正文

脚本与渲染器 .

一直以来都想做一个脚本驱动的渲染器.就是说可以用脚本定制渲染器的行为,比如创建多少个渲染队列,如何渲染.多少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 < 0 || x > 600) dx =-dx;
if(y < 0 || y > 400) dy =-dy;

x2 += dx2;
y2 += dy2;
if(x2 < 0 || x2 > 600) dx2 =-dx2;

if(y2 < 0 || 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插件的形式,在发布程序的时候能保证最大的效率.非常的不错.

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

相关文章:

  • 230MHZ数传电台总体设计方案的研究
  • 业务流程执行语言 (BPEL)入门简介
  • 基于数传电台的多主通讯系统的实现
  • Oracle中Decode()函数使用技巧
  • PLC无线通讯方案详解GRM110
  • 围绕EMF探索(5)之深入Validation框架
  • 2018 年 5 月 1 日西安 1374 架无人机编队表演出现失误的原因是什么?
  • GNSS原理及技术(三)——差分定位技术
  • DBC文件
  • C语言切割多层字符串(strtok_r strtok使用方法)
  • 如何组织论文
  • QT使用MySQL报错:QSqlDatabase: QMYSQL driver not loaded
  • Qt 的Sqlite 在成功打开后报错
  • 项目开发中源代码树的组织
  • qt 在sqlite inster 数据时候报错
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 345-反转字符串中的元音字母
  • Apache Spark Streaming 使用实例
  • ES6 学习笔记(一)let,const和解构赋值
  • oschina
  • Python打包系统简单入门
  • SQLServer之创建显式事务
  • vue的全局变量和全局拦截请求器
  • Vue全家桶实现一个Web App
  • Vue--数据传输
  • 前端学习笔记之观察者模式
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 《码出高效》学习笔记与书中错误记录
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • postgresql行列转换函数
  • puppet连载22:define用法
  • 湖北分布式智能数据采集方法有哪些?
  • $jQuery 重写Alert样式方法
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (强烈推荐)移动端音视频从零到上手(上)
  • (学习日记)2024.01.19
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转载)利用webkit抓取动态网页和链接
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .Net Redis的秒杀Dome和异步执行
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .Net6使用WebSocket与前端进行通信
  • .netcore如何运行环境安装到Linux服务器
  • .NET成年了,然后呢?