【发布时间】:2019-01-21 09:47:54
【问题描述】:
我正在尝试将我的游戏引擎从使用 LWJGL 3 的 Java 迁移到使用 OpenTK (OpenGL 3+) 的 C#。到目前为止,我可以绘制一个带有纹理的三角形。但是,当我尝试将投影矩阵上传到着色器时,它不起作用。以下是我尝试过的事情:
-上传统一浮动到着色器 - Works
- 仅上传没有透视的单位矩阵 - WORKS
- 不要将顶点乘以投影 - 有效
- 手动创建投影 - 不起作用
代码如下:
//At the top of class
Matrix4 projection;
//In render method
projection = Matrix4.Identity;
projection = Matrix4.CreatePerspectiveFieldOfView((float)Math.PI / 4,
1280 / 720, 1f, 100f);
int loc = GL.GetUniformLocation(progId, "projection");
GL.UniformMatrix4(loc, false, ref projection);
//Other render stuff
顶点着色器:
#version 330 core
layout (location = 0) in vec3 pos;
layout (location = 1) in vec2 uv;
out vec2 frag_uv;
uniform mat4 projection;
void main()
{
gl_Position = projection * vec4(pos, 1.0);
frag_uv = uv;
}
正如我所说,我认为制服已正确上传,因为当我删除 CreatePerspectiveFOV 方法时,三角形再次出现。我正在使用 Visual Studio 2017。
【问题讨论】:
-
你的顶点坐标是什么?你使用 View Matrix 吗?
-
不,它只是一个没有视图的投影矩阵,顶点坐标有一个-2作为z坐标。
标签: c# opengl visual-studio-2017 opentk