【发布时间】:2012-01-31 04:23:00
【问题描述】:
我无法确定使用哪个类结构来存储 RGB/RGBA 颜色信息。
我正在制作一个非常简单的 3D 游戏引擎来获得乐趣并磨练我的 OO 编程能力。
我希望我的引擎同时支持 RGB 和 RGBA 颜色。最重要的是,我希望它可以将 RGB 和 RGBA 值指定为固定为 [0, 1] 的浮点数或无符号字符。我认为出于存储目的,最好使用无符号字符,因为它们使用的内存是浮点数的四分之一。
所以现在,我设计了以下类用于此目的:Color、Color3、Color3f、Color3c、Color4、Color4f 和 Color4c。 Color 是 Color3 和 Color4 的超类,而 Color3 是 Color3f 和 Color3c 的超类,Color4 是 Color4f 和 Color4c 的超类。
这似乎是一种比实际需要复杂得多的方法。我也考虑过使用泛型,所以用 Color3
理想情况下,我希望能够编写如下代码:
Color3 red1(255, 0, 0);
Color3 red2(1.0f, 0.0f, 0.0f);
Color* someColor = new Color3(1.0f, 0.0f, 0.5f);
Color4 anotherColor = *someColor;
Color4 thisColor = anotherColor.toChar();
//thisColor.r = 255, thisColor.g = 0, thisColor.b = 127
thisColor = thisColor.toFloat();
//thisColor.r = 1.0f, thisColor.g = 0.0f, thisColor.b = 0.5f
现在这不能在 C++ 中实现(至少据我所知),但是我如何在不创建 7 个单独的类的情况下集结相同的功能呢?并且不存储浪费的信息?例如,在内存中绘制 1024x1024 的图像。那将是一个包含超过一百万种颜色的数组,那么如何创建一个灵活且可重用的颜色类层次结构?即,通过无符号字符将 RGB 和 RGBA 值存储在不同的结构中,但提供检索浮点值的功能?
对不起,如果这不够具体或什么,这是我的第一个问题!让我知道还有什么有用的。如果你们愿意,我可以发布迄今为止我尝试过的代码,但希望你们理解我想要完成的工作。
【问题讨论】:
-
过度工程太多了,嗯? :) 请注意,您作为示例编写的内容完全可以在 C++ 中完成,并带有一些 pimpl 习惯用法和接口。并不是说那样做是个好主意……
标签: c++ class colors hierarchy