2014-11-04 20 views
0

我必須使用opengl(舊版本)製作一些3D圖形。我創建了3 GL_POLYGON矩形,它們相互連接並且具有不同的顏色。在opengl底部重疊直線和裁剪

我的問題是,當圖旋轉時,最後添加的顏色(最後添加的矩形)始終高於其他顏色。例如,青色的是粉紅色和黃色的,粉紅色的是黃色的。我還注意到在圖的底部有一些裁剪,我認爲這是由gluPerspective()造成的。我試圖實現的目光是從z +到中心以及圍繞y +軸旋轉的圖形(我認爲我設法做到這一點),並且還刪除了重疊和剪輯。

任何想法爲什麼發生這種情況,以及如何解決它?

的代碼波紋管:

#include <GL/glfw.h> 

int main() 
{ 
int  width, height; 
int  frame = 0; 
bool running = true; 

glfwInit(); 

if(!glfwOpenWindow(700, 800, 0, 0, 0, 0, 0, 0, GLFW_WINDOW)) 
{ 
    glfwTerminate(); 
    return 0; 
} 

glfwSetWindowTitle("GLFW Application"); 

while(running) 
{ 
    frame++; 

    glfwGetWindowSize(&width, &height); 
    height = height > 0 ? height : 1; 

    glViewport(0, 0, width, height); 

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
    glClear(GL_COLOR_BUFFER_BIT); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(65.0f, (GLfloat)width/(GLfloat)height, 1.0f, 100.0f); 


    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt(0.0f, 0.0f, 40.0f, 
      0.0f, 0.0f, 0.0f, 
      0.0f, 1.0f, 0.0f); 


    glRotatef(frame, 0.0f, 1.0f, 0.0f); 


    glColor3ub(255,255,0); 
    glBegin(GL_POLYGON); 
     glVertex3f(5.0f, 0.0f, 0.0f); 
     glVertex3f(0.0f, 0.0f, 0.0f); 
     glVertex3f(0.0f, 10.0f, 0.0f); 
     glVertex3f(5.0f, 10.0f, 0.0f); 
    glEnd(); 
    glColor3ub(255,0,255); 
    glBegin(GL_POLYGON); 
     glVertex3f(5.0f, 0.0f, -2.0f); 
     glVertex3f(0.0f, 0.0f, -2.0f); 
     glVertex3f(0.0f, 10.0f, -2.0f); 
     glVertex3f(5.0f, 10.0f, -2.0f); 
    glEnd(); 
    glColor3ub(0,255,255); 
    glBegin(GL_POLYGON); 
     glVertex3f(5.0f, 0.0f, 0.0f); 
     glVertex3f(5.0f, 0.0f, -2.0f); 
     glVertex3f(5.0f, 10.0f, -2.0f); 
     glVertex3f(5.0f, 10.0f, 0.0f); 
    glEnd(); 

    glfwSwapBuffers(); 

    running = !glfwGetKey(GLFW_KEY_ESC) && glfwGetWindowParam(GLFW_OPENED);} 

glfwTerminate(); 

return 0; 
} 
+0

0/10和潛入一點文件... – 2014-11-04 19:47:35

+0

@jp我試過文件,我只是無法將我的頭圍繞所有的東西。如果沒有先看看這些東西,我就不會尋求幫助。 – ama 2014-11-04 19:50:03

+2

我沒有在你的代碼中看到深度特徵,嘗試尋找'深度緩衝區'和'GL_DEPTH_TEST',如果沒有實施,繪製順序規則... – 2014-11-04 20:42:33

回答

2

我看不出深淺的功能在你的代碼,試圖尋找depth bufferGL_DEPTH_TEST,如果不執行,繪製順序規則..