OpenGL入門 1日目
だいたい個人用作業メモ
今回までの作業内容
- ウィンドウを表示する
- 初期状態のオセロの盤面の生成、配置
othello.cpp(10/18時点)
#include <iostream> #include <GLUT/GLUT.h> #define BOARD_SIZE 8 #define NONE 0 #define BLACK 1 #define WHITE 2 using namespace std; int screenWidth = 800, screenHeight = 800; char board[BOARD_SIZE][BOARD_SIZE]; void showStone(){ //盤面に配置された石の描画 glPointSize(60); for(int i = 0; i < BOARD_SIZE; i++){ for(int j = 0; j < BOARD_SIZE; j++){ if(board[i][j] == BLACK){ //黒石の描画 glColor3d(0, 0, 0); glBegin(GL_POINTS); glVertex2i(120 + 80 * i, 120 + 80 * j); glEnd(); }else if(board[i][j] == WHITE){ //白石の描画 glColor3d(1, 1, 1); glBegin(GL_POINTS); glVertex2i(120 + 80 * i, 120 + 80 * j); glEnd(); } } } } void display(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //盤面のマス目作成 glColor3d(0.0, 0.0, 0.0); glLineWidth(3); glBegin(GL_LINES); for(int i = 0; i <= BOARD_SIZE; i++){ glVertex2i(80 + 80 * i, 720); glVertex2i(80 + 80 * i, 80); glVertex2i(80, 80 + 80 * i); glVertex2i(720, 80 + 80 * i); } glEnd(); //盤面上の4点の描画 glColor3d(0.0, 0.0, 0.0); glPointSize(10); glBegin(GL_POINTS); glVertex2i(240, 240); glVertex2i(240, 560); glVertex2i(560, 240); glVertex2i(560, 560); glEnd(); showStone(); glFlush(); //描画実行 } void initialize(){ //初期盤面生成 glClearColor(0, 0.5, 0, 1); //背景色設定 //以下石の初期配置 for(int i; i < BOARD_SIZE * BOARD_SIZE; i++) board[i / BOARD_SIZE][i % BOARD_SIZE] = NONE; board[BOARD_SIZE / 2 - 1][BOARD_SIZE / 2] = BLACK; board[BOARD_SIZE / 2][BOARD_SIZE / 2 - 1] = BLACK; board[BOARD_SIZE / 2][BOARD_SIZE / 2] = WHITE; board[BOARD_SIZE / 2 - 1][BOARD_SIZE / 2 - 1] = WHITE; } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100, 100); glutInitWindowSize(screenWidth, screenHeight); glutCreateWindow("Othello"); gluOrtho2D(0, 800, 800, 0); //座標系指定 initialize(); glutDisplayFunc(display); glutMainLoop(); return 0; }
実行結果
メモ
- 点の描画はGL_POINTじゃなくてGL_POINTS
- 描きたい図形毎に、色指定、サイズ指定、glBegin(描画したい図形)、具体的な描画内容、glEnd()の流れ
- display関数の最後にglFlush()関数で発行したOpenGLコマンドを実行