繁体   English   中英

使用dda / bresenham算法用open gl鼠标功能画一条线

draw a line with open gl mouse function using dda/bresenham algorithm

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

我需要制作一个假想的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

问题暂未有回复.您可以查看右边的相关问题.
1 使用javascript的一条线的bresenham算法

我正在尝试为一条线实现bresenham算法,这是我所做的: 由于某些原因,该行不在我按下的确切点上,所以我检查了算法,它看起来很好..从showCoords()函数获得的点也可以。 我知道这比http://stackoverflow.com/questions/4672279/b ...

2 Zedgraph用鼠标画一条线

我写了一段代码,用鼠标画一条线。 在鼠标按下时,我保存用户单击的位置。 在鼠标上,我画线: 问题是,当鼠标按下时,用户看不到该行(因为我仅在“ up”事件上绘制了该行)。 我该如何解决? 从技术上讲,我可以使用“悬停”并每秒从图形中绘制/删除线条并刷新图形,但这 ...

3 在鼠标后面画一条线

我想加载图片(PNG,JPG,位图),然后在图片上画一条线。 目前,我使用PictureBox加载图片: 这是我的代码的MouseMove部分: 在此我可以单击PointOne和PointTwo来画一条线,但是如果调用MouseMove事件,则我的图片消失了,所以我在干净的表 ...

4 在面板上用鼠标画一条线

我想用鼠标(交互式地)绘制一条线,我使用了C#和WinForm,该线应该从起点(当在面板上按下鼠标时)到鼠标的当前位置随时显示,就像绘制一个在Paint程序中的行。 但是代码产生了很多行,我知道为什么,但是我不知道如何克服这个问题 这是我的代码: 有帮助吗? 我想画很多线 ...

5 使用鼠标位置在wxPython中画一条线

我正在尝试使用wxPython编写程序,该操作会在我单击窗口的位置绘制一条线,但是它不起作用,我实际上也不知道为什么。 我怎么写这个,它会起作用? ...

6 在openGL下使用DDA动态绘制一条线

我是openGL的新手,正在学习DDA算法。 基本上,它只是使用glVertex2i(x, y)绘制很多点,甚至绘制一条线。 现在我要实现动态效果。 因此,我每次添加一个点后,都会添加一个sleep(0.5)语句来延迟0.5秒,但结果并不理想。 结果只是一会儿空白,突然全线出现。 ...

7 如何在Haskell中使用Bresenham算法绘制一条线

我在“ Bresenham的线条绘制算法”的Haskell Wiki中找到了代码,但是,我不能轻易理解开头的部分,因此我重写了它。 但是当斜率超过1/2时,我无法画线。 这是我的代码的一部分。 在where子句中,我定义了plotLine函数,就像Haskell Wiki中的“ go ...

9 如何使用 pureimage 画一条线?

我是 node.js 的新手,这只是我在用不同语言编写的项目中需要的一件小事。 我将如何使用 pureimage 从开始位置到结束位置制作一条线并将其导出为 png? 我对使用 pureimage 很感兴趣,因为据我了解,您可以使用变量设置线宽 我目前有一个带有 pngjs-draw 的工作程序, ...

10 如何使用libgdx画一条线?

我正在尝试使用 libgdx 绘制一些用于调试的线条,但我失败了。 这是我的代码 public class MainMenu extends Screen implements InputProcessor { private OrthographicCamera camera; SpriteBa ...

2013-07-25 03:16:20 4 12758   libgdx
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM