【OpenGL】C#搭建OpenGL开发环境
2021/4/18 22:55:18
本文主要是介绍【OpenGL】C#搭建OpenGL开发环境,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目的:
1、在C#环境下搭建OpenGL的开发环境。
2、实现一个简单的shader。
工具:
1、Visual Studio 2017
步骤:
1、打开Visual Studio,新建个工程,winform或者控制台均可。
2、安装Giawa.OpenGL和Giawa.OpenGL.Platform。
这2个库来自于一个开源工程,叫opengl4csharp。Github地址:https://github.com/giawa/opengl4csharp
在nuget里面搜索安装即可。
3、下载SDL2.dll并添加到bin目录里面。
下载地址:
https://www.libsdl.org/download-2.0.php
注意默认要下载x86的,如果需要64的,就再下载。
4、创建OpenGL窗体
在程序启动的时候加入以下代码:
// create an OpenGL window OpenGL.Platform.Window.CreateWindow("OpenGL", 1280, 720); // handle events and render the frame while (OpenGL.Platform.Window.Open) { OpenGL.Platform.Window.HandleEvents(); OnRenderFrame(); }
其中,OnRenderFrame可以先创建个空函数,后面会用到
此时运行,会出现个黑乎乎的窗体,即表明基础环境搭建成功。
5、创建着色器
顶点着色器:
public static string vertexShader2Source = @" uniform mat4 projection_matrix; uniform mat4 modelview_matrix; attribute vec3 in_position; void main(void) { gl_Position = projection_matrix * modelview_matrix * vec4(in_position, 1); } ";
片元着色器
public static string fragmentShader2Source = @" uniform vec3 color; void main(void) { gl_FragColor = vec4(color, 1); } ";
创建着色器程序,注意要写在createWindow后面
// create the shader program ShaderProgram program = new ShaderProgram(vertexShader2Source, fragmentShader2Source); // set the color to blue program["color"].SetValue(new Vector3(0, 0, 1));
6、画一个cube。注意要在主循环前面写
// set up some defaults for the shader program project and modelview matrices program["projection_matrix"].SetValue(Matrix4.CreatePerspectiveFieldOfView(0.45f, (float)width / height, 0.1f, 1000f)); program["modelview_matrix"].SetValue(Matrix4.CreateTranslation(new Vector3(2, 2, -10)) * Matrix4.CreateRotation(new Vector3(1, -1, 0), 0.2f)); // create a cube cube = OpenGL.Geometry.CreateCube(program, new Vector3(-1, -1, -1), new Vector3(1, 1, 1));
7、在主循环中运行
void OnRenderFrame() { Gl.Viewport(0, 0, width, height); Gl.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); cube.Program.Use(); cube.Draw(); OpenGL.Platform.Window.SwapBuffers(); }
这个时候运行,即可看到一个cube。由于没有更多的设置,所以看到的只是一块面。
最后,完整的代码如下:
using OpenGL; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Numerics; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace OpenGLForWinformDemo { public partial class Form1 : Form { public static string vertexShader2Source = @" uniform mat4 projection_matrix; uniform mat4 modelview_matrix; attribute vec3 in_position; void main(void) { gl_Position = projection_matrix * modelview_matrix * vec4(in_position, 1); } "; public static string fragmentShader2Source = @" uniform vec3 color; void main(void) { gl_FragColor = vec4(color, 1); } "; public VAO cube; int width = 1000; int height = 500; public Form1() { InitializeComponent(); // create an OpenGL window OpenGL.Platform.Window.CreateWindow("OpenGL", 1280, 720); // create the shader program ShaderProgram program = new ShaderProgram(vertexShader2Source, fragmentShader2Source); // set the color to blue program["color"].SetValue(new Vector3(0, 0, 1)); // set up some defaults for the shader program project and modelview matrices program["projection_matrix"].SetValue(Matrix4.CreatePerspectiveFieldOfView(0.45f, (float)width / height, 0.1f, 1000f)); program["modelview_matrix"].SetValue(Matrix4.CreateTranslation(new Vector3(2, 2, -10)) * Matrix4.CreateRotation(new Vector3(1, -1, 0), 0.2f)); // create a cube cube = OpenGL.Geometry.CreateCube(program, new Vector3(-1, -1, -1), new Vector3(1, 1, 1)); // handle events and render the frame while (OpenGL.Platform.Window.Open) { OpenGL.Platform.Window.HandleEvents(); OnRenderFrame(); } } void OnRenderFrame() { Gl.Viewport(0, 0, width, height); Gl.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); cube.Program.Use(); cube.Draw(); OpenGL.Platform.Window.SwapBuffers(); } } }
SDL的解释,摘自百度:
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。
参考资料:
https://github.com/giawa/opengl4csharp
这篇关于【OpenGL】C#搭建OpenGL开发环境的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具