2016-04-09 11 views
2

OpenGLは、私が知る限り、そのAPIを通じて設定できるグローバル変数で構成され、その動作を変更/定義するため、通常「状態マシン」と呼ばれます。例えば、現在の色または変換マトリックスを設定することが可能である。状態変数の多くは連続値の範囲を持ちます。OpenGLは「状態マシン」ですか?

しかし、私が理解する限り、コンピュータ科学における「状態機械」または「有限状態機械」は、状態(ノードとして)および遷移(有向エッジとして)の有向グラフとして定義されます。

一般的なコンピュータサイエンスでは、「ステートマシン」という用語は、「ステートマシン」と同じです(Open Machineは「defined」)。

答えて

6

多くの状態変数には連続値の範囲があります。

GLfloatは、通常のfloatのように、ビット単位で固定サイズです。 32ビットIEEE-754は32ビットの記憶域しか持たない。したがって、2^32の別個の値しか取ることができません(これらの値のかなりの数は同一または比類のないものとみなされます)。 2^32が大きいのですが、依然として非常に有限です。

OpenGLコンテキストには、明確に指定された状態値の有限集合があります。各状態値は、離散値の有限集合をとることができる。 OpenGLコンテキストを有限状態マシンとしてモデル化することができます。状態の値を変更するだけで状態遷移が行われます(OpenGLオブジェクト、特にプログラムオブジェクトはこのビューをいくらか複雑にします)。


すべてのことが言われているが、の主なポイント声明本当に実際の有限状態機械で行うには何もを持っていない「OpenGLは、ステートマシンがあります」。文は通常、リマインダとして言われていること:

  1. のOpenGL はあなたが最後にそれを設定したもの忘れてしまった場合でも、コンテキストに最後に設定した状態を覚えています。

  2. OpenGLは、の最後のセットの状態を、最後に設定したものを忘れたとしても記憶します。

OpenGLは状態を記憶しているため、ステートマシンです。明示的にトランジションを実行しない限り、トランジションは現在の状態にとどまります。

基本的には、現在の状態を追跡したり、レンダリングの開始時にすべての状態を設定するそれがあなたが思っているものであることを確認してください。

+1

回答ありがとうございました。私はフロート変数は実際には高レベルの概念を議論するときに連続として考えることができる連続的な範囲をモデリングしていると思いますが、とにかく2番目の部分は私の質問に完全に答えます。 –

関連する問題