转换c++;C#OpenTK的OpenGL代码 我在C++中用OpenGL解决了一点,但是我想用我更熟悉的语言来测试它。

转换c++;C#OpenTK的OpenGL代码 我在C++中用OpenGL解决了一点,但是我想用我更熟悉的语言来测试它。,c#,c++,opengl,opentk,C#,C++,Opengl,Opentk,我从OpenGL红皮书(据我所知,这是第一本红皮书)中选取了一个例子,如下所示: #include <whateverYouNeed.h> main() { InitializeAWindowPlease(); glClearColor (0.0, 0.0, 0.0, 0.0); glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glOrtho(0.0, 1.0, 0.0, 1.0,

我从OpenGL红皮书(据我所知,这是第一本红皮书)中选取了一个例子,如下所示:

#include <whateverYouNeed.h>

main() {

   InitializeAWindowPlease();

   glClearColor (0.0, 0.0, 0.0, 0.0);
   glClear (GL_COLOR_BUFFER_BIT);
   glColor3f (1.0, 1.0, 1.0);
   glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
   glBegin(GL_POLYGON);
      glVertex3f (0.25, 0.25, 0.0);
      glVertex3f (0.75, 0.25, 0.0);
      glVertex3f (0.75, 0.75, 0.0);
      glVertex3f (0.25, 0.75, 0.0);
   glEnd();
   glFlush();

   UpdateTheWindowAndCheckForEvents();
}

现在我假设这会像OpenGL示例那样在黑色背景上显示一个白色框,但它似乎不起作用。。。我做错了什么?这是我的窗口处理吗?

你说的“它不工作”是什么意思?你的窗户是纯黑色的吗?是否调用了
RenderFrame
?是的,很抱歉,显示的窗口为纯黑色。是的,确实调用了renderframe,因为如果我注释掉
GL.Clear(ClearBufferMask.ColorBufferBit)我确实得到了白色框,大约50%的框位于正确的位置,但对于其他50%的框位于黑色窗口的左下角,但大小仍然正确,只是它的左下角与黑色窗口的左下角处于相同的位置-不像应该的那样居中。另外,当总账清除未注释时,方框显示约2帧,然后再也不会显示,第一帧方框位置不正确,第二帧方框位置正确,超过此框的所有帧均为完全黑色,因此,虽然它确实做了一些事情,但它没有做任何接近正确的事情。在GL.Ortho(…)之前添加GL.LoadIdentity()。重点是,你的渲染代码被调用了很多次,在C++实例中只调用了一次。你必须每次都重置矩阵,否则你积累了变换,一切看起来都错了。哦,对了,我明白了,是的,就是这样。当然,我不会点击来看到的,谢谢你的帮助。
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TEST2
{
    class Program
    {
        static void Main(string[] args)
        {
            using (GameWindow gameWindow = new GameWindow())
            {
                gameWindow.Load += (sender, e) =>
                {
                    gameWindow.VSync = VSyncMode.On;
                    gameWindow.Title = "Test";
                };

                gameWindow.Resize += (sender, e) =>
                {
                    GL.Viewport(0, 0, gameWindow.Width, gameWindow.Height);
                };

                gameWindow.UpdateFrame += (sender, e) =>
                {

                };

                gameWindow.RenderFrame += (sender, e) =>
                {
                    //Here's the main content of the 'converted' code
                    GL.ClearColor(0.0f,0.0f,0.0f,0.0f);
                    GL.Clear(ClearBufferMask.ColorBufferBit);
                    GL.Color3(1.0f, 1.0f, 1.0f);
                    GL.Ortho(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
                    GL.Begin(PrimitiveType.Polygon);
                        GL.Vertex3(0.25f, 0.25f, 0.0f);
                        GL.Vertex3(0.75f, 0.25f, 0.0f);
                        GL.Vertex3(0.75f, 0.75f, 0.0f);
                        GL.Vertex3(0.25f, 0.75f, 0.0f);
                    GL.End();
                    GL.Flush();
                    gameWindow.SwapBuffers();
                };

                gameWindow.Run(10);
            }
        }
    }
}