我最近才开始使用 OpenGL,或者更确切地说是尝试进入它。我找到了一个相当不错的教程,不幸的是,它的 GLFW 版本非常过时。我正在使用 Visual Studio 2012、64 位、glew(64 位文件)、glfw3(64 位文件)并将我的项目编译为 64 位。
到目前为止,由于现在函数名称不同等原因,我不得不更改代码的一些部分。
我目前的问题是,我确实打开了两个窗口......一个以我的项目目录为标题,一个名为“第一个窗口”,因为我在我的创建代码中有它(见下文)。两个窗口都没有按应有的方式渲染三角形,而且“第一个窗口”窗口似乎使整个事物卡住了。它只是无休止地加载。
我不得不承认到目前为止我对 OpenGL 的了解不多,这就是为什么我在这里问出了什么问题。
OpenGL.cpp 文件的代码(如果需要任何其他文件,我将添加它们):
#include "OpenGL.h"
// put that globaly cause functions outside of Init require the pointer but won't
// take it otherwise for me
GLFWwindow* windowOne;
OpenGL::OpenGL(int w, int h)
{
width = w;
height = h;
Init();
}
OpenGL::~OpenGL()
{
glfwTerminate();
}
void OpenGL::Init()
{
glfwInit();
// Window should be created here
windowOne = glfwCreateWindow(width,height,"FirstWindow",NULL,NULL);
running = true;
glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
}
void OpenGL::MainLoop()
{
do
{
glfwGetWindowSize(windowOne, &width, &height);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Update();
Draw();
glFlush();
glfwSwapBuffers(windowOne);
}
while(running);
}
void OpenGL::Update()
{
if(glfwGetKey(windowOne, GLFW_KEY_ESCAPE) || !glfwGetWindowAttrib(windowOne, GLFW_FOCUSED))
{
running = false;
}
}
void OpenGL::Draw()
{
glBegin(GL_TRIANGLES);
glVertex3f( 0.0f, 1.0f, 0.0f);
glVertex3f( 1.0f,-1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glEnd();
}
有问题的教程是http://www.hightech-journal.net/opengl-tutorial-02-das-erste-polygon。它是德文的,所以我不知道它是否对每个人都有很大帮助,特别是因为 glfw 版本已经过时,正如我上面提到的。
我很乐意在需要时提供任何进一步的信息。
我可以想象我对指针的全局定义造成了麻烦。事情是,在需要指针的 Init 之外的其他函数将其称为未声明之前(奇怪的是,并非所有函数),所以因为我不想在全局声明它的函数上重做(并且可能破坏)太多。
编辑:以上是我的 openGL.cpp 其他文件:
openGL.h:
#include "main.h"
class OpenGL
{
public:
OpenGL(int w, int h);
~OpenGL();
void MainLoop();
private:
void Init();
void Update();
void Draw();
bool running;
int width;
int height;
};
main.h(一个简短的):
#include <stdlib.h>
#include "GL/glfw3.h"
主.cpp:
#include "main.h"
#include "OpenGL.h"
int main(int argc, char **argv)
{
OpenGL* ogl = new OpenGL(800,600);
ogl->MainLoop();
delete ogl;
return 0;
}
希望这有助于解决它。