在FLTK中使用GLUT
Using GLUT in FLTK
我的应用程序由常规的FLTK小部件(按钮等)和一个OpenGL窗口组成。我的目的是使用GLUT在这个OpenGL窗口中绘制。按照此处的说明:
您应该能够通过包含以下内容来编译现有的 GLUT 源代码 而不是。这可以通过编辑 源,通过将 -I 开关更改为编译器,或通过提供 从 GL/glut.h 到 FL/glut.H 的符号链接。
我已经做了同样的事情,但我收到以下链接错误:
1>Main.obj : error LNK2001: unresolved external symbol __imp__glClear@4
1>fltkgl.lib(Fl_Gl_Window.obj) : error LNK2001: unresolved external symbol __imp__glClear@4
1>Main.obj : error LNK2001: unresolved external symbol __imp__glClearColor@16
1>Main.obj : error LNK2001: unresolved external symbol __imp__glFlush@0
1>fltkgl.lib(Fl_Gl_Window.obj) : error LNK2001: unresolved external symbol __imp__glFlush@0
1>Main.obj : error LNK2001: unresolved external symbol __imp__glLoadIdentity@0
1>fltkgl.lib(Fl_Gl_Window.obj) : error LNK2001: unresolved external symbol __imp__glLoadIdentity@0
1>fltkgl.lib(Fl_Gl_Window.obj) : error LNK2001: unresolved external symbol __imp__glReadBuffer@4
1>fltkgl.lib(Fl_Gl_Window.obj) : error LNK2001: unresolved external symbol __imp__glDrawBuffer@4
1>fltkgl.lib(Fl_Gl_Window.obj) : error LNK2001: unresolved external symbol __imp__glOrtho@48
1>fltkgl.lib(Fl_Gl_Window.obj) : error LNK2001: unresolved external symbol __imp__glViewport@16
1>fltkgl.lib(Fl_Gl_Window.obj) : error LNK2001: unresolved external symbol __imp__glGetIntegerv@8
1>fltkgl.lib(Fl_Gl_Window.obj) : error LNK2001: unresolved external symbol __imp__wglSwapLayerBuffers@8
1>fltkgl.lib(Fl_Gl_Window.obj) : error LNK2001: unresolved external symbol __imp__glCopyPixels@20
1>fltkgl.lib(Fl_Gl_Window.obj) : error LNK2001: unresolved external symbol __imp__glRasterPos2i@8
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__glRasterPos2i@8
1>fltkgl.lib(Fl_Gl_Window.obj) : error LNK2001: unresolved external symbol __imp__glDisable@4
1>fltkgl.lib(Fl_Gl_Window.obj) : error LNK2001: unresolved external symbol __imp__wglRealizeLayerPalette@12
1>fltkgl.lib(Fl_Gl_Choice.obj) : error LNK2001: unresolved external symbol __imp__wglShareLists@8
1>fltkgl.lib(Fl_Gl_Choice.obj) : error LNK2001: unresolved external symbol __imp__wglCreateContext@4
1>fltkgl.lib(Fl_Gl_Choice.obj) : error LNK2001: unresolved external symbol __imp__wglCreateLayerContext@8
1>fltkgl.lib(Fl_Gl_Choice.obj) : error LNK2001: unresolved external symbol __imp__wglMakeCurrent@8
1>fltkgl.lib(Fl_Gl_Choice.obj) : error LNK2001: unresolved external symbol __imp__wglDeleteContext@4
1>fltkgl.lib(Fl_Gl_Device_Plugin.obj) : error LNK2001: unresolved external symbol __imp__glPopClientAttrib@0
1>fltkgl.lib(Fl_Gl_Device_Plugin.obj) : error LNK2001: unresolved external symbol __imp__glReadPixels@28
1>fltkgl.lib(Fl_Gl_Device_Plugin.obj) : error LNK2001: unresolved external symbol __imp__glPixelStorei@8
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__glPixelStorei@8
1>fltkgl.lib(Fl_Gl_Device_Plugin.obj) : error LNK2001: unresolved external symbol __imp__glPushClientAttrib@4
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__glListBase@4
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__glGenLists@4
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__glDeleteLists@8
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__glCallLists@12
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__wglUseFontBitmapsW@16
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__glRasterPos2f@8
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__glEnd@0
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__glVertex2i@8
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__glBegin@4
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__glColor3ub@12
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__glIndexi@4
1>fltkgl.lib(gl_draw.obj) : error LNK2001: unresolved external symbol __imp__glDrawPixels@20
1>D:SkunkworksSnake3DSnake3DReleaseSnake3D.exe : fatal error LNK1120: 35 unresolved externals
当我使用 FreeGLUT 时,该程序正在正确编译。更改标头以使用 FLTK 版本的 GLUT 后,我遇到了这些问题。我正在使用Microsoft Visual Studio 10,并添加了以下静态库作为"其他Depedencies":
freeglut.lib glew32.lib fltk.lib fltkgl.lib
我做错了什么?另外,如何使用 GLUT 绘制我的Fl_Gl_Window?
这是我的程序:
// Make the GUI here
#define WIN32
#include <GL/glew.h>
#include <FL/glut.H>
#include <FL/glu.h>
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Color_Chooser.H>
#include <FL/Fl_Gl_Window.H>
#include <FL/Fl_Menu_Bar.H>
#include <FL/fl_draw.H>
#include <FL/Fl_Button.H>
class Block
{
public:
Block(int x, int y, int z)
{
xyz[0] = x;
xyz[1] = y;
xyz[2] = z;
}
int getX(){ return xyz[0];}
int getY(){ return xyz[1];}
int getZ(){ return xyz[2];}
void setX(int x){ xyz[0]=x;}
void setY(int y){ xyz[1]=y;}
void setZ(int z){ xyz[2]=z;}
private:
int xyz[3];
};
// Snake is an array blocks.
Block* snake;
// Mouse is a single block
Block* mouse;
class GlWindow : public Fl_Gl_Window
{
public:
// Call back for draw
void draw()
{
// Get the current state of the universe and draw it
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // Clear the background of our window to red
glClear(GL_COLOR_BUFFER_BIT); //Clear the colour buffer (more buffers later on)
glLoadIdentity(); // Load the Identity Matrix to reset our drawing locations
//glutSolidCube(5);
glFlush(); // Flush the OpenGL buffers to the window
}
// To handle key-events
void handle()
{
}
// Constructor
GlWindow(int X, int Y, int W, int H, const char* L=0): Fl_Gl_Window(X,Y,W,H,L)
{
}
};
void buildGUI(int argc, char** argv)
{
// Main Window
Fl_Double_Window *window = new Fl_Double_Window(800,500);
window->label("Snake3D");
window->color(FL_LIGHT3);
window->begin();
// Menu Bar
Fl_Menu_Bar* menubar = new Fl_Menu_Bar(0,0,800,30);
menubar->color(FL_LIGHT3);
menubar->down_color(fl_rgb_color(0,145,255));
menubar->box(FL_THIN_UP_BOX);
menubar->add("File/Exit");
menubar->add("Help/About");
// OpenGL Window
GlWindow* gameWindow = new GlWindow(200,30,600,470);
// Start Button
Fl_Button* startButton = new Fl_Button(50,200,100,30,"Start");
Fl_Button* pauseButton = new Fl_Button(50,300,100,30,"Pause");
window->show();
window->end();
Fl::run();
}
int main(int argc, char ** argv)
{
// Build GUI
buildGUI(argc,argv);
}
这与 GLUT 无关。
所有这些功能都是OpenGL 1.1和Windows专用窗口系统API(WGL)的一部分。
要解决此问题,只需将opengl32.lib
添加到您的库中即可。
但是,几乎每个函数都被弃用了,如果可移植性是一个问题,您可以考虑寻找 FLTKGL 的现代替代方案。
相关文章:
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- 使用 GLUT 使用键停止动画?
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- OpenGL Glut显示功能在Mojave上显示黑屏
- GLUT 无法获得米利斯精度的时间
- 使用 fltk 时,文本未显示在已编译的窗口中
- 如何在单击按钮FLTK的确切时刻获得小部件的值
- GLUT 问题:重新声明 c++ 内置类型'wchar_t'时出错
- 在macOS上编译GLEW和GLUT?
- 我在窗口中有一个fltk Fl_Choice下拉菜单,但只能通过鼠标使用
- 在 CLion (MacOS) 中使用 OpenGL 和 GLUT 库时出现链接错误
- FLTK:窗口在 MacOS 上获得焦点时的事件
- 带有代码块的 FLTK 错误
- 如何使用Stroustrup的Fltk Text类调用变量?
- 带 GLUT 的黑屏?
- 如何将整个C Glut程序编写为可以在另一个程序中调用的函数
- 尝试在 c++ 中的 Fltk GUI 中右键单击
- 在FLTK中使用GLUT