2017-10-29 10 views
1

、私はこれはフラグメントシェーダでテクスチャの位置を計算する必要があります。のOpenGL ESのテクスチャはOpenGLのバージョンと同じコードとシフトしている私のWindowsコード(OpenGLの4)で

vec2 pixel = "some equation" 
vec2 textureSize = vec2(512.0, 512.0); 
vec2 texel = floor(pixel + vec2(0.5)) + vec2(0.5); 
texel /= textureSize 

私は、iOS上でこのコードを実行した場合(OpenGL ES 3.0)では、画像全体がx方向とy方向に部分的にシフトされています。私はvec2(0.5)を削除し、ちょうど

vec2 texel = floor(pixel + vec2(0.5)) 

を使用しようとしましたが、それはもっと間違っていました。

ESで何が起こっていますか?

+0

あなたのシェーダーに基づいて、私は問題が「いくつかの式」にあると考えます。 https://stackoverflow.com/help/mcveを読んでください - 欠けている必要なデータの半分で答えることは不可能です。エラーと予想される動作とのスクリーンショットも役に立つでしょう... – solidpixel

答えて

1

おそらくシェーダ精度です。以下を追加してみてください:

precision highp float; 

フラグメントシェーダの上部にあります。

個々の変数に精度修飾子が指定されていない場合、数学演算は、単精度(32ビットではなく16ビットの浮動小数点数)ではなく、浮動小数点数)、正確さの欠如はあなたが見ている成果物を説明することができます。

OpenGLESの実装ではフラグメントシェーダでhighpをサポートしていないので、この方法はどこでも動作しないことに注意してください。ただし、すべてのiOSデバイスでサポートされています。

+0

同じ結果を試してみてください –

+0

これは奇妙なテクスチャサイズです。テクスチャの読み込み中に1024x1024にパディングされる可能性はありますか?それは物事を大幅に排除します。 – Columbo

+0

テクスチャは512x512です。私は質問を更新しました。私はテクスチャの代わりに画面解像度を書いています。 –

関連する問題