4x4テクスチャから2x2テクスチャテクスチャにダウンサンプリングしたいと思っています。素敵なものを2x2から4x4にアップサンプルしてみましょう。正しい近隣テクセルオフセットをどのように計算するのですか?私は双線形フィルタリングまたは最近接フィルタリングを使うことができません。私は各フラグメントの実行のために4つのサンプルを選び、ダウンサンプリングの前に最大のものを選ぶ必要があります。アップサンプリングパスについても同様であり、すなわち、フラグメント実行ごとに4つのサンプルを選択する必要がある。ダウンサンプルとテクスチャオフセットのアップサンプル、OpenGL GLSL
近隣オフセットを正しく計算しましたか(フルスクリーンクワッドを使用していますか?)
//Downsample: 1.0/2.0, Upsample: 1.0/4.0.
vec2 texelSize = vec2(1.0/textureWidth, 1.0/textureHeight);
const vec2 DOWNSAMPLE_OFFSETS[4] = vec2[]
(
vec2(-0.5, -0.5) * texelSize,
vec2(-0.5, 0.5) * texelSize,
vec2(0.5, -0.5) * texelSize,
vec2(0.5, 0.5) * texelSize
);
const vec2 UPSAMPLE_OFFSETS[4] = vec2[]
(
vec2(-1.0, -1.0) * texelSize,
vec2(-1.0, 1.0) * texelSize,
vec2(1.0, -1.0) * texelSize,
vec2(1.0, 1.0) * texelSize
);
//Fragment shader.
#version 400 core
uniform sampler2D mainTexture;
in vec2 texCoord;
out vec4 fragColor;
void main(void)
{
#if defined(DOWNSAMPLE)
vec2 uv0 = texCoord + DOWNSAMPLE_OFFSETS[0];
vec2 uv1 = texCoord + DOWNSAMPLE_OFFSETS[1];
vec2 uv2 = texCoord + DOWNSAMPLE_OFFSETS[2];
vec2 uv3 = texCoord + DOWNSAMPLE_OFFSETS[3];
#else
vec2 uv0 = texCoord + UPSAMPLE_OFFSETS[0];
vec2 uv1 = texCoord + UPSAMPLE_OFFSETS[1];
vec2 uv2 = texCoord + UPSAMPLE_OFFSETS[2];
vec2 uv3 = texCoord + UPSAMPLE_OFFSETS[3];
#endif
float val0 = texture(mainTexture, uv0).r;
float val1 = texture(mainTexture, uv1).r;
float val2 = texture(mainTexture, uv2).r;
float val3 = texture(mainTexture, uv3).r;
//Do some stuff...
fragColor = ...;
}
あなたは別のサンプル数(これはデフォルトのマルチサンプリングであなたのためにOKの場合) –
はそれは私の場合には不可能であるmultisampleTextureにFBOとrederを使用することができ、深みのあるテクスチャをダウンサンプリングし、ピクセルの滲みを避けるために別のテクスチャをアップサンプリングする必要があるからです。したがって、私は双線形近所を手動で比較しなければならない。 – karl88