RGB/RGBA色情報の格納に使用するクラス構造を決定する際に問題があります。色のクラス階層
私は非常に楽しいと私のオブジェクト指向プログラミング能力を磨くための単純な3Dゲームエンジンを作っています。
私のエンジンは、RGBとRGBAの両方の色をサポートしたいと思います。その上に、RGBとRGBAの値を[0、1]にクランプされた浮動小数点数または符号なしの文字として指定できるようにしたいと思います。私は記憶目的のために、浮動小数点数の4分の1のメモリを使用するので、符号なしの文字を使用するほうがよいと考えました。
ここでは、Color、Color3、Color3f、Color3c、Color4、Color4f、Color4cの各クラスを使用するために、次のクラスを考案しました。 ColorはColor3とColor4のスーパークラスですが、Color3はColor3fとColor3cのスーパークラスです.Color4はColor4fとColor4cです。
これは、必要以上に複雑なアプローチのようです。私はジェネリックの使用についてもしばらく考えていたので、Color3fとColor3cの代わりに、Color3 <float>と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イメージを描画します。これは100万を超える配列を持つ配列なので、どのようにして柔軟で再利用可能なColorクラス階層を作ることができますか?すなわち、RGBおよびRGBA値を符号なしの文字を介して異なる構造に格納するが、浮動小数点値を取り出す機能を提供するか?
申し訳ありませんが、これが十分に具体的でない場合や、これが私の最初の質問です。他に何が助けになるのか教えてください。あなたが好きならこれまでに試したことのコードを投稿できますが、うまくいけば私が達成しようとしていることを理解できます。
OOver-engineering多く、ええ? :)ちょうど注記のために、あなたが例として書いたことは、C++では完全に可能であり、少しのpimplイディオムとインターフェースがあります。そうでないといいとは思いません。 – Xeo