访问XML3D中的渲染管道:对象突出显示

时间:2015-05-26 12:42:17

标签: javascript xml3d

我想让对象在选中时突出显示为了做到这一点我需要一个自定义着色器来缩放渲染模型大纲 - 这部分我熟悉的任务 - XML3D提供了一种实现的方法自定义着色器。

但缺少的部分是有权访问渲染管道: 如果不复制模型并将其绘制在旧模型上,就不可能做出很好的突出显示 或者在两次传递中渲染场景(后期处理)。 以通常的方式创建另一个模型副本(将新元素附加到dom树)不会解决问题,因为我还需要控制场景混合。

如何使用xml3d完成它? 如果不深入图书馆是否可能?

2 个答案:

答案 0 :(得分:1)

一般来说,有四种方法可以实现突出显示:

  1. 你可以来回交换材料(效率不高)
  2. 您可以将material overrides用于突出显示的对象,这将调整当前着色的一个或多个参数(例如,自发光颜色)
  3. 您可以将自定义着色器与任意统一属性结合使用,该属性指示应突出显示该对象。在着色器中,您可以根据属性调整颜色和渲染。例如。你可以做一个边框高亮或线框渲染。 Here is an example用于在统一selected具有特定值时为对象着色的着色器。 例如:
    <mesh id="foo"> <data src="mesh-data.json"></data> <float name="selected">0</float> </mesh>
    要突出显示此对象:$("#foo float[name=selected]").text("1");
  4. 您可以adapt the rendering pipeline两次渲染突出显示的对象并以各种方式混合
  5. 如果对你的用例足够,我建议采用方法3,因为它不是非常具有侵入性。用于创建自定义渲染管道的界面还不是很稳定。

答案 1 :(得分:1)

正如ksons所说,渲染管道接口现在正在经历一些重大变化,XML3D 4.8是以当前形式支持它的最后一个版本。版本5.0可能会以(希望)改进的形式重新引入它。

我们在其中一个内部项目中使用自定义渲染管道将线框覆盖绘制到选定的模型上,我已经发布了一个simplified version of this pipeline作为Gist供您查看。基本上,它使用标准的内部渲染过程渲染场景,然后进行第二次传递,以粗线框模式绘制突出显示的对象,而不进行深度测试。

正如我所说,这在v4.8中有效,如果您在v4.9中需要此功能,那么请open an issue我将看到重新启用它作为次要版本。