1

所以我必须使用鼠标功能画一条线。当鼠标点击两点时,程序需要画一条连接它们的线。

我需要制作一个虚构的 10x10 数组并在其上映射点,然后连接这些点。窗口大小无关紧要。

我不知道如何处理假想数组以及如何保存鼠标坐标以便我可以使用它们。帮助

#include <glut.h>
#include<stdio.h>

void RenderScene(void) //점
{
    glClear(GL_COLOR_BUFFER_BIT);
    // Flush drawing commands
    glFlush();
}


void SetupRC(void) //바탕
{
    // setup clear color
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
}


void ChangeSize(GLsizei w, GLsizei h) {
        GLfloat  aspectRatio;
        // Prevent a divide by zero
        if (h == 0)
            h = 1;
        // Set Viewport to window dimensions
        glViewport(0, 0, w, h);
        // Reset coordinate system
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        // Establish clipping volume (left, right, bottom, top, near, far)
        aspectRatio = (GLfloat)w / (GLfloat)h;
        glOrtho(0, w, h, 0, 1.0, -1.0); 
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
}


void myRectf(GLfloat    x1, GLfloat     y1, GLfloat     x2, GLfloat     y2){
    glPointSize(10);

    ////ddaLine

    int dx, dy;
    int m = (y2 - y1) / (x2 - x1);
    for (int i = x1; i <= x2; i++)
    {
        if (m <= 1)
        {
            dx = 1;
            dy = m * dx;
        }
        else
        {
            dy = 1;
            dx = dy / m;
        }
        x1 += dx;
        y1 += dy;

        glBegin(GL_POINTS);
        glVertex3f(x1, y1, 0.f);
        glEnd();
    }

    /////breline
    while (x1 < x2)
    {
        int dx = x2 - x1;
        int dy = y2 - y1;
        int di = 2 * dy - dx;
        int ds = 2 * dy;
        int dt = 2 * (dy - dx);

        x1++;
        if (di < 0)
            di += ds;
        else
        {
            y1++;
            di += dt;
        }
        glBegin(GL_POINTS);
        glVertex3f(x1, y1, 0.f);
        glEnd();
    }
}

GLfloat g_x = -1000.f, g_y = -1000.f;

void MouseHandler(int button, int state, int x, int y){
    if (button == GLUT_LEFT_BUTTON
        && state == GLUT_DOWN){
        g_x = x; g_y = y;
        printf("%d,%d \n", x, y);
    }
    glutPostRedisplay();
}


void main(int argc, char* argv[]){
    int array[10][10];

    glutInit(&argc, argv); // initialize GL context
    // single or double buffering | RGBA color mode
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
    glutCreateWindow("Lec01");
    // callback function
    glutDisplayFunc(RenderScene);
    glutReshapeFunc(ChangeSize);

    SetupRC();          // initialize render context(RC)
    glutMouseFunc(MouseHandler);

    glutMainLoop();     // run GLUT framework
}

而且我不允许使用 GL_LINES

4

0 回答 0