Skip to content

bobbyzhu/CSharpGL

 
 

Repository files navigation

🎨Welcome to CSharpGL

CSharpGL @ nuget

CSharpGL is a pure C# project that allows for modern OpenGL rendering in an Object-Oriented way. It meets common requirements in OpenGL rendering such as:

🚀Modern Rendering

High-efficiency rendering of massive vertexes is supported by Object-Oriented modern rendering using GLSL shaders and vertex buffer objects.
modern-rendering

🌠GLCanvas

A winform control that supports drag-drop and wraps initialization of creating OpenGL context. raycast-volume-rendering

🚗Uniform Variables

structs support setting values for uniform variables in GLSL shader. edit-uniform-value

♋GLSwitch

Wraps OpenGL commands like

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA);
...
glDisable(GL_BLEND);

or glLineWidth(2.0f); GLSwitch

📌Color-Coded Picking

PickableRenderer supports picking primitives in multiple vertex buffer objects using Mouse.
pick and move primitive

🔘☑️🔳GLControl & Text

Rendering 'Control' at fixed position with fixed size.
For example, UIAxis renders an axis at left bottom corner.
All kinds of controls binds to specified border just like winform-control.
Rendering text using glRasterPos() and CallList().(Obsolete)
Rendering text using UIText.
UIText and UIAxis

export-glyph-texture-from-TTF

💎Some Cool Demos

Image Processing using Compute Shader.

Simple edge-detection implemented by compute shader.
compute-shader-image-processing

Raycast Volume Rendering using 3D texture.

raycast-volume-rendering

Particle Simulator using Compute Shader.

Particle's speed and position is updated by compute shader.
compute-shader-particles
compute-shader-particles

Order-Dependent Transparency VS Order-Independent Transparency.

order-independent-transparency

Point Sprite.

10000 particles with a sphere inside a cube. point-sprite
A spheroid.
point-sprite

Earth.

An earth model that singly rotates same as real earth. It's composed of 65341 positions, normals and uvs and 130140 indexes and a 10800x5400 texture. earth

🆔💯Billboard and LabelRenderer

Billboard can be used to display health-bar, damage numbers in game application. LabelRenderer renders a string at specified position which always faces camera.
billboard-health-bar-text

🎥Scene Editor

Useful tool to build a scene and feels how opengl's transform system works. CSharpGL-Scene-Editor

🍟Renderer Generator

RendererGenerator is a tiny console that reads an xml config file and dumps a Renderer.cs, a Model.cs, a vertex shader file(.vert) and a fragment shader file(.frag). A demo is shown as below:

<?xml version="1.0" encoding="utf-8"?>
<RendererGenerator TargetName="Demo" ZeroIndexBuffer="false" DrawMode="Points">
  <VertexProperty NameInShader="in_Position" NameInModel="position" PropertyType="vec3" />
  <VertexProperty NameInShader="in_TexCoord" NameInModel="texCoord" PropertyType="vec2" />
</RendererGenerator>

❓Support or Contact

Check my blog here or join my QQ Group开源CSharpGL群 (C#+OpenGL).

About

🎨CSharpGL is a pure C# project that allows for modern OpenGL rendering in an Object-Oriented way.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 98.8%
  • GLSL 1.2%