2017-04-19 191 views
0

編寫一個C++程序,該程序將繪製一個頂點爲(300,210), (340,215)和(320,250)的三角形。三角形的中心位於(320,240)。用OpenGL繪製一個三角形

#include <GL/glut.h> 
#include <stdlib.h> 

void display(void) 
{ 
    glClearColor(1,1,0,0); 

    glClear(GL_COLOR_BUFFER_BIT); 

    glBegin(GL_TRIANGLES); 

    glColor3f(0.5,0,0); 

    glVertex2f(300.0,210.0); 
    glVertex2f(340.0,215.0); 
    glVertex2f(320.0,250.0); 

    glEnd(); 

    glFlush(); 
} 

int main(int argc, char *argv[]) 
{ 
    glutInit(&argc, argv); 
    glutInitWindowSize(640,500); 
    glutInitWindowPosition(1,1); 

    glutCreateWindow("Triangle"); 

    glutDisplayFunc(display); 


    glutMainLoop(); 

    return EXIT_SUCCESS; 
} 

問題三角形不出現,只出現黃色屏幕。

回答

2

您的程序需要適當的視圖/投影矩陣。 glOrtho(0, 640, 480, 0, -1, 1)應該做的伎倆。理想情況下,應使用MatrixMode設置爲GL_PROJECTION來調用它。

+0

不要我把它放在屏幕上的代碼後 –

+0

@WaleedTariq找到教程或閱讀紅皮書。 –

+0

int main(int argc,char * argv []) { glutInit(&argc,argv); glutInitWindowSize(640,500); glutInitWindowPosition(1,1); glMatrixMode(GL_PROJECTION); glOrtho(0,640,480,0,-1,1); glutCreateWindow(「Triangle」); glutDisplayFunc(display); glutMainLoop(); return EXIT_SUCCESS; } –

2

OpenGL中的座標系是從-1 - > 1。您必須將您的座標轉換爲所需的像素值。

這可以通過一些線性插值來完成。像這樣的東西應該工作:

float c = -1.0 + 2.0*desiredPixel/pixelWidth 

你將需要爲所有的三角座標做這種轉換。

+0

是低效 –

-1

下面是一個簡單而有效的三角形代碼:

glBegin(GL_TRIANGLES); 
glColor3f(0.1, 0.2, 0.3); 
glVertex3f(0, 0, 0); 
glVertex3f(1, 0, 0); 
glVertex3f(0, 1, 0); 
glEnd(); 
+0

我切換到glvertex2i並使用'glMatrixMode(GL_PROJECTION); gluOrtho2D(0,400,0,500);' –

0
glMatrixMode(GL_PROJECTION); 
gluOrtho2D(0,400,0,500); 

這解決了我的問題主要是3D透視不工作,我認爲