JavaFX具有 abstract class Material 来表示3D曲面的材质。当前的JDK仅提供 PhongMaterial 实现。我一直在通过扩展Material来实现自己的材料(例如Lambert或Blinn等),类似于PhongMaterial的实现方式。

我遇到了2个问题:

  • 找不到PhongMaterial文档中指定的行为(颜色计算)-不在类本身中,也不在我查看过的内部类中。它在JDK中的某个地方,但是没有那么暴露。 PhongMaterial类仅包含属性,而不包含行为,而我一开始就觉得很奇怪。
  • PhongMaterial似乎与内部类紧密结合:
  • com.sun.javafx.sg.prism.NGPhongMaterial,根据一些文档,它是由图形工具包/管道实现创建的对等节点。此类未指定任何行为。
  • com.sun.prism.PhongMaterial,表示用于保留模式渲染的phong材质。
  • com.sun.prism.TextureMap是一个包装类,用于保存PhongMaterial的地图相关信息。

  • 这些都没有指定材料的行为。
    实施我自己的材料的步骤是什么?我需要写什么课?例如,我需要一个新的TextureMap类,以某种方式通知Prism吗?

    最佳答案

    据我所知,Material类(当前)不是为子类设计的。这可能是因为尚未就固定的公共API达成共识。
    Material包含两个抽象方法。在JavaFX 8中,这些是

    public abstract void impl_updatePG();
    


    public abstract NGPhongMaterial impl_getNGMaterial();
    

    这些被标记为@Deprecated@treatAsPrivate implementation detail

    JavaFX 9中,名称更改,可见性更改为package-private:
    abstract void updatePG();
    


    abstract NGPhongMaterial getNGMaterial();
    

    因此,看起来这里的意图不是允许子类化,而是要有一种设计,一旦决定了API,该设计将允许将来的(> 9)版本允许子类化。再次,在这里我在很大程度上阅读这句话:与JavaFX团队关系更近的用户可能会获得更完整的信息。 FWIW,当前版本的源代码包含以下注释:

    材料不是油漆
    PhongMaterial可能是第一个也是唯一的材料
    在FX8中使用(有关详细信息,请参见3D概念性实现)
    凹凸贴图:
    法线贴图和高度图-如果给定一个
    高度图
    位移图?不在FX8中-可以进行Parallex校正
    映射以提高性能成本来提高质量
    支持自动生成
    贴图
    没有计划支持多纹理

    09-26 03:13