转换c++;C#OpenTK的OpenGL代码 我在C++中用OpenGL解决了一点,但是我想用我更熟悉的语言来测试它。
我从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,
#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);
}
}
}
}