C# 在OpenTK 3.3中的着色器中投影和偏移顶点

C# 在OpenTK 3.3中的着色器中投影和偏移顶点,c#,opengl,glsl,shader,opentk,C#,Opengl,Glsl,Shader,Opentk,我正在尝试使用OpenTK为OpenGL创建一个多边形类。目标是创建类的一个实例,以像素坐标向其传递一个顶点数组,并将其正确地绘制到屏幕上 我想要实现这一点的方法是使用投影矩阵(定义为screen类中的公共变量),着色器应该使用该矩阵来缩放从NDC到像素坐标的所有对象。我还打算将偏移向量传递给着色器,以将其添加到该位置 投影是使用 Matrix4.创建正交偏心(0.0f,宽度,0.0f,高度,-100.0f,100.0f); 用于多边形的顶点包括: float[]顶点=新的float[] {

我正在尝试使用OpenTK为OpenGL创建一个多边形类。目标是创建类的一个实例,以像素坐标向其传递一个顶点数组,并将其正确地绘制到屏幕上

我想要实现这一点的方法是使用投影矩阵(定义为screen类中的公共变量),着色器应该使用该矩阵来缩放从NDC到像素坐标的所有对象。我还打算将偏移向量传递给着色器,以将其添加到该位置

投影是使用

Matrix4.创建正交偏心(0.0f,宽度,0.0f,高度,-100.0f,100.0f);
用于多边形的顶点包括:

float[]顶点=新的float[]
{
0.0f,100f,0f,
0.0f,0.0f,0f,
100f,0.0f,0f,
100f,100f,0f,
};
这是我的顶点着色器的外观:

#版本330核心
vec3位置的布局(位置=0);
均匀mat4投影;
均匀vec3偏移;
void main()
{
gl_位置=投影*vec4(位置+偏移,1.0);
}
这是多边形类:

使用系统;
使用System.Collections.Generic;
使用系统诊断;
使用系统文本;
使用OpenTK;
使用OpenTK.Graphics;
使用OpenTK.Graphics.OpenGL;
使用着色器;
使用发动机;
命名空间Engine.Engine.Shape
{
类多边形
{
浮动[]个顶点;
列出索引;
uint[]指数;
国际VBO、VAO、EBO;
着色器;
矩阵4投影;
矢量3偏移量;
公共多边形(浮动[]个顶点)
{
这个。顶点=顶点;
this.projection=Screen.projection;
偏移量=新矢量3(10,10,0);
//这将创建一个供EBO使用的索引数组
索引=新列表();
对于(uint curr\u vert=1;curr\u vert
预期结果是一个具有灰色背景的窗口,左上角有一个白色多边形,在每个轴上从角点偏移10个像素

但是,如果尝试将偏移或投影矩阵应用于着色器,则不会出现多边形。由于GLSL无法打印到控制台,因此我无法调试着色器本身,只能查看结果并更改输入。我做错了什么?我看到每个人都是这样做的

此代码中使用的着色器类如下(可以找到):

使用系统;
使用System.IO;
使用系统文本;
使用System.Collections.Generic;
使用OpenTK.Graphics.OpenGL;
使用OpenTK;
命名空间着色器
{
//一个简单的类,用于帮助创建着色器。
公共类着色器
{
公共只读int句柄;
专用只读词典_uniformLocations;
//这就是创建简单着色器的方式。
//着色器是用GLSL编写的,GLSL是一种语义非常类似于C的语言。
//GLSL源代码是在运行时*编译的,因此它可以针对当前正在使用的图形卡进行自我优化。
//可以在shader.vert中找到GLSL的注释示例
公共着色器(strin)
offset = new Vector3(10, 10, -10);
GL.UniformMatrix4(_uniformLocations[name], false, ref data);