使用C#/ XNA 4.0 :(但问题是与代码无关的) 我试图制作一个" viewscreen / security camera"样式特征:即在主屏幕中首先渲染的3D模型,从(全局)固定的摄像机角度 - 以及在一个小的“窗口”类似的框中,比如在右上角,从固定的(相对于3D模型)摄像机点。
为了展示我的目标,这里有一个来自Pixar Cars" Tokyo Mater"简短,可能是非法上传,显示在背景中渲染的主要图像,以及(两个)较小的子窗口,从略微不同的角度显示相同的场景(https://www.youtube.com/watch?v=zdPt8-ypLmI#t=02m09s)为什么这是我的例子?可能是因为我3岁的孩子已经看过很多次了,它已经在我脑海里灼烧,但我们离题了......
第一部分工作正常,我让模特愉快地在空间中移动,并且他们在正确的位置正确地渲染。
这是看起来的样子:
foreach (ModelMesh mesh in theirModel.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.World = transforms[mesh.ParentBone.Index]
* Matrix.CreateScale(.03f)
* Matrix.CreateRotationY(theirmodelRotation)
* Matrix.CreateTranslation(theirmodelPosition); // "real" world model location happens to be (0,0,-100000)
effect.View = Matrix.CreateLookAt(
cameraPosition, // main screen camera location, happens to be 0,3500,10000
Vector3.Zero,
Vector3.Up);
effect.Projection = Matrix.CreatePerspectiveFieldOfView(
MathHelper.ToRadians(45.0f),
.5f,
nearClippingDistance,
farClippingDistance);
}
// Draw the mesh, using the effects set above.
mesh.Draw();
}
但子窗口部分给我带来了困难。以下是我尝试的内容:(代码在绘制序列中的上述内容后立即运行)
foreach (ModelMesh mesh in theirModel.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.World = transforms[mesh.ParentBone.Index]
* Matrix.CreateScale(.03f)
* Matrix.CreateRotationY(theirmodelRotation)
* Matrix.CreateTranslation(theirmodelPosition); // same as above
effect.View = Matrix.CreateLookAt(
//cameraPosition,
new Vector3(
theirmodelPosition.X,
theirmodelPosition.Y,
theirmodelPosition.Z - 12000, // sub-window camera location, fixed in front of model
Vector3.Zero,
Vector3.Up);
effect.Projection = Matrix.CreatePerspectiveFieldOfView(
MathHelper.ToRadians(45.0f),
.5f,
nearClippingDistance,
farClippingDistance);
}
// Draw the mesh, using the effects set above.
mesh.Draw();
}
}
我尝试保持一切相同,并将第二次绘制的相机位置更改为仅相对于模型的位置进行修复,但这会导致第二次绘制位于屏幕的中心,而不是(例如)右上角 - 如果我将摄像机位置更改为右上角,则会扰乱它在对象上看到的角度。还存在其他问题,例如,如果模型的位置在(例如)Y轴和Z轴之间变化,则子窗口相机慢慢偏离对准,但我认为它们都来自同一个问题:只需改变相机与模型相关的位置然后重新绘制就不够了。
所以这是一般性问题,而不是试图调试我上面可能遇到的任何具体问题:给定标准世界,视图和投影矩阵,正确呈现正常的3D模型,这3个矩阵的哪些部分(我假设,或许是错误的,在视图中)需要改变以再次渲染该模型(和/或其附近的任何背景/其他模型,即在视野内)(X) ,Y)在屏幕上,从固定的摄像机角度(Z)到该模型的距离?
提前致谢,如果我没有问过这个问题我很抱歉。