2016-04-10 14 views
1

Yürütme sırasında arka plan daha koyu mavi renkte oluşturulmalı, ancak açıkça bir şeyleri kaçırdım. Pencere bunun yerine hemen arkasındaki görüntünün aynısı olan bir arka plan ile işlenir (ör., Diğer açık pencereler veya masaüstü, vb.). Sorunu tanımlayamıyorum.Neden bu OpenGL bağlamında oluşturulan pencere şeffaf olarak açılır?

Şu anda derleme sırasında herhangi -std kullanmıyorum ve ben çıkış yürütülebilir ile aşağıdaki bağlantıları kullanarak ediyorum:

#include <stdio.h> 
#include <stdio.h> 

#include <GL/glew.h> 

#include <GLFW/glfw3.h> 
GLFWwindow* window; 

#include <glm/glm.hpp> 
using namespace glm; 

int main(void) 
{ 

    //Initialize GLFW 
    if(!glfwInit()) 
    { 
     fprintf(stderr, "Failes to intialize GLFW\n"); 
     return -1; 
    } 

    glfwWindowHint(GLFW_SAMPLES, 4); // 4x antialiasing 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); 
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); 
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 

    // Open a Window and create it's OpenGL context 
    window = glfwCreateWindow(1024, 768, "playground", NULL, NULL); 
    if(window == NULL) { 
     fprintf(stderr, "Failed to open GLFW window.\n"); 
     glfwTerminate(); 
     return -1; 
    } 

    glfwMakeContextCurrent(window); 
    glewExperimental = true; 
    if (glewInit() != GLEW_OK) { 
     fprintf(stderr, "Failed to initialize GLEW\n"); 
     return -1; 
    } 

    glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE); 

    // Dark blue background 
    glClearColor(0.0f, 0.0f, 0.4f, 0.0f); 

    do{ 

     glfwSwapBuffers(window); 
     glfwPollEvents(); 

    } 

    while(glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS && 
      glfwWindowShouldClose(window) == 0); 

    glfwTerminate(); 

    return 0; 

} 

I: Burada

-lGL -lGLU -lGLEW -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXcursor -lXinerama 

benim .cpp dosyasının içeriğini şunlardır bir OpenGL yeni üyesiyim. Her şeyden önce yapıya dikkat çekmekte veya bir şey tamamen yeniden yazılmalı/yeniden yazılmalıdır. Teşekkürler!

cevap

4

Sadece kendi hale döngü içinde pencerenizi temizlemek için unuttum:

do{ 

    glClear(GL_COLOR_BUFFER_BIT); // Clear background with clear color. 
    glfwSwapBuffers(window); 
    glfwPollEvents(); 

} 
while(glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS && 
     glfwWindowShouldClose(window) == 0); 

glClear genellikle her çalışmaya size yeni taze bir çerçeve vererek OpenGL kullanılarak döngü işlemek ilk çağrı biridir. `playground.cpp:

+0

aşağıdaki hata aldı 55: 17: hatası: çok az argümanlar işlev‘boşluk glClear (GLbitfield)’ glClear(); // Açık renkle arka planı temizle. 0: 8: dosyasında ^ playground.cpp kürsüde yer /usr/include/GL/glew.h:850:23: not: Burada bildirilen GLAPI geçersiz GLAPIENTRY glClear (GLbitfield maskesi); karşılık ' Buna, glclc() ile GL_COLOR_BUFFER_BIT argümanını geçtim ve şimdi her şey yolunda gidiyor. Bunun, bu hatanın tek cevabı olmadığını kabul ediyorum. Eğer öyleyse, başka argümanlar yeterli olurdu/neden bu bir işe yaradı? – zzz

+0

@liamwilt Doğru, argümanı unuttum: "GL_COLOR_BUFFER_BIT". Genellikle bu işlev hem renk tamponunu hem de derinlik arabelleğini temizlemek için kullanılır, böylece 'glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); – Aracthor

İlgili konular