blog

OpenGLテクスチャ基本機能

カラーバッファのx,yは、微粒子データの読み込みを開始する場所を指定します; バッファ内のデータは、バッファが テクスチャオブジェクトを割り当てる関数を使用します。テクスチャオブジェクトの数とポインタ...

Jul 9, 2020 · 5 min. read
シェア

#### イメージ保存領域

イメージの保存領域 = イメージの高さ * イメージの幅 * 1ピクセルあたりのバイト数 #### テクスチャファイル

  • OpenGL: TGA
  • OpenGL ES、iOS: PNG ## 機能認識 #### ピクセルの保存方法の変更
glPixelStorei(<#GLenum pname#>, <#GLint param#>)

#### リカバリーピクセルの保存方法

glPixelStoref(<#GLenum pname#>, <#GLfloat param#>)

glPixelStorei(GL_UNPACK_ALIGNMENT,1)例: , GL_UNPACK_ALIGNMENTは、メモリ上の各ピクセル行の開始のアライメント要求を指し、1(バイトアライメント)、2(偶数バイトの行のアライメント)、4(ワードWordのアライメント)、8(ダブルバイト境界から始まる行)の設定が可能 ####は、ピクセルマップとしてカラーバッファの内容から直接読み込みます。

glReadPixels(<#GLint x#>, <#GLint y#>, <#GLsizei width#>, <#GLsizei height#>, <#GLenum format#>, <#GLenum type#>, <#GLvoid *pixels#>)
x 矩形の左下隅のウィンドウ座標
y 矩形の右下隅のウィンドウ座標
width 矩形の幅(ピクセル単位
height 矩形の高さ(ピクセル単位
フォーマット OpenGLピクセル・フォーマットGLenum列挙値
type ピクセルデータのデータ型
pixels グラフィックデータへのポインタ

#### テクスチャ読み込み機能

glTexImage1D(<#GLenum target#>, <#GLint level#>, <#GLint internalformat#>, <#GLsizei width#>, <#GLint border#>, <#GLenum format#>, <#GLenum type#>, <#const GLvoid *pixels#>)
glTexImage2D(<#GLenum target#>, <#GLint target#>, <#GLint internalformat#>, <#GLsizei width#>, <#GLsizei height#>, <#GLint border#>, <#GLenum format#>, <#GLenum type#>, <#const GLvoid *pixels#>)
target 質感の次元
target ロードされたMIPマップのレベルを指定します(通常は0に設定)。
インターナルフォーマット 各テクスチャセルに格納されている色成分の数
width
height
depth
テクスチャの幅、高さ、深さ
target テクスチャマップの境界幅を指定できるようにします。
残りのパラメータ 上記と同じ

#### テクスチャの更新

glTexSubImage1D(<#GLenum target#>, <#GLint level#>, <#GLint xoffset#>, <#GLsizei width#>, <#GLenum format#>, <#GLenum type#>, <#const GLvoid *pixels#>)
glTexSubImage2D(<#GLenum target#>, <#GLint level#>, <#GLint xoffset#>, <#GLint yoffset#>, <#GLsizei width#>, <#GLsizei height#>, <#GLenum format#>, <#GLenum type#>, <#const GLvoid *pixels#>)

#### テクスチャの交換

glTexSubImage2D(<#GLenum target#>, <#GLint level#>, <#GLint xoffset#>, <#GLint yoffset#>, <#GLsizei width#>, <#GLsizei height#>, <#GLenum format#>, <#GLenum type#>, <#const GLvoid *pixels#>)
glTexSubImage1D(<#GLenum target#>, <#GLint level#>, <#GLint xoffset#>, <#GLint yoffset#>, <#GLsizei width#>, <#GLsizei height#>, <#GLenum format#>, <#GLenum type#>, <#const GLvoid *pixels#>)

#### を使用して新しいテクスチャを形成するデータをロードするために、カラーバッファを使用します。

glCopyTexImage1D(<#GLenum target#>, <#GLint level#>, <#GLenum internalFormat#>, <#GLint x#>, <#GLint y#>, <#GLsizei width#>, <#GLint border#>)
glCopyTexImage2D(<#GLenum target#>, <#GLint level#>, <#GLenum internalFormat#>, <#GLint x#>, <#GLint y#>, <#GLsizei width#>, <#GLsizei height#>, <#GLint border#>)
  • カラーバッファのx,yは、粒子データの読み込みを開始する場所を指定します。バッファ内のデータは、glReadBufferを介してバッファによって設定されます。#### テクスチャオブジェクト
  • テクスチャオブジェクトを割り当てるには、この関数を使用します。テクスチャオブジェクトの数とポインタを指定します。
glGenTextures(<#GLsizei n#>, <#GLuint *textures#>)
  • バウンドテクスチャの状態
glBindTexture(<#GLenum target#>, <#GLuint texture#>)
  • バインドされたテクスチャオブジェクトの削除
glDeleteTextures(<#GLsizei n#>, <#const GLuint *textures#>)
  • テクスチャオブジェクトの有効性をテストします。
glIsTexture(<#GLuint texture#>)

#### テクスチャのパラメータを設定します。

 glTexParameterf(<#GLenum target#>, <#GLenum pname#>, <#GLfloat param#>)
 glTexParameteri(<#GLenum target#>, <#GLenum pname#>, <#GLint param#>)
 glTexParameterfv(<#GLenum target#>, <#GLenum pname#>, <#const GLfloat *params#>)
 glTexParameteriv(<#GLenum target#>, <#GLenum pname#>, <#const GLint *params#>)
target テクスチャモードの指定
pname 設定するテクスチャパラメータを指定します。
パラメータ 指定されたテクスチャパラメータの値を設定します。

#### フィルタリングの設定

  • 近傍フィルタリング
  • リニアフィルター
    glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
  • 折り返し方法の設定
glTexParameteri(<#GLenum target#>, <#GLenum pname#>, <#GLint param#>)

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)

target GL_TEXTURE_2D

GL_TEXTURE_1D

GL_TEXTURE_3D
GL_REPEAT
GL_CLAMP
GL_CLAMP_TO_EDGE
GL_CLAMP_TO_BORDER
GL_REPEAT:テクスチャ座標が1.0を超える方向に繰り返します。

GL_CLAMP: 必要なテクスチャセルは、テクスチャ境界またはTEXTURE_BORDER_COLORから取得されます。

GL_CLAMP_TO_EDGE:サラウンドモードでは、範囲外のテクスチャ座標は、法的なテクスチャセルの最後の行または列に沿ってサンプリングされます。

GL_CLAMP_TO_BORDER: テクスチャ座標が 0.0 から 1.0 の範囲外の場合、境界テクスチャ セルのみが使用されます。境界テクスチャセルは、ベースイメージの周りの余分な行や列として使用され、ベーステクスチャと一緒にロードされます。

上記4種類のラップアラウンドの図解

Read next

Javaで圧縮/解凍された文字列

Javaには、Compressionライブラリを使用した通常の圧縮のためのDeflaterクラスが用意されています。また、Deflaterクラスを使用してデータストリームを圧縮し、圧縮されたデータを別の出力ストリームに書き出すことで、データストリームをフィルタリングすることもできます。これと同等のInflaterと、内包を扱うクラスがあります。

Jul 9, 2020 · 2 min read