单击时如何在 OpenGL/OpenTK 中显示三角形的长度?

时间:2021-06-07 07:38:14

标签: opengl opentk

我有一个关于 OpenGL/OpenTK 的问题。假设我已经在 OpenGL/OpenTK 窗口中绘制并显示了一个简单的三角形(比如说一个等边三角形)。

现在,假设我想通过单击三角形来知道三角形的长度,并在窗口上显示长度值(虽然我可以手动计算它)。有没有办法实现这一目标?不一定是长度,也可以是坐标。

如果您知道如何实现这一点,请告诉我。


** 这是我的代码 *****


我正在创建一个名为 tryOpenTK(在 C# 中)的项目。这是名为 Game2D 的类。

using System;
using OpenTK;
using OpenTK.Graphics.OpenGL;

namespace tryOpenTK
{
    public class Game2D
    {
        GameWindow window;
        
        public Game2D(GameWindow wd)
        {
            this.window = wd;
            start();
        }
        
        public void start()
        {
            window.Load += loaded;
            window.Resize += resize;
            window.RenderFrame += renderFrame;  // place where you draw something
            window.Run(1.0 / 60.0);    // frame rate - 60 times per second
        }
        
        public void loaded(object o,EventArgs e)
        {
            GL.ClearColor(0.0f,0.0f,0.0f,0.0f);
        }
        
        public void renderFrame(object o,EventArgs e)   // to draw something
        {
            GL.LoadIdentity();
            GL.Clear(ClearBufferMask.ColorBufferBit);
            GL.Begin(BeginMode.Triangles);  // tell openGL to draw some primitive shapes
            GL.Color3(1.0, 0.0, 0.0);   // specify the red color for triangle using RGB 
            GL.Vertex2(1.0, 1.0);
            GL.Vertex2(49.0, 1.0);
            GL.Vertex2(25.0, 49.0);
            GL.End();
            window.SwapBuffers();
        }
        
        public void resize(object o,EventArgs e)
        {
            GL.Viewport(0, 0, window.Width, window.Height); 
            GL.MatrixMode(MatrixMode.Projection);            
     GL.LoadIdentity(); 
            GL.Ortho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);  
            GL.MatrixMode(MatrixMode.Modelview); 
        }        
    }
}

*** 这是主函数 **

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenTK;

namespace tryOpenTK
{
    class Program
    {
        static void Main(string[] args)
        {
            var window = new GameWindow(500, 500);
            var gm = new Game2D(window);
            Console.WriteLine();
            Console.WriteLine("Press enter to finish...");
            Console.ReadLine();
        }
    }
}

0 个答案:

没有答案