Jump to content
  • Advertisement

C# GUI WinForms + OpenGL 3.1

8Observer8

790 views

This my example how to use GUI WinForms and OpenTK.GLControl

EditedTriangle_WinFormsOpenGL31CSharp.png.c068ffd85f854aa37767eb1093ade179.png

Standard WinForms Color Dialog:

 

 

 

 

 

EditedTriangle_WinFormsOpenGL31CSharp_ColorDialog.png



0 Comments


Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement
  • Advertisement
  • What is your GameDev Story?

    In 2019 we are celebrating 20 years of GameDev.net! Share your GameDev Story with us.

    (You must login to your GameDev.net account.)

  • Blog Entries

  • Similar Content

    • By Transcendent
      So this is the problem that I have :- https://youtu.be/kU8Dm5bDJXg
      This is the code i am using:-
      using System.Collections; using System.Collections.Generic; using UnityEngine; namespace SA { public class AnimatorHook : MonoBehaviour { Animator anim; StateManager states; public void Init(StateManager st) { states = st; anim = st.anim; } void OnAnimatorMove() { if (!states.canMove) anim.ApplyBuiltinRootMotion(); states.rigid.drag = 0; float multiplier = 1; Vector3 delta = anim.deltaPosition; delta.y = 0; Vector3 v = (delta * multiplier) / states.delta; states.rigid.velocity = v; } } } For additional reference see the following code
      using System.Collections; using System.Collections.Generic; using UnityEngine; namespace SA { public class StateManager : MonoBehaviour { [Header("Init")] public GameObject activeModel; [Header("Inputs")] public float vertical; public float horizontal; public float moveAmount; public Vector3 moveDir; public bool rt, rb, lt, lb; [Header("Stats")] public float moveSpeed = 5f; public float runSpeed = 8f; public float rotateSpeed = 20; public float toGround = 0.5f; [Header("States")] public bool onGround; public bool run; public bool lockOn; public bool inAction; public bool canMove; [Header("Other")] public EnemyTarget lockOnTarget; [HideInInspector] public Animator anim; [HideInInspector] public Rigidbody rigid; [HideInInspector] public AnimatorHook a_hook; [HideInInspector] public float delta; [HideInInspector] public LayerMask ignoreLayers; float _actionDelay; public void Init() { SetupAnimator(); rigid = GetComponent<Rigidbody>(); rigid.angularDrag = 999; rigid.drag = 4; rigid.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationZ; a_hook = activeModel.AddComponent<AnimatorHook>(); a_hook.Init(this); gameObject.layer = 8; ignoreLayers = ~(1 << 9); anim.SetBool("onGround",true); } void SetupAnimator() { if(activeModel == null) { anim = GetComponentInChildren<Animator>(); if(anim == null) { Debug.Log("no model found"); } else { activeModel = anim.gameObject; } } if(anim == null) { anim = activeModel.GetComponent<Animator>(); } //anim.applyRootMotion = false; } public void FixedTick(float d) { delta = d; rigid.drag = (moveAmount > 0 || !onGround) ? 0 : 4; DetectAction(); if (inAction) { // anim.applyRootMotion = true; _actionDelay += delta; if(_actionDelay > 0.3f) { inAction = false; _actionDelay = 0; } else { return; } } canMove = anim.GetBool("canMove"); if (!canMove) { return; } //anim.applyRootMotion = false; float targetSpeed = moveSpeed; if (run) targetSpeed = runSpeed; if(onGround) rigid.velocity = moveDir * (targetSpeed * moveAmount); /* if (run) lockOn = false; */ Vector3 targetDir = (lockOn == false) ? moveDir : lockOnTarget.transform.position - transform.position; targetDir.y = 0; if (targetDir == Vector3.zero) targetDir = transform.forward; Quaternion tr = Quaternion.LookRotation(targetDir); Quaternion targetRotation = Quaternion.Slerp(transform.rotation, tr, delta * moveAmount * rotateSpeed); transform.rotation = targetRotation; anim.SetBool("lockon", lockOn); if (lockOn == false) HandleMovementAnimations(); else HandleLockOnAnimations(moveDir); } public void DetectAction() { if (canMove == false) return; if (rb == false && rt == false && lt == false && lb == false) return; string targetAnim = null; if (rb) targetAnim = "Sword And Shield Attack"; if (rt) targetAnim = "Stable Sword Outward Slash"; if (lb) targetAnim = "Standing Melee Attack Horizontal"; if (lt) targetAnim = "Sword And Shield Slash (1)"; if (string.IsNullOrEmpty(targetAnim)) return; canMove = false; inAction = true; anim.CrossFade(targetAnim,0.2f); //rigid.velocity = Vector3.zero; } public void Tick(float d) { delta = d; onGround = OnGround(); anim.SetBool("onGround", onGround); } void HandleMovementAnimations() { anim.SetBool("run", run); anim.SetFloat("Vertical", moveAmount ,0.4f,delta); } void HandleLockOnAnimations(Vector3 moveDir) { Vector3 relativeDir = transform.InverseTransformDirection(moveDir); float h = relativeDir.x; float v = relativeDir.z; anim.SetFloat("Vertical", v, 0.2f, delta); anim.SetFloat("Horizontal", h, 0.2f, delta); } public bool OnGround() { bool r = false; Vector3 origin = transform.position + (Vector3.up * toGround); Vector3 dir = -Vector3.up; float dis = toGround + 0.3f; RaycastHit hit; if(Physics.Raycast(origin,dir,out hit,dis)) { r = true; Vector3 targetPosition = hit.point; transform.position = targetPosition; } return r; } } } I've been stuck on this for too long, any help will be highly appreciated
    • By HundredTai
      In the attached picture an intersection block is shown. My goal is to have the player switch lanes and (within the red bounding box) turn direction on a different road while always keeping a forward movement. Therefor the only input is left and right. The changing of the lanes has to happen quick and snappy (dependant on the player's overall speed) as visualized by the black squigly line. 
      However I'm not sure how to implement this. I tried moving left and right with coroutines but got stuck at going back to the lane one came from mid-changing. I added those nodes at the ends with the intention to lerp/move towards depending on the lane and road the player changes to but that won't work with the aforementioned quick snappy movement. Another thought that passed was creating a bit of a node graph and dynamically make a spline when switching lanes but this seems a bit overkill for what it really is (?). Finally I figured creating an object that the player controls but doesn't see that the actual player objects follows that's slightly infront of the object but haven't gotten to that yet due to too much doubts of implementation.
      The player should not be constrained. If they whish to change back to a lane halfways through changing lanes that should be possible. 
      Would like to hear some suggestions no mather how out there they might seem. Thanks!

    • By Tomtheseadog
      Hey guys,
      I'm having a little trouble with my point light. My light is working but the light source moves when I move my camera. I've been trying all week to fix it but at my wits end. Maybe I haven't converted it to the proper space.
      **VERTEX SHADER**
      in vec3 positions;
      in vec2 texCoords;
      in vec3 normals;
      out vec2 pass_texCoords;
      out vec3 mvVertexNormal;
      out vec3 mvVertexPosition;
      uniform mat4 projectionMatrix;
      uniform mat4 modelViewMatrix;
      uniform mat4 normalMatrix;
      void main()
      {
      pass_texCoords = texCoords;
      vec4 mvPos = modelViewMatrix * vec4(positions, 1.0);
      mvVertexNormal = mat3(normalMatrix) * normals;
      mvVertexPosition = vec3(modelViewMatrix * vec4(positions, 1.0));
      gl_Position = projectionMatrix * mvPos;
      }
      **FRAGMENT SHADER**
      in vec2 pass_texCoords;
      in vec3 mvVertexPosition;
      in vec3 mvVertexNormal;
      out vec4 out_colour;
      struct Material
      {
          int hasNormalMap;
          int hasTexture;
          vec3 diffuse;
          vec3 ambient;
          vec3 specular;
          float reflectivity;
      };
      struct PointLight
      {
          vec3 position;
          vec3 colour;
          float intensity;
      };    
      uniform sampler2D our_texture;
      uniform Material material;
      uniform vec3 ambientLight;
      uniform float specularPower;
      uniform PointLight pointLight;
      uniform vec3 viewer_position;
      vec4 calculateLight(PointLight light, Material material, vec3 position, vec3 normal)
      {
      // AMBIENT
      vec3 ambient = ambientLight * light.colour;
      // DIFFUSE
      vec3 norm = normalize(normal);
      vec3 lightDir = normalize(light.position - position);
      float diff = max(dot(norm, lightDir), 0.0);
      vec3 diffuse = diff * light.colour;  
      // SPECULAR
      vec3 viewDir = normalize(viewer_position - position);
      vec3 reflectDir = reflect(-lightDir, norm);
      float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);
      vec3 specular = specularPower * spec * light.colour;
      vec3 result = (ambient + diffuse + specular);
      return vec4(result, 1.0);
      }
      void main()
      {
      vec4 lightResult = calculateLight(pointLight, material, mvVertexPosition, mvVertexNormal);
      out_colour = texture(our_texture, pass_texCoords) * lightResult;
      }
       
      The light source is coming from the cube in the red circle. Even the first picture the light isnt directly under the cube. If I don't move my camera and have the cube light source move around automatically the the light will stay with it. It's only if I move the camera that I get problems. The second picture i've moved my camera to the left and the light is moving with me and moving away from the cube light source.


    • By iradicator
      I'm adding shadow volume support into my engine (graphics backend written in OpenGL 4.5).

      Depth Pass was working fine and to deal with shadows when the camera placed inside a shadow volume - I've decided to use Carmack's Reverse (Depth Fail).

      I'm getting weird errors and I wanted to make sure I'm working with a good model (I'm using the Stanford Bunny / Dragon) before I continue to debug my algorithm.

      Depth Pass (working fine):


      Depth Fail (artifacts):


      I then positioned the camera inside the bunny and realized that the artifacts are actually triangles that aren't being culled (they facing the camera and the light source so they shouldn't be culled):
      Note: The bunny in this picture is the 2nd bunny behind the one in the previous picture - the camera is inside the first bunny in the picture above!


      I added a simple geom shader to paint front faces in green and back faces in blue. As you can see, This "patch" looks weird as some of the triangles facing the camera and some facing away from it - which might explain the artifact...


      Maybe the model is incorrect? I'm adding here the gltf I'm using (Bunny.gltf).
      Bunny.gltf

      I'm using silhouette extrusion to calculate the shadow volumes. I calculate the silhouette by using adjacency triangle toplogy (I'm calculating it once when loading the model) - and find edges that go around the light facing triangles (I'm using face normals for this calculation - I found it to yield better results then interpolated model normals). Would love to hear your thoughts about this method.

      Thank you for your help!
    • By Uttam Kushwah
      Hello everyone i am trying to make some simpleton game but having trouble with bullet objects behavior.
      in my game scene there is terrain shape for open world(which are nasty for now) and i am shooting some balls to check how terrain is doing. But some balls hit 
      the terrain and some phase through so i don't know what to do or where exactly to dig.
       
      you can see the problem here 
      i know video quality is bad but bare it for now please i still newbie for uploading.
      i guess you will get some clue what i am going through.
      Thanks in advance.
       
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!