Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在正交视图矩阵上创建边的正确方法_C#_Opengl_Matrix_Graphics_Opentk - Fatal编程技术网

C# 在正交视图矩阵上创建边的正确方法

C# 在正交视图矩阵上创建边的正确方法,c#,opengl,matrix,graphics,opentk,C#,Opengl,Matrix,Graphics,Opentk,我正在尝试创建一个正交视图矩阵,从自顶向下的视图以90度的角度从场景中查看场景 这是我当前尝试的代码: ortho = Matrix4.CreateOrthographicOffCenter(-500f / side_zoom + (float)side_translate.X, 500f / side_zoom + (float)side_translate.X, 500f / side_zoom + (float)side_translate.Y, -

我正在尝试创建一个正交视图矩阵,从自顶向下的视图以90度的角度从场景中查看场景

这是我当前尝试的代码:

        ortho = Matrix4.CreateOrthographicOffCenter(-500f / side_zoom + (float)side_translate.X, 500f / side_zoom + (float)side_translate.X,
            500f / side_zoom + (float)side_translate.Y, -500f / side_zoom + (float)side_translate.Y, -100000, 100000) * Matrix4.CreateRotationX(90);
基本上,创建正交偏心*旋转x90

乍一看,这一点与预期相符。但当你放大或平移到侧面时,形状会发生可怕的扭曲

以下是标准缩放的场景,按预期渲染:

当您放大时,会出现以下情况:

如您所见,尽管渲染了静态模型,但镶嵌矩形已分为三角形和多边形。场景的所有其他视图角度保持不变。另外值得一提的是,所有车型都会在到达顶部的四分之一处停止。无论付出多大的努力都不会让他们超越底线,他们的底线总是在那里结束。它会在那里渲染线条,即使您希望线条超出限制并停止渲染

还有最后一点,鼠标的Ortho.inversed*screen_coord_返回正确的X轴坐标,但Y轴坐标错误得可怕。同样的方法也适用于自顶向下视图。

我找到了它

基本上。。。旋转正交矩阵,虽然很有趣,但不是正确的方法

正确的方法看起来更像这样:

        Matrix4 view = Matrix4.LookAt(new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(0, 0, -1));
        ortho = view * Matrix4.CreateOrthographicOffCenter(-500f / side_zoom + (float)side_translate.X, 500f / side_zoom + (float)side_translate.X,
            500f / side_zoom + (float)side_translate.Y, -500f / side_zoom + (float)side_translate.Y, -100000, 100000);
基本上,在正交矩阵后面乘以观察视图矩阵。请注意,所有的东西都被翻转了,但这就是为什么我的上方向向量是负的,而不是一