私のコードは、多数の頂点のグリッドを作成し、頂点シェーダーの高さのランダムなノイズ値によってそれらを置き換えます。を使用して移動
glTranslated(-camera.x, -camera.y, -camera.z);
正常に動作しますが、それはグリッドの端まで行くことができることを意味します。
カメラの位置をシェーダーに送信し、ディスプレイスメント全体をシェーダーでオフセットすることを考えました。したがって、最終的な頂点シェーダーコードは次のとおりです。
uniform vec3 camera_position;
varying vec4 position;
void main()
{
vec3 tmp;
tmp = gl_Vertex.xyz;
tmp -= camera_position;
gl_Vertex.y = snoise(tmp.xz / NOISE_FREQUENCY) * NOISE_SCALING;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
position = gl_Position;
}
編集:欠陥を修正しました。頂点自体が水平方向に移動しないようにする必要があります。
どういうわけか、これを実行してカメラの位置を変更すると、画面がちらつきますが、何も動きません。頂点はノイズ値によって正しく変位し、カラーリングとすべてが機能しますが、変位は移動しません。
参考までに、ここにgitリポジトリがあります:https ://github.com/Orpheon/Synthworld
私は何が間違っているのですか?
PS:「フリック」は間違っています。何も描かない位置もあれば、0位から通常のシーンを描く位置もあるので、止めずに動かすとちらつきます。でも、黒のままの場所、または正常な場所で停止できます。