2017-04-19 126 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透视不工作,我认为