2017-04-19 34 views
0

頂点が(300,210)、 (340,215)、(320,250)の三角形を描画するC++プログラムを作成します。三角形の中心は(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)はそのトリックを行うべきです。理想的にはMatrixModeGL_PROJECTIONに設定して呼び出す必要があります。以下は

+0

非効率的である私は、スクリーンコードの後に​​それを置きますか –

+0

@WaleedTariqチュートリアルを見つけたり、The Red Bookを読んでください。 –

+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

シンプルかつ有効な三角形のコードです:これは私の問題は、主に3D視点を解決

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); 

働いていなかった私は

関連する問題