using System;
using System.Collections.Generic;
using System.Text;
using OpenTK;
using OpenTK.Graphics.OpenGL;
using OpenTK.Graphics;
using OpenTK.Input;
using System.Threading;
using System.Drawing;
using System.Drawing.Imaging;
using GlPixelFormat = OpenTK.Graphics.OpenGL.PixelFormat;
using SysPixelFormat = System.Drawing.Imaging.PixelFormat;
using System.IO;
namespace OpenTK建立一个窗体
{
internal class Game : GameWindow
{
private Bitmap _bitmap = Image.FromFile(Directory.GetCurrentDirectory() + "\\logo.jpg") as Bitmap;
private int _texture;
private string windowTitle="";
private int frames = 0;
public Game(int with, int height, string title)
: base(with, height, GraphicsMode.Default, title)
{
}
protected override void OnLoad(EventArgs e)
{
GL.ClearColor(Color.MidnightBlue);
//GL.Enable(EnableCap.DepthTest);
GL.Enable(EnableCap.Texture2D);
GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest);
GL.GenTextures(1, out _texture);
GL.BindTexture(TextureTarget.Texture2D, _texture);
BitmapData bitmapData = _bitmap.LockBits(
new Rectangle(0, 0, _bitmap.Width, _bitmap.Height),
ImageLockMode.ReadOnly,
SysPixelFormat.Format32bppArgb
);
GL.TexImage2D(
TextureTarget.Texture2D,
0,
PixelInternalFormat.Rgba,
bitmapData.Width,
bitmapData.Height,
0,
GlPixelFormat.Bgra,
PixelType.UnsignedByte,
bitmapData.Scan0
);
_bitmap.UnlockBits(bitmapData);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMinFilter.Linear);
}
protected override void OnUnload(EventArgs e)
{
//base.OnUnload(e);
GL.DeleteTextures(1, ref _texture);
}
protected override void OnUpdateFrame(FrameEventArgs e)
{
base.OnUpdateFrame(e);
KeyboardState input = Keyboard.GetState();
if (input.IsKeyDown(Key.Escape))
{
Exit();
}
Title = $"{windowTitle} - FPS: {RenderFrequency:0.0} - Frames: {frames}";
}
protected override void OnRenderFrame(FrameEventArgs e)
{
frames++;
GL.Clear(ClearBufferMask.ColorBufferBit);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
GL.BindTexture(TextureTarget.Texture2D, _texture);
GL.Begin(PrimitiveType.Quads);
GL.TexCoord2(0.0f, 1.0f);
GL.Vertex2(-0.6f, -0.4f);
GL.TexCoord2(1.0f, 1.0f);
GL.Vertex2(0.6f, -0.4f);
GL.TexCoord2(1.0f, 0.0f);
GL.Vertex2(0.6f, 0.4f);
GL.TexCoord2(0.0f, 0.0f);
GL.Vertex2(-0.6f, 0.4f);
GL.End();
SwapBuffers();
}
}
}
C# 通过 OpenTK 在窗体上显示一张图片
最新推荐文章于 2024-01-23 07:47:06 发布