【问题标题】:how to swap texture color effectively?如何有效地交换纹理颜色?
【发布时间】:2012-12-23 12:51:16
【问题描述】:

我有一个汽车的 ipad opengl-es 1.1 应用程序,我希望用户能够更改颜色。 3d 网格是 uv 纹理的,它以基本的灰色开始(带有阴影和高光)。我想向用户展示十几个颜色样本,以给汽车上色。我只是不确定此时我将如何有效/高效地交换颜色。

我的意思是,当前纹理是 1024 x 1024。我是否为我的应用程序中可用的每种颜色都包含一个 1024 x 1024 纹理?我在想可能有一种更简单的方法,如果我可以在原始 1024 x 1024 纹理上为每种颜色定义一个小的 20 x 20 像素表示。然后不知何故,当用户选择颜色样本时,我可以去抓取颜色并将其“应用”到汽车上。这有意义吗?

我已将所有网格照明/颜色烘焙到我的纹理中,因此应用程序本身不使用照明,因此仅尝试更改颜色对我的纹理没有影响。如果我确实使用照明,我可以将灰色纹理与材质颜色变化混合,但我真的不喜欢这个解决方案的外观。我正在寻找纹理特定的解决方案(我认为)

任何想法或建议都会很棒。谢谢!

【问题讨论】:

  • 你不能在对象绘制之前调用glColor4f(你想要的颜色)吗?那不应该将您的纹理与所需的颜色混合吗?
  • @Valerie 你说你已经将光照预烘焙到纹理中——你有单独的漫反射和镜面反射纹理吗?如果没有,如果它们已经组合在一起,“现实地”改变汽车的颜色似乎相当困难。

标签: ipad opengl-es textures


【解决方案1】:

我怀疑除了在 opengl 1.1 中制作更多纹理之外,您还能做任何事情。但我认为无论如何这将是你最好的选择。如果您要更改为 opengl 2.0 并使用着色器来更改颜色,我认为性能不会太好,因为必须进行大量检查以查看颜色的范围,并将其更改为适当的颜色.无论如何,这看起来并不顺利。

我会推荐多纹理路线。无论如何,这种大小的纹理只有大约 4mb,所以空间权衡还不错。

【讨论】:

    【解决方案2】:

    你可以试试这样的:

    离线:

    1. 同时创建黑色和白色版本的汽车纹理
    2. 从白色中减去黑色以创建新的“delta”纹理。

    运行时:

    1. 当玩家选择颜色时,创建一个新纹理(在软件中),将 delta 纹理乘以颜色,并添加到黑色汽车纹理。

    您只需要在颜色发生变化时生成该纹理。对于您想要的任何颜色,这应该是一个非常快速的操作,并且存储成本最低(本质上,内存中有两个纹理,一个用于 GL)。

    【讨论】:

      【解决方案3】:

      对于我实际需要设置的汽车 shouldUseLighting = YES。通过此设置,我可以使用多纹理混合以及颜色选择器弹出窗口来允许用户选择各种颜色。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-13
        • 2011-12-26
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多