1

私は大学で OpenGL/C の作業を少ししています (WebGL の経験があります)。以下のコードは、主に gltut チュートリアル (OSX では実行されません - OGL 3.3 が必要です) と NeHe チュートリアルに基づいています。私の問題は、何があっても、最初のウィンドウが 1 つの色で塗りつぶされていることだけです (while ループで色を変更すると、ループが正しく実行されます)。ただし、三角形と四角形はまったく表示されません。過去 5 時間にわたってトラブルシューティングを行ってきましたが、開始時よりも進んでいません。どんな助けでも大歓迎です!

使用: OpenGL3.2、最新の GLFW (2.7.7)

コンパイル: gcc main.c -I/usr/local/include -I/opt/X11/include -L/usr/local/lib -I/opt/X11/lib -w -framework OpenGL -framework Cocoa -framework IOKit -lglfw -o テスト

以下の私のコメントのコードは機能します。

4

3 に答える 3

2

You do not appear to be initialising your matrices - neither the projection, nor the modelview.

And even if the default matrices were, by chance, reasonable for your purposes, you then continually apply translations, which will very quickly result in things being off-screen anyway.

于 2013-03-11T21:36:34.140 に答える
0

私は同じ問題に遭遇しました。VBO の前に VAO を作成する必要がありましたが、OS X で動作するようになりました。

GLuint vertex_array;
glGenVertexArrays(1, &vertex_array);
glBindVertexArray(vertex_array);
于 2013-04-12T00:07:32.817 に答える
0

以下のコードを修正しました (3.2 OGL コンテキスト ビットは機能しないためコメント化されています - 上記のように空白の画面):

//c-libs
#include <stdlib.h>

//opengl
#include <OpenGL/gl3.h>
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>

//glfw
#define GLFW_INCLUDE_GL3  /* don't drag in legacy GL headers. */
#define GLFW_NO_GLU       /* don't drag in the old GLU lib - unless you must. */
#include <GL/glfw.h>



int init() {
    //init glfw
    if( !glfwInit() )
        return -1;


    //DOES NOT WORK
    //set to version 3.2 & use core profile
    //glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
    //glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
    //glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    //glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    /* Create a windowed mode window and its OpenGL context */
    if (!glfwOpenWindow(1000, 500, 5, 6, 5, 0, 0, 0, GLFW_WINDOW))
        return -1;

    glfwSetWindowTitle( "My Amazing Super Fantastic Window" );


    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    float aspect_ratio = ((float)1000) / 500;
    glFrustum(.5, -.5, -.5 * aspect_ratio, .5 * aspect_ratio, 1, 50);
    glMatrixMode(GL_MODELVIEW);

    return 1;
}

int main(int argc, char *argv[])
{
    if( !init() )
        return -1;

    /* Loop until the user closes the window */
    int running = GL_TRUE;
    while (1)
    {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        // reset view matrix
        glLoadIdentity();
        // move view back a bit
        glTranslatef(0, 0, -30);
        // by repeatedly rotating the view matrix during drawing, the
        // squares end up in a circle
        int i = 0, squares = 15;
        float red = 1, blue = 1, green = 1;
        for (; i < squares; ++i){
            glRotatef(360.0/squares, 0, 0, 1);
            glBegin(GL_QUADS); {
                glColor3f(red, green, blue);
                glVertex2i(1, 11);
                glColor3f(red * .8, green * .8, blue * .8);
                glVertex2i(-1, 11);
                glColor3f(red * .5, green * .5, blue * .5);
                glVertex2i(-1, 9);
                glColor3f(red * .8, green * .8, blue * .8);
                glVertex2i(1, 9);
            } glEnd();
        }


        /* Swap front and back buffers and process events */
        glfwSwapBuffers();
    }

    return 0;
}
于 2013-03-12T11:37:50.617 に答える