使用第一人称相机的XNA纹理基本体

使用第一人称相机的XNA纹理基本体,xna,primitive,perspectivecamera,Xna,Primitive,Perspectivecamera,所以我设置了一个XNA应用程序。相机处于第一人称模式,用户可以使用键盘四处移动,并使用鼠标重新定位相机目标。我已经能够很好地加载3D模型,并且它们在屏幕上显示没有问题。每当我尝试绘制任何基本体(无论是否有纹理),它都不会显示在屏幕上的任何位置,无论我如何放置相机 在Initialize()中,我有: 在LoadContent()中,我有: quadTexture=Content.Load(@“纹理\砖墙”); quadEffect=新的基本效果(this.GraphicsDevice,null)

所以我设置了一个XNA应用程序。相机处于第一人称模式,用户可以使用键盘四处移动,并使用鼠标重新定位相机目标。我已经能够很好地加载3D模型,并且它们在屏幕上显示没有问题。每当我尝试绘制任何基本体(无论是否有纹理),它都不会显示在屏幕上的任何位置,无论我如何放置相机

在Initialize()中,我有:

在LoadContent()中,我有:

quadTexture=Content.Load(@“纹理\砖墙”);
quadEffect=新的基本效果(this.GraphicsDevice,null);
quadEffect.AmbientLightColor=新矢量3(0.8f,0.8f,0.8f);
quadEffect.LightingEnabled=真;
四元效应。世界=矩阵。同一性;
quadEffect.View=Matrix.CreateLookAt(cameraPosition、cameraTarget、Vector3.Up);
quadEffect.Projection=此.Projection;
quadEffect.TextureEnabled=真;
quadEffect.Texture=quadTexture;
在绘图()中()我有:

this.GraphicsDevice.VertexDeclaration=quadVertexDecl;
quadfeffect.Begin();
foreach(quadEffect.CurrentTechnology.pass中的EffectPass)
{
pass.Begin();
GraphicsDevice.DrawUserIndexedPrimitives(
PrimitiveType.TriangleList,
四边形顶点,0,4,
四元索引,0,2);
pass.End();
}
结束();

我想我在quadEffect属性中做错了什么,但我不太确定是什么。

我无法在工作时的计算机上运行此代码,因为我没有安装game studio。但作为参考,请查看创建者俱乐部网站上的3D音频样本。他们在那个项目中有一个“四边形抽屉”,演示如何在世界上任何位置绘制纹理四边形。这是一个非常好的解决方案,可以解决您似乎想要做的事情:-)

        quad = new Quad(Vector3.Zero, Vector3.UnitZ, Vector3.Up, 2, 2);

        quadVertexDecl = new VertexDeclaration(this.GraphicsDevice, VertexPositionNormalTexture.VertexElements);
        quadTexture = Content.Load<Texture2D>(@"Textures\brickWall");

        quadEffect = new BasicEffect(this.GraphicsDevice, null);
        quadEffect.AmbientLightColor = new Vector3(0.8f, 0.8f, 0.8f);
        quadEffect.LightingEnabled = true;
        quadEffect.World = Matrix.Identity;
        quadEffect.View = Matrix.CreateLookAt(cameraPosition, cameraTarget, Vector3.Up);
        quadEffect.Projection = this.Projection;
        quadEffect.TextureEnabled = true;
        quadEffect.Texture = quadTexture;
        this.GraphicsDevice.VertexDeclaration = quadVertexDecl;
        quadEffect.Begin();

        foreach (EffectPass pass in quadEffect.CurrentTechnique.Passes)
        {
            pass.Begin();
            GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionNormalTexture>(
                     PrimitiveType.TriangleList,
                     quad.Vertices, 0, 4,
                     quad.Indexes, 0, 2);

            pass.End();
        }

        quadEffect.End();