2016-09-01 72 views
0

試圖在openGL版本3.0中使用glut來繪製兩點之間的一條線。這是代碼。OpenGL沒有繪製任何圖形

#include <GL/glut.h> 
#include <stdio.h> 
#include <math.h> 
#include <iostream> 

using namespace std; 

void init(void) { 

    glClearColor(1.0,1.0,1.0,0.0); 
    glMatrixMode(GL_PROJECTION); 
    gluOrtho2D(0.0,30.0,0.0,30.0); 

} 

void setPixel(GLint x, GLint y) { 

    glClearColor(1.0,1.0,1.0,0.0); 
    glMatrixMode(GL_PROJECTION); 
    gluOrtho2D(0.0,30.0,0.0,30.0); 

} 

float roundValue(float v) { 

    return floor(v + 0.5); 
} 

void lineDDA(int xa, int ya, int xb, int yb) { 

    double dx = xb-xa, dy = yb-ya, steps; 
    float xInc, yInc, x = xa, y = ya;  
    if (abs(dx) > abs(dy)) 
     steps = abs(dx); 
    else 
     steps = abs(dy); 
    xInc = dx/(float)steps; 
    yInc = dy/(float)steps; 
    setPixel(x, y); 
    int k; 
    for (k = 0; k < steps; ++k) { 
     /* code */ 
     x += xInc; 
     y += yInc; 
     setPixel(roundValue(x), roundValue(y)); 
    } 
} 

void update() { 
    glClear(GL_COLOR_BUFFER_BIT); 
    glPointSize(5.0f); 
    glColor3f(1, 0, 0); 
    lineDDA(1, 1, 8, 7); 
    lineDDA(1, 1, 8, 2); 
    glFlush(); 
} 

int main(int argc,char **argv){ 

    glutInit(&argc,argv); 
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); 
    glutInitWindowPosition(200,100); 
    glutInitWindowSize(640,480); 
    glutCreateWindow("Tutorial-1: Q4"); 
    glLoadIdentity(); 
    init(); 
    glutDisplayFunc(update); 
    glutMainLoop(); 
    return 0; 
} 

但是這並沒有在窗口上畫任何東西。它只是白色。任何人都可以請建議解決方案?

+0

爲什麼'setPixel()'只是init()'的複製/粘貼? – genpfault

回答

1

您的setPixel函數未使用其參數xy。您不啓用線條渲染模式或添加要繪製的頂點。

修復將包括至少下列步驟操作:

  • 呼叫glBegin(GL_LINES);glPointSize(5.0f);

  • 呼叫glEnd()前後glFlush();

修改setPixel看起來像這樣:

void setPixel(GLint x, GLint y) 
{ 
    glVertex2f(x, y); 
}