2013-10-15 123 views
4
#include <Windows.h> 
#include <GL\glut.h> 

#pragma comment(lib, "glut32.lib") 
#pragma comment(lib, "glu32.lib") 
#pragma comment(lib, "opengl32.lib") 

#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") 

bool init(void) 
{ 
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f); 
    glMatrixMode(GL_PROJECTION); 
    // Set grid to be from 0 to 1 
    gluOrtho2D(0.0, 3.0, 0.0, 3.0); 
    return true; 
} 

void drawline(float from_x, float from_y, float to_x, float to_y) 
{ 
    // From coordinate position 
    glVertex2f(from_x, from_y); 

    // To coordinate position 
    glVertex2f(to_x, to_y); 
} 

void render(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glColor3f(1.0, 1.0, 0.0); // Color (RGB): Yellow 
    glLineWidth(2.0); // Set line width to 2.0 
    glLoadIdentity(); 

    // Draw line 
    glBegin(GL_LINES); 
    drawline(0.25, 0.5, 0.4, 0.5); 
    drawline(0.4, 0.6, 0.4, 0.5); 
    drawline(0.4, 0.4, 0.4, 0.5); 
    drawline(0.6, 0.5, 0.75, 0.5); 
    glEnd(); 

    // Draw triangle 
    glBegin(GL_TRIANGLES); 
    glVertex2f(0.4, 0.5); 
    glVertex2f(0.6, 0.6); 
    glVertex2f(0.6, 0.4); 
    glEnd(); 

    glutSwapBuffers(); 
} 

void reshape(int w, int h) 
{ 
    glViewport(0, 0, w, h); 
    glMatrixMode(GL_MODELVIEW); 
} 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); 
    glutInitWindowSize(640, 480); 
    glutCreateWindow("My OpenGL program"); 

    init(); 

    // Draw shape one 
    glPushMatrix(); 
    glTranslatef(1.5, 1.5, 0.0); 
    glutDisplayFunc(render); 
    glPopMatrix(); 

    // Draw shape two 
    glPushMatrix(); 
    glTranslatef(2.5, 2.5, 0.0); 
    glutDisplayFunc(render); 
    glPopMatrix(); 

    glutReshapeFunc(reshape); 

    glutMainLoop(); 
    return 0; 
} 

我正在畫是這樣的:http://i.imgur.com/JJpbJ7M.png繪製多個形狀在OpenGL

我不需要整個事情,我只是希望能夠得出兩個形狀,我想他們是。但是,這不起作用,任何人都可以將我指向正確的方向?

回答

3

你差點沒錢了。

畫出你的形狀(收費)render(),不main()

#include <GL/glut.h> 

void drawline(float from_x, float from_y, float to_x, float to_y) 
{ 
    // From coordinate position 
    glVertex2f(from_x, from_y); 

    // To coordinate position 
    glVertex2f(to_x, to_y); 
} 

void drawShape() 
{ 
    glColor3f(1.0, 1.0, 0.0); // Color (RGB): Yellow 
    glLineWidth(2.0); // Set line width to 2.0 

    // Draw line 
    glBegin(GL_LINES); 
    drawline(0.25, 0.5, 0.4, 0.5); 
    drawline(0.4, 0.6, 0.4, 0.5); 
    drawline(0.4, 0.4, 0.4, 0.5); 
    drawline(0.6, 0.5, 0.75, 0.5); 
    glEnd(); 

    // Draw triangle 
    glBegin(GL_TRIANGLES); 
    glVertex2f(0.4, 0.5); 
    glVertex2f(0.6, 0.6); 
    glVertex2f(0.6, 0.4); 
    glEnd(); 
} 

void render(void) 
{ 
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0.0, 4.0, 0.0, 4.0, -1, 1); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    // Draw shape one 
    glPushMatrix(); 
    glTranslatef(1.5, 1.5, 0.0); 
    drawShape(); 
    glPopMatrix(); 

    // Draw shape two 
    glPushMatrix(); 
    glTranslatef(2.5, 2.5, 0.0); 
    drawShape(); 
    glPopMatrix(); 

    glutSwapBuffers(); 
} 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); 
    glutInitWindowSize(640, 480); 
    glutCreateWindow("My OpenGL program"); 
    glutDisplayFunc(render); 
    glutMainLoop(); 
    return 0; 
} 

我刪除reshape()init()因爲默認glutReshapeFunc()已經呼籲glViewport(),你應該重置您的投影反正模型視圖矩陣每一幀。