各フレームの RenderTarget2D からのテクスチャを使用してミラーを平面として表示するために作成したコードがあります。
これはすべて完全に正常に機能しますが、反射の仕方に何か問題があると思います (たとえば、ミラーが見ているはずの場所を正確に見ていないなど)。
ミラーのスクリーンショットがありますが、見た目はそれほど悪くありません。プレイヤーがミラーに近づくと、主に歪みが発生します。
ミラー テクスチャを作成するコードは次のとおりです。ミラーが X 軸上で 15 度回転していることに注意してください。
RenderTarget2D rt;
...
rt = new RenderTarget2D(device, (int)(graphics.PreferredBackBufferWidth * 1.5), (int)(graphics.PreferredBackBufferHeight * 1.5));
...
device.SetRenderTarget(rt);
device.Clear(Color.Black);
Vector3 camerafinalPosition = camera.position;
if (camera.isCrouched) camerafinalPosition.Y -= (camera.characterOffset.Y * 6 / 20);
Vector3 mirrorPos = new Vector3((room.boundingBoxes[8].Min.X + room.boundingBoxes[8].Max.X) / 2, (room.boundingBoxes[8].Min.Y + room.boundingBoxes[8].Max.Y) / 2, (room.boundingBoxes[8].Min.Z + room.boundingBoxes[8].Max.Z) / 2);
Vector3 cameraFinalTarget = new Vector3((2 * mirrorPos.X) - camera.position.X, (2 * mirrorPos.Y) - camerafinalPosition.Y, camera.position.Z);
cameraFinalTarget = Vector3.Transform(cameraFinalTarget - mirrorPos, Matrix.CreateRotationX(MathHelper.ToRadians(-15))) + mirrorPos;
Matrix mirrorLookAt = Matrix.CreateLookAt(mirrorPos, cameraFinalTarget, Vector3.Up);
room.DrawRoom(mirrorLookAt, camera.projection, camera.position, camera.characterOffset, camera.isCrouched);
device.SetRenderTarget(null);
そして、鏡はrt
テクスチャを使って描かれています。反射物理学または LookAt マトリックスの作成方法が完全に間違っていると思います。助けてくれてありがとう。