OpenGL(2015)をつかって簡単なお絵かきソフトのようなものを作りたいと思っています。
そしてプログラムを途中まで作ることができました
今の時点で、マウスでクリックしていくとクリックしたところから次にクリックしたところまで直線がかけるというプログラムになっています。
それをマウスでクリックし続けているときに線が書けるようにしたいのです。
いわゆる普通のペイントみたいな感じです。
マウスでクリックしているときからマウスの手をはなすまでの間にディスプレイ上に描画するような関数?を作ればいいのかなとは思うのですが
OpenGL初心者なものでまったくわかりません。
だからわかる方ぜひ教えてください。
#include "stdafx.h" #include <stdlib.h> #include <gl/glut.h> int WINW = 600; int WINH = 400; const int TEXTMAX = 40; const int POINTMAX = 10; char text[TEXTMAX]; double xList[POINTMAX]; double yList[POINTMAX]; int textnum; int pointnum; void DrawString() { glRasterPos3d(0, 0, 0);//0,0,0位置をスタート位置にする glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, 'P'); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, 'a'); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, 'i'); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, 'n'); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, 't'); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,'!'); } void myDisplay() { int i, j; glClearColor(1.0, 1.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); DrawString(); glColor3d(1.0, 0.0, 0.0); glBegin(GL_LINE_STRIP); for (i = 0; i < POINTMAX; i++) { j = (pointnum + i) % POINTMAX; if (xList[j] >= -1.0 && yList[j] >= -1.0) { glVertex2d(xList[j], yList[j]); } } glEnd(); glRasterPos2d(-0.9, -0.7); glutSwapBuffers(); } void myKeyboard(unsigned char key, int x, int y) { if (key == 0x1B) exit(0); text[textnum] = key; textnum = (textnum + 1) % TEXTMAX; glutPostRedisplay(); } void myMouseFunc(int button, int state, int x, int y) { if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { xList[pointnum] = (((double) x/ WINW) * 2) - 1; yList[pointnum] = ((((double)y / WINH) * 2) - 1)*(-1); pointnum = (pointnum + 1) % POINTMAX; glutPostRedisplay(); } } void myReshape(int width, int height) { glViewport(0, 0, width, height); WINW = width; WINH = height; } void myInit(char* progname) { int i; glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutInitWindowSize(WINW, WINH); glutInitWindowPosition(0, 0); glutCreateWindow(progname); pointnum = 0; for (i = 0; i < POINTMAX; i++) { xList[i] = -10.0; yList[i] = -10.0; } textnum = 0; for (i = 0; i < TEXTMAX; i++) { text[i] = '?0'; } } int main(int argc, char* argv[]) { glutInit(&argc, argv); myInit(argv[0]); glutKeyboardFunc(myKeyboard); glutMouseFunc(myMouseFunc); glutReshapeFunc(myReshape); glutDisplayFunc(myDisplay); glutMainLoop(); return 0; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/01 03:41