加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用Gtk的OpenGL,尽管背景被清除,但仍未绘制形状

发布时间:2020-12-16 07:15:39 所属栏目:百科 来源:网络整理
导读:我想让OpenGL与gtk一起工作.它似乎是工作尺寸我能够清除背景颜色.然而,当我去绘画时,它不存在.我错过了什么.我把眼睛放在10,10,我正在看原点.我应该在原点附近看到一个后三角形. #include gtk/gtk.h#include GL/gl.h#include GL/glu.h#include iostreamGtkWi
我想让OpenGL与gtk一起工作.它似乎是工作尺寸我能够清除背景颜色.然而,当我去绘画时,它不存在.我错过了什么.我把眼睛放在10,10,我正在看原点.我应该在原点附近看到一个后三角形.

#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,w,h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(180,(double)w / (double)h,0.1,100.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(10,1,0);

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

    glColor3f(0,0);
    glBegin(GL_TRIANGLES);
    glVertex3f(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;
}

解决方法

资料来源: 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.

解决方案:删除固定功能管道.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读