glutBitmapCharacter 在旧版本中有效,但不再

问题描述 投票:0回答:1

我正在恢复 2004 年的一些遗留 OpenGL 代码。在这个过程中,字母的显示停止工作。 glutBitmapCharacter 不起作用,它默默地失败并且什么也没有出现。显然,20 年来图书馆发生了微妙的变化。 使用 BeginDataStrip / EndDataStrip 的代码会像往常一样显示,但任何涉及 glutBitmapCharacter 的内容都是不可见的。

这是一个小测试程序,演示了同样的问题。请问,如何才能让第 45 行指定的字母“A”真正出现?

环境:MacOS 14.2.1、VSCode 1.98.1、llvm 工具链。

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Gl_Window.H>
#include <FL/gl.h>
#include <GLUT/GLUT.h>

void glutWireSphere (GLdouble radius, GLint slices, GLint stacks);

class MyGlWindow : public Fl_Gl_Window {
private:
    float blue;
public:
    MyGlWindow(int x, int y, int w, int h, float bblue = 0.0f, 
                const char* l = 0) : Fl_Gl_Window(x, y, w, h, l) {
        blue = bblue;
    }

    void draw() override {
        if (!valid()) {
            glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
            glViewport(0, 0, w(), h());
            glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 5.0);
            glEnable(GL_DEPTH_TEST);
            valid(1);
        }

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();

        // Set up the camera
        gluLookAt(0.0, 0.0, 4.5,  // eye position
                  0.0, 0.0, 0.0,  // look-at position
                  0.0, 1.0, 0.0); // up direction

        // Draw a sphere
        glColor3f(0.5, 1.0, blue);
        glutWireSphere(0.8, 20, 20);
        // NOT WORKING:
        glRasterPos2f(0.5, 0.4);
        glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, 'A');

        glFlush();
    }
};

int main() {
    Fl_Window* window = new Fl_Window(400, 800, "FLTK Sphere Example");
    MyGlWindow* glWindow = new MyGlWindow(10, 20, window->w() - 20, 400 - 20, 0.0);
    window->resizable(window);
    window->end();
    window->show();
//    Fl_Widget * const *kids = tab1.array();
    return Fl::run();
}
c++ macos opengl glut fltk
1个回答
0
投票

更换: #包括 经过: #包括 #包括

© www.soinside.com 2019 - 2024. All rights reserved.