gpt4 book ai didi

java - 我们可以在 JavaFX 中实现我们自己的 Material 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:39:53 24 4
gpt4 key购买 nike

JavaFX 有 abstract class Material用于表示 3D 表面的 Material 。当前的 JDK 只给出一个 PhongMaterial执行。我正在研究通过扩展 Material 来添加我自己的 Material (如 Lambert 或 Blinn 等),类似于 PhongMaterial 的实现方式。

我遇到了2个问题:

  1. PhongMaterial 文档中指定的行为(颜色计算)无处可寻 - 不在类本身中,也不在我看过的内部类中。它位于 JDK 中的某处,但没有那么暴露。 PhongMaterial 类只包含属性而不包含行为,我一开始觉得这很奇怪。

  2. PhongMaterial 似乎与内部类深度耦合:

    • com.sun.javafx.sg.prism.NGPhongMaterial,根据一些文档,它是由图形工具包/管道实现创建的对等节点。此类不指定任何行为。
    • com.sun.prism.PhongMaterial代表用于保留模式渲染的 phong Material
    • com.sun.prism.TextureMap一个包装类,用于保存 PhongMaterial 的贴图相关信息

    这些都没有指定 Material 的行为。

实现我自己的 Material 的步骤是什么?我需要写什么类?例如,我是否需要一个新的 TextureMap 类,我会以某种方式通知 Prism?

最佳答案

据我所知,Material 类(目前)不是为子类化而设计的。这可能是因为尚未就固定的公共(public) 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();

所以看起来这里的意图不是允许子类化,而是要有一个设计,允许 future 的 (>9) 版本在确定 API 后允许子类化。同样,我在很大程度上理解了字里行间:与 JavaFX 团队关系更密切的用户可能拥有更完整的信息。 FWIW,当前版本的源代码包含以下注释:

Material is not Paint
PhongMaterial maybe the first and only material in FX8 (see 3D conceptual implementation for details)
Bump map: Normal Map and Height Map -- We may generate a Normal Map when given a Height Map
Displacement map? Not in FX8 -- May do Parallex correction mapping to improve quality at performance cost
Support auto generated Mipmap
No plan to support Multi-texture

关于java - 我们可以在 JavaFX 中实现我们自己的 Material 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43622856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com