前述のように、その質問は広すぎます。しかし、あなたは立方体を 1 つ描くことができたと言ったので、カメラとウィンドウをセットアップできると推測できます。これで、8 つの立方体をレンダリングする方法がわかりました。これを行うには多くの方法がありますが、2 つの非常に異なる方法について説明します。
クラシック:
立方体の中心とサイズの 2 つのパラメーターを取る関数を作成します。これら 2 つを使用すると、現在行っているのと同じ方法でキューブを構築できますが、固定値の代わりにこれらの変数を使用します。たとえば、正面は次のようになります。
glBegin(GL_TRIANGLE_STRIP);
glVertex3f(center.x-size/2, center.y-size/2, center.z+size/2);
glVertex3f(center.x+size/2, center.y-size/2, center.z+size/2);
glVertex3f(center.x-size/2, center.y+size/2, center.z+size/2);
glVertex3f(center.x+size/2, center.y+size/2, center.z+size/2);
glEnd();
これは、変数から作成する方法を紹介するためのものであり、現在行っているのと同じ方法で実行できます。
さて、あなたはシェーダーを使いたいと言いました。シェーダーのトピックは、openGL 自体と同様に非常に幅広いものですが、アイデアをお伝えすることができます。openGL 3.2 では、ジオメトリと呼ばれる特別なシェーダーが追加されました。それらの目的は、ジオメトリ全体を操作することです。逆に、頂点シェーダーは一度に 1 つの頂点だけで機能し、フラグメント シェーダーは一度に 1 つのフラグメントだけで機能します。ジオメトリ シェーダーは、一度に 1 つのジオメトリ ピースで機能します。三角形をレンダリングしている場合は、シェーダーを通過するだけの単一の三角形に関するすべての情報を取得します。これは深刻なことではありませんが、これらのシェーダーはこれらのジオメトリを変更するだけでなく、新しいジオメトリを作成することもできます! だから私はポイントをレンダリングするシェーダープログラムの1つでやっていますが、ジオメトリシェーダーを通過すると、これらのポイントは円に変換されます。同様に、ポイントだけをレンダリングできます。ただし、ジオメトリ シェーダー内ではキューブ全体をレンダリングできます。ポイント位置はこれらの立方体の中心として機能し、立方体のサイズを均一に渡す必要があります。立方体のサイズが異なる場合は、属性から変数にサイズを渡す頂点シェーダーも作成する必要があります。これは、ジオメトリ シェーダーで読み取ることができます。
色の問題に関しては、フラグメント シェーダーを実装しない場合は、glColor3f
キューブをレンダリングする前に呼び出すだけで済みます。赤、緑、青の値の 3 つのパラメーターを取ります。これらの値の範囲は 0 から 255 ではなく、0 から 1 であることに注意してください。白い背景を使用するとキューブがレンダリングされないことに混乱する可能性があり、色を 200,10,10 に設定すると、赤い立方体が見えますが、何も見えません。これは、実際にはホワイト キューブをレンダリングするためです。このようなエラーを回避するには、 background を gray whit などに設定することをお勧めしglClearColor
ます。