2016-02-25 2 views
4

Я пытаюсь заставить OpenGL работать с gtk +. Казалось, что рабочий размер я смог очистить цвет фона. Однако, когда я пошел рисовать что-то, его там нет. Я что-то упускаю. Я смотрю на 10, 10, 10, и я смотрю на происхождение. Я должен увидеть задний треугольник около источника.OpenGL с Gtk +, формы не рисуются, несмотря на очищение фона

#include <gtk/gtk.h> 
#include <GL/gl.h> 
#include <GL/glu.h> 
#include <iostream> 

GtkWidget* wnd; 
GtkWidget* glarea; 

static gboolean render(GtkGLArea *area, GdkGLContext *context) 
{ 
    int w = gtk_widget_get_allocated_width(GTK_WIDGET(area)); 
    int h = gtk_widget_get_allocated_height(GTK_WIDGET(area)); 
    glViewport(0, 0, w, h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(180, (double)w/(double)h, 0.1, 100.0); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt(10, 10, 10, 0, 0, 0, 0, 1, 0); 

    glClearColor(1, 1, 1, 0); 
    glClear(GL_COLOR_BUFFER_BIT); 

    glColor3f(0, 0, 0); 
    glBegin(GL_TRIANGLES); 
    glVertex3f(0, 0, 0); 
    glVertex3f(-1, 2, -1); 
    glVertex3f(1, 3, 2); 
    glEnd(); 

    return TRUE; 
} 

int main(int argc, char *argv[]) 
{ 
    gtk_init(&argc, &argv); 
    wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    glarea = gtk_gl_area_new(); 

    gtk_container_add(GTK_CONTAINER(wnd), glarea); 
    g_signal_connect(wnd, "destroy", gtk_main_quit, 0); 

    g_signal_connect(glarea, "render", G_CALLBACK(render), NULL); 

    gtk_widget_show_all(wnd); 
    gtk_main(); 
    return 0; 
} 
+0

Почему 180 градусов FOV вместо чего-то вроде 60 или 90? – genpfault

+0

Мне было 60 лет. Я открыл его, чтобы посмотреть, смогу ли я найти форму. Имел ту же проблему с 60 – chasep255

+0

. Ваш [код рисования ядра в GLUT MCVE (с исправлением FOV)] (http://pastebin.com/qaDRT4Cy) кажется [отлично работает] (http: //i.stack.imgur .com/fIusx.png) в моей системе. – genpfault

ответ

1

Источник: Emanuele Bassi's blog - GTK+ developer

[...] The OpenGL support inside GTK+ requires core GL profiles, and thus it won’t work with the fixed pipeline API that was common until OpenGL 3.2 and later versions. this means that you won’t be able to use API like glRotatef(), or glBegin()/glEnd() pairs, or any of that stuff.

Решение: отбросим функцию фиксированного конвейера.

Смежные вопросы