ビリトンの魔法のグラフィックス技術者の教育マニュアル(第5講座)| Yiziyiziは、OpenGLのチュートリアルをノック

この記事では、内容を継続します

4.4フィルタパラメータ

ちょうどテクセルの対応する中心位置を与えるために、テクセルの配列をマッピングするテクスチャ座標を使用するときにまれにしか発生しません。例えば、上記テクセル(128256)に対応する(0.5、1.0)の場合は比較的小さいです。テクスチャマッピングは、テクセルの位置(127.34,255.14)に配位した場合はどのようにそれを行うには?

フィルタパラメータと呼ばれる別のパラメータを使用する必要があります。また、このパラメーターのセットのためのコードを見て:

glTexParameteri(GL_TEXTURE_2D、GL_TEXTURE_MAG_FILTER、フィルタ)。

glTexParameteri(GL_TEXTURE_2D、GL_TEXTURE_MIN_FILTER、フィルタ)。

ここで、フィルタは、次の2つに分かれています。

GL_NEAREST:テクセル点を得るために最良の近似を用いて、すなわち、最近傍フィルタ(最近傍フィルタリング)。このように簡単に明らかに画素ブロックを感じ、エイリアシングエラーにつながります。

GL_LINEAR:線形フィルタリング法(線形フィルタリング)を使用して、それは最終的なテクセル値を決定するテクセル位置(127.34,255.14)近くのテクセルの組の加重平均を使用します。例えば、((127255)、(128255)、(127254)及び(128254))これら四つのテクセル値の加重平均。重みが目標点までの距離によって距離を反映し、より近い距離、より大きな重み係数、最終的なテクセル値に、すなわち、大きな影響。

次のように図の違いは以下のとおりです。
ビリトンの魔法のグラフィックス技術者の教育マニュアル(第5講座)| Yiziyiziは、OpenGLのチュートリアルをノック
4.5テクスチャ環境(テクスチャパターン)

セットアップコードを見てください:

glTexEnvf(GL_TEXTURE_ENV、GL_TEXTURE_ENV_MODE、モード)。

4.6負荷のテクスチャ

テクスチャは、次の設定をロードします。

ビリトンの魔法のグラフィックス技術者の教育マニュアル(第5講座)| Yiziyiziは、OpenGLのチュートリアルをノック
4.7使用テクスチャ

まず、2Dテクスチャを有効にグラフィックスを描画するために、glEnableです(GL_TEXTURE_2D)を呼び出し、指定されたSTは、各頂点の座標。ラストコールまたはglDisable(GL_TEXTURE_2D)。

这是个最简单的例子,图形使用OpenGL绘制的。

ビリトンの魔法のグラフィックス技術者の教育マニュアル(第5講座)| Yiziyiziは、OpenGLのチュートリアルをノック
4.8 纹理对象及绑定

OpenGL中glTexImage2D这个函数每次调用就会涉及到从CPU传递纹素数组给GPU,效率会非常低下。如果你只有一处使用单张纹理,那是没问题的,如果你有多处并且使用多张纹理,可想而知,卡不死你。这个时候你需要绑定纹理对象(Texture Objects)。纹理对象是将你的纹理留存在显卡中,并且反复利用,这比反复加载快多了。

创建一个纹理对象,首先先要生成纹理名称,然后再将纹理对象绑定到纹理数据上。生成纹理名称我们用glGenTextures( 1, &tex0 ),将纹理对象绑定到纹理数据上,我们用glBindTexture( ) 。每次执行glBindTexture时,你就创建了一个纹理对象。

下面例子是多张纹理时如何处理的代码:

第一次先创建两个纹理名称:tex0,tex1.并且将tex0的纹理作为当前纹理进行绑定到纹理对象,然后设置一系列参数。

ビリトンの魔法のグラフィックス技術者の教育マニュアル(第5講座)| Yiziyiziは、OpenGLのチュートリアルをノック
然后进行tex1的纹理对象创建并绑定,并且设置参数。
ビリトンの魔法のグラフィックス技術者の教育マニュアル(第5講座)| Yiziyiziは、OpenGLのチュートリアルをノック
之后在使用时,也就是示例代码的Display()函数中这样调用:
ビリトンの魔法のグラフィックス技術者の教育マニュアル(第5講座)| Yiziyiziは、OpenGLのチュートリアルをノック
最后也可以调用glDeleteTextures()进行释放资源,毕竟纹理资源是有限的。

以上就是纹理对象创建并绑定,到使用的过程。使用纹理对象通常是支持纹理的最快的方式,会出现高性能的结果,这是因为它绑定(重新使用)一个现有纹理对象的速度,总是比使用函数glTexImage2D()来重新加载一个纹理的速度更快。

记得之前画太阳系的project时,有朋友问现在正在克莱姆森读博士的Doc. Lee, 说为啥他的太阳系卡成狗,李博士立马知道问题出在每次重新加载纹理上。请记得,实际工程中,多纹理时千万不要每次重新加载,否则不熟悉图形学的人很难找出卡顿,闪屏等原因,别坑队友啊。

それの質感の私達の特異的結合の解釈の以下の原則。興味を持って見て。OpenGLのレンダリングコンテキストに精通している人々は、一般的に、つまり、コンテキストこの概念のことを聞きました。コンテキストをレンダリングすると、すべての表示テクスチャ、色、光、動き、等の特徴点情報に送られようとして含まれています。OpenGLの結合が実際のように理解することができる「添付(アタッチ)」または「ドッキング」、コンテキストは、OpenGLにバインドするオブジェクト。あなたは、コンテキスト情報にいくつかの機能に割り当てることができます。コンテンツのこの作品のコンテキストが、またはそのようにOpenGL ES、マルチスレッドレンダリングに使用した後など、より研究値を、持っている、我々はそうでコンテキストを共有し、する必要があります。私の以前のプロジェクト、この時点でスレッドはありませんが、1ではない、iOSのプライマル相互作用に行った後、ユニティレンダリングを使用しますが、メインスレッドの一つが統一文脈できないため、共有のテクスチャ操作、ピット私は〜長い時間のために踏まれ、最終的にはUUG総会でのテクニカルディレクターU3D中国地域、この上で、私は言った、私はあきらめることを選択することができます

示されているように:
ビリトンの魔法のグラフィックス技術者の教育マニュアル(第5講座)| Yiziyiziは、OpenGLのチュートリアルをノック
また、どのようにテクスチャシェーダ、我々はシェーダに言います。

この講義まずそう書き、ファンは最初の講義の内容ではなく、任意のソースの最後の発言が多すぎるプライベートの手紙を持っています。テクスチャは、サンプルコードと参照用ソーラーシステムのソースコードを持っているgithubの、と一緒に、話をします。次回は、私たちは照明をOPENGLます。

おすすめ

転載: blog.51cto.com/14528075/2437652