二次元の図形表示の仕方
まずコマンドプロンプトがカッコ悪いから嫌だって人は#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") をソースに入れて下さい
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
#include <GL/glut.h>
void display(void)
{
}
int main()
{
glutCreateWindow("hello world");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
このソースをビルドしてみて、windowの形を変えてみて下さい。おかしな表示になると思います。 こうならない為にまずdisplayを塗りつぶします。
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
#include <GL/glut.h>
//windowの大きさ
double W=300;
double H=300;
void display(void){
glClear(GL_COLOR_BUFFER_BIT);//塗りつぶし実行
glFlush();//display内の描写を全実行
}
void init(){
glClearColor(1,1,1,1);//画面を塗りつぶす色
}
/*windowサイズが変更された時に図形の形が変更されないようにする。 w,hはwindowの幅と高さ*/
void resize(int w,int h){
glViewport(0,0,w,h);//windowに書く範囲を指定
glLoadIdentity();//単位行列をセット
glOrtho(-(double)w/W,(double)w/W,-(double)h/H,(double)h/H,-1,1);/*図形の形の見え方を指定
openglは二次元でも三次元として考えるためzの値も決めている*/
display();//windowサイズが変更された時に描写も実行
}
int main(){
glutInitWindowSize(W,H);
glutInitWindowPosition(300,300);
glutCreateWindow("hello world");
glutDisplayFunc(display);
glutInitDisplayMode(GLUT_RGBA);
glutReshapeFunc(resize);
init();
glutMainLoop();
return 0;
}
以後はdisplay関数内の変更になります。 この画面に写っている領域はデフォルトでは中心を原点としたx軸(-1~1)、y軸(-1~1)です。 display関数もそれに倣います。
void display(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3d(1,0,0);
glBegin(GL_LINE_LOOP);
glVertex2d(0.9,0.9);
glVertex2d(-0.9,0.9);
glVertex2d(-0.9,-0.9);
glEnd();
glFlush();
}
void glColor3d(GLdouble red, GLdouble green, GLdouble blue)はこの後に書く図形の色を決めます。
void glBegin(GLnum mode)
void glEnd(void)
図形を描くには, glBegin()~glEnd() の間にその図形の各頂点の座標値を設定する関数を置きます。
GL_LINE_LOOPで各頂点を結び、GL_POLYGONで塗りつぶします。
下の画像通りになれば成功です。
最終更新:2013年09月17日 17:28