アットウィキロゴ

二次元の図形表示の仕方

まずコマンドプロンプトがカッコ悪いから嫌だって人は#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
添付ファイル