OpenGL Glutでポリゴンをマウス操作で描きたいと思ったら、クリックするたびに頂点になり、すべての頂点の間に線が引かれます。右マウスがクリックされると、ポリゴンは最後の頂点から最初の頂点まで直線を描くのを閉じます。私はこれを思いついたが、うまくいかないようだ。OpenGL GLUTでマウスを使ってポリゴンを描く
void draw_polygon(int button, int state, int x, int y) {
bool right_pushed = 0;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
p1.x = x;
p1.y = 480 - y;
//if right is clicked draw a line to here
first.x = x;
first.y = 480 - y;
}
while (right_pushed == false) {
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
p2.x = x;
p2.y = 480 - y;
}
GLfloat dx = p2.x - p1.x;
GLfloat dy = p2.y - p1.y;
GLfloat x1 = p1.x;
GLfloat y1 = p1.y;
GLfloat step = 0;
if (abs(dx) > abs(dy)) {
step = abs(dx);
}
else {
step = abs(dy);
}
GLfloat xInc = dx/step;
GLfloat yInc = dy/step;
for (float i = 1; i <= step; i++) {
glVertex2i(x1, y1);
x1 += xInc;
y1 += yInc;
}
p1.x = p2.x;
p1.y = 480 - y;
if (button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {
right_pushed = 1;
p2.x = first.x;
p2.y = first.y;
dx = p2.x - p1.x;
dy = p2.y - p1.y;
x1 = p1.x;
y1 = p1.y;
step = 0;
if (abs(dx) > abs(dy)) {
step = abs(dx);
}
else {
step = abs(dy);
}
xInc = dx/step;
yInc = dy/step;
for (float i = 1; i <= step; i++) {
glVertex2i(x1, y1);
x1 += xInc;
y1 += yInc;
}
}
}
glEnd();
glFlush();
}
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(200, 200);
glutInitWindowSize(640, 480);
glutCreateWindow("windows");
glutDisplayFunc(display);
glutMouseFunc(draw_polygon);//
init();
glutMainLoop();
return 0;
}
私も、私はメニューから選択するとき、私は、頂点を選択することができる方法でそれを編集するために、このポリゴンを作成から行くことができるとfunctionallityを追加arroundのそれを移動する方法を見つけるためにしようとしています、それに応じて形状が変化する。
あなたのマウス機能で描画されています。これをしないでください。変数にポリゴンを保存します(例:点のリスト)。次に、マウス機能でこのリストを変更すると、表示機能でレンダリングできます。ポリゴンの変更は同様に行うことができます。 Btw、OpenGLの学習を始めたばかりの場合は、 'glBegin/glEnd/glVertex ...'で廃止予定の固定機能パイプラインを学ばないでください。 –