OpenTK 三角形不绘制
OpenTK triangle not drawing
我一直在学习教程,但我没有看到三角形,我不知道我的代码有什么问题导致三角形不出现。
我使用的是 OpenTK 版本 4.7.1
这是我的代码:
这是Window.cs
这里是我写 OpenGl 代码的地方
using OpenTK.Windowing.Common;
using OpenTK.Windowing.Desktop;
using OpenTK.Graphics.OpenGL4;
using OpenTK.Mathematics;
using System;
using System.Collections.Generic;
using System.Text;
namespace Models
{
public class Window : GameWindow
{
private int vertexBufferHandle;
private int shaderProgramHandle;
private int vertexArrayHandle;
public Window() : base(GameWindowSettings.Default, NativeWindowSettings.Default)
{
this.CenterWindow(new Vector2i(1280, 760));
}
protected override void OnResize(ResizeEventArgs e)
{
GL.Viewport(0, 0, e.Width, e.Height);
base.OnResize(e);
}
protected override void OnLoad()
{
GL.ClearColor(new Color4(0.3f, 0.4f, 0.5f, 1f));
float[] vertices =
{
0f, 0.5f,
0.5f, -0.5f,
-0.5f, -0.5f
};
vertexBufferHandle = GL.GenBuffer();
GL.BindBuffer(BufferTarget.ArrayBuffer, vertexBufferHandle);
GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.StaticDraw);
GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
vertexArrayHandle = GL.GenVertexArray();
GL.BindVertexArray(vertexArrayHandle);
GL.BindBuffer(BufferTarget.ArrayBuffer, vertexBufferHandle);
GL.VertexAttribPointer(0, 2, VertexAttribPointerType.Float, false, 2 * sizeof(float), 0);
GL.EnableVertexAttribArray(0);
GL.BindVertexArray(0);
string vertexShader =
@"#version 330 core
layout (location = 0) in vec2 aPosition;
void main()
{
gl_Position = vec4(aPosition, 0, 1.0);
}";
string pixelShader =
@"#version 330 core
out vec4 FragColor;
void main()
{
FragColor = vec4(0.8, 0.2, 0.5, 1);
}";
int vertexShaderHandle = GL.CreateShader(ShaderType.VertexShader);
GL.ShaderSource(vertexShaderHandle, vertexShader);
GL.CompileShader(vertexShaderHandle);
int pixelShaderHandle = GL.CreateShader(ShaderType.FragmentShader);
GL.ShaderSource(pixelShaderHandle, pixelShader);
GL.CompileShader(pixelShaderHandle);
shaderProgramHandle = GL.CreateProgram();
GL.AttachShader(shaderProgramHandle, vertexShaderHandle);
GL.AttachShader(shaderProgramHandle, pixelShaderHandle);
GL.LinkProgram(shaderProgramHandle);
GL.DetachShader(shaderProgramHandle, vertexShaderHandle);
GL.DetachShader(shaderProgramHandle, pixelShaderHandle);
GL.DeleteShader(vertexShaderHandle);
GL.DeleteShader(pixelShaderHandle);
base.OnLoad();
}
protected override void OnUnload()
{
GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
GL.DeleteBuffer(vertexBufferHandle);
GL.UseProgram(0);
GL.DeleteProgram(shaderProgramHandle);
base.OnUnload();
}
protected override void OnUpdateFrame(FrameEventArgs args)
{
base.OnUpdateFrame(args);
}
protected override void OnRenderFrame(FrameEventArgs args)
{
GL.Clear(ClearBufferMask.ColorBufferBit);
GL.UseProgram(shaderProgramHandle);
GL.BindVertexArray(vertexArrayHandle);
GL.DrawArrays(PrimitiveType.Triangles, 0, 1);
Context.SwapBuffers();
base.OnRenderFrame(args);
}
}
}
这是 Program.cs
这是我 运行 所有代码
using OpenTK;
using OpenTK.Windowing.Common;
using OpenTK.Windowing.Desktop;
using OpenTK.Mathematics;
using System;
namespace Models
{
class Program
{
static void Main(string[] args)
{
using (var window = new Window())
{
window.Run();
}
}
}
}
DrawArrays
的最后一个参数不是图元数而是顶点数:
GL.DrawArrays(PrimitiveType.Triangles, 0, 1);
GL.DrawArrays(PrimitiveType.Triangles, 0, 3);
我一直在学习教程,但我没有看到三角形,我不知道我的代码有什么问题导致三角形不出现。
我使用的是 OpenTK 版本 4.7.1
这是我的代码:
这是Window.cs 这里是我写 OpenGl 代码的地方
using OpenTK.Windowing.Common;
using OpenTK.Windowing.Desktop;
using OpenTK.Graphics.OpenGL4;
using OpenTK.Mathematics;
using System;
using System.Collections.Generic;
using System.Text;
namespace Models
{
public class Window : GameWindow
{
private int vertexBufferHandle;
private int shaderProgramHandle;
private int vertexArrayHandle;
public Window() : base(GameWindowSettings.Default, NativeWindowSettings.Default)
{
this.CenterWindow(new Vector2i(1280, 760));
}
protected override void OnResize(ResizeEventArgs e)
{
GL.Viewport(0, 0, e.Width, e.Height);
base.OnResize(e);
}
protected override void OnLoad()
{
GL.ClearColor(new Color4(0.3f, 0.4f, 0.5f, 1f));
float[] vertices =
{
0f, 0.5f,
0.5f, -0.5f,
-0.5f, -0.5f
};
vertexBufferHandle = GL.GenBuffer();
GL.BindBuffer(BufferTarget.ArrayBuffer, vertexBufferHandle);
GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof(float), vertices, BufferUsageHint.StaticDraw);
GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
vertexArrayHandle = GL.GenVertexArray();
GL.BindVertexArray(vertexArrayHandle);
GL.BindBuffer(BufferTarget.ArrayBuffer, vertexBufferHandle);
GL.VertexAttribPointer(0, 2, VertexAttribPointerType.Float, false, 2 * sizeof(float), 0);
GL.EnableVertexAttribArray(0);
GL.BindVertexArray(0);
string vertexShader =
@"#version 330 core
layout (location = 0) in vec2 aPosition;
void main()
{
gl_Position = vec4(aPosition, 0, 1.0);
}";
string pixelShader =
@"#version 330 core
out vec4 FragColor;
void main()
{
FragColor = vec4(0.8, 0.2, 0.5, 1);
}";
int vertexShaderHandle = GL.CreateShader(ShaderType.VertexShader);
GL.ShaderSource(vertexShaderHandle, vertexShader);
GL.CompileShader(vertexShaderHandle);
int pixelShaderHandle = GL.CreateShader(ShaderType.FragmentShader);
GL.ShaderSource(pixelShaderHandle, pixelShader);
GL.CompileShader(pixelShaderHandle);
shaderProgramHandle = GL.CreateProgram();
GL.AttachShader(shaderProgramHandle, vertexShaderHandle);
GL.AttachShader(shaderProgramHandle, pixelShaderHandle);
GL.LinkProgram(shaderProgramHandle);
GL.DetachShader(shaderProgramHandle, vertexShaderHandle);
GL.DetachShader(shaderProgramHandle, pixelShaderHandle);
GL.DeleteShader(vertexShaderHandle);
GL.DeleteShader(pixelShaderHandle);
base.OnLoad();
}
protected override void OnUnload()
{
GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
GL.DeleteBuffer(vertexBufferHandle);
GL.UseProgram(0);
GL.DeleteProgram(shaderProgramHandle);
base.OnUnload();
}
protected override void OnUpdateFrame(FrameEventArgs args)
{
base.OnUpdateFrame(args);
}
protected override void OnRenderFrame(FrameEventArgs args)
{
GL.Clear(ClearBufferMask.ColorBufferBit);
GL.UseProgram(shaderProgramHandle);
GL.BindVertexArray(vertexArrayHandle);
GL.DrawArrays(PrimitiveType.Triangles, 0, 1);
Context.SwapBuffers();
base.OnRenderFrame(args);
}
}
}
这是 Program.cs 这是我 运行 所有代码
using OpenTK;
using OpenTK.Windowing.Common;
using OpenTK.Windowing.Desktop;
using OpenTK.Mathematics;
using System;
namespace Models
{
class Program
{
static void Main(string[] args)
{
using (var window = new Window())
{
window.Run();
}
}
}
}
DrawArrays
的最后一个参数不是图元数而是顶点数:
GL.DrawArrays(PrimitiveType.Triangles, 0, 1);
GL.DrawArrays(PrimitiveType.Triangles, 0, 3);