長い、シャドウマッピングを見たいと思っていた今、ドラッグされた、今日は最終的に一方向にシャドウマッピングを見て、その後、シーンを撮る(ビット面倒に感じている各シーンを撮る)効果を見ました。
一般的にはシャドウマッピングプロセス:
// 1.レンダリング好ましいデプスマップ glViewport(0、0 、SHADOW_WIDTH、SHADOW_HEIGHT); glBindFramebuffer(GL_FRAMEBUFFER、depthMapFBO) にglClear(GL_DEPTH_BUFFER_BIT)を、 ConfigureShaderAndMatrices(); RenderScene(); glBindFramebuffer(GL_FRAMEBUFFER、0 ); // 2。いつものように、この時間は、マップする深さを使用してシーンをレンダリングしますが、 glViewport(0、0 ;、SCR_WIDTH、SCR_HEIGHTを) にglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ConfigureShaderAndMatrices(); glBindTexture(GL_TEXTURE_2D、デプスマップ); RenderScene();
アイデア:
1、デプスマップをレンダリング
光源の位置が再びもちろん、驚くべきGBuffer(遅延シェーディング)オフスクリーンレンダリングを使用して、カメラの位置をレンダリングされる、そのようなテクスチャの深さを記憶することができます。深さの外観は、平面マップテクスチャ、便利な試験奥行きマップの正確さで表示することができました。
2、影をレンダリング
これは、通常の手順と同じレンダリングですが、裁判官に深みを追加しました。深度マップの座標は、その深さマップ、対応するフラグメント線深度値に最も近い断片を示す深度マップからサンプリングすることが可能に対応するように、光源の点の座標にその位置を変換するための現在の断片について、深度テクスチャサンプリングからの深さ値の現在の深さ値の断片は、サンプル値が影に前記フラグメントの深さよりも大きいです。
少し間違って見える、サンプリング周期の設定を使用して深さの質感は、斜線部の一部が影に登場しているべきではありません。テクスチャの深さのプロパティを変更します。
GLuint WKS::Texture::GenDepthTexture(GLuint width, GLuint height) { glGenTextures(1, &this->textureID); glBindTexture(GL_TEXTURE_2D, this->textureID); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); GLfloat borderColor[] = { 1.0, 1.0, 1.0, 1.0 }; glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor); glBindTexture(GL_TEXTURE_2D, 0); return this->textureID; }
好多了。
当然了,这样的阴影范围有限,要获取完整的阴影需要使用点阴影的方式,对六个方向获取深度纹理。(见下节)