0

コンパイラーに C としてコンパイルするように指示するとコンパイルされますが、設定をデフォルト (C++ としてコンパイルする) に設定するとコンパイルされないため、コードの問題ではありません。C++としてコンパイルすると、「glClearへの未定義参照」の行に沿って多数のエラーが発生します

Microsoft の Visual Studio C++ コンパイラを使用しています。私はすべてを適切にリンクしています。

コードは次のとおりです。

#include <GL/glut.h>
#include <GL/freeglut.h>
#include <GL/gl.h>



void display(void)
{
    /* Clear all pixels */
    glClear(GL_COLOR_BUFFER_BIT);

    /*  draw white polygon (rectangle) with
     *  corners at (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)
     */

    glColor3f(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();

    /*  don't wait!
     *  start processing buffered OpenGL routines
     */

        glFlush();
}

void init(void)
{
    /* Select clearing background color */
    glClearColor(0.0, 0.0, 0.0, 0.0);

    /* Initialize viewing values */
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}


/*
* Declare initial window size, position, and display mode
* (single buffer and RGBA). Open window with “hello”
* in its title bar. Call initialization routines.
* Register callback function to display graphics.
* Enter main loop and process events.
*/
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(250, 250);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("hello");
    init();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0; /* ISO C requires main to return int. */
}

また、誰かが C++ で OpenGL を学習するための適切なリソースを持っている場合は、それをお勧めできますか?

4

2 に答える 2

2

glClear現在インクルードされているヘッダー ファイルのいずれにも が宣言されていない可能性があります。C では、宣言されていない関数は、多くの場合、引数に基づいて特定の型を持ち、int. そのため、C でコンパイルすると、宣言されていないという警告が表示される場合があります (警告を有効にして、コンパイル時に警告を読んでいただければ幸いです)。

C++ は、宣言されていない関数に対してより厳密です。

于 2012-04-26T03:45:23.857 に答える
1

Alexadre Jasmin と Bart が指摘したように、OpenGL ライブラリを正しくリンクしていることを確認してください。私が使う

-lGLU -lGL -lglut
ubuntuでfreeglutを使用。

それでも問題が解決しない場合は、追加してみてください

#GLUT_DISABLE_ATEXIT_HACK を定義
cpp ファイルの先頭にあります。

于 2012-04-26T04:12:42.777 に答える