【OpenGL】C#搭建OpenGL开发环境
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【OpenGL】C#搭建OpenGL开发环境,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4390字,纯文字阅读大概需要7分钟。
内容图文
![【OpenGL】C#搭建OpenGL开发环境](/upload/InfoBanner/zyjiaocheng/592/a389768f1c174a4db64febb1e46d21de.jpg)
目的:
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开发环境全部内容,希望文章能够帮你解决【OpenGL】C#搭建OpenGL开发环境所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。