查看: 3984|回复: 5

请教,用OSG做 用鼠标画图的,像画图板一样的程序。

[复制链接]

该用户从未签到

发表于 2008-4-28 21:06:23 | 显示全部楼层 |阅读模式
刚学VR 和 OSG。
我本想用OpenGL 做一个像画图板一样可以用鼠标画图的程序, 但是总是出问题。

想问问用OSG也可以吗?

可以的话高手,指点指点,我可以少通宵几次。

跪求!!!

我用OpenGL做的程序,总是出现问题,画一回儿,刚画的就自动没了。
希望高手指点 !!

//===============================================================
#include <GL/glut.h>
GLsizei winWidth = 400, winHeight = 300;

void init (void)
{
        glClearColor (0.0, 0.0, 1.0, 1.0);

        glMatrixMode (GL_PROJECTION);
        gluOrtho2D (0.0, 200.0, 0.0, 150.0);

}

void displayFcn (void)
{
        glClear (GL_COLOR_BUFFER_BIT);

        glColor3f (1.0, 0.0, 0.0);
        glPointSize (3.0);
}

void winReshapeFcn (GLint newWidth, GLint newHeight)
{
        glViewport (0, 0, newWidth, newHeight);
        glMatrixMode (GL_PROJECTION);
        glLoadIdentity ();
        gluOrtho2D (0.0, GLdouble (newWidth), 0.0, GLdouble (newHeight));

        winWidth = newWidth;
        winHeight = newHeight;
}

void plotPoint (GLint x, GLint y)
{
       
        glBegin (GL_POINTS);
                glVertex2i (x, y);
        glEnd ();
       
        /*
        glBegin(GL_LINES);
glVertex2i (x, y);
glVertex2i (0, 0);
    glEnd();
        */
}

void curveDrawing (GLubyte curvePlotKey, GLint xMouse, GLint yMouse)
{
        GLint x = xMouse;
        GLint y = winHeight - yMouse;

        switch (curvePlotKey)
        {
        case 'a':
                plotPoint (x, y);
                break;
        default:
                break;
        }
        glFlush ();
}

void main (int argc, char** argv)
{
        glutInit (&argc, argv);
        glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
        glutInitWindowPosition (100, 100);
        glutInitWindowSize (winWidth, winHeight);
        glutCreateWindow ("Keyboard Curve - Drawing");

        init ();
        glutDisplayFunc (displayFcn);
        glutReshapeFunc (winReshapeFcn);
        glutKeyboardFunc (curveDrawing);

        glutMainLoop ();
}
//===============================================================

该用户从未签到

发表于 2008-4-28 22:27:47 | 显示全部楼层
当然可以的,只要维护一个不断变更着的Geometry类就可以了。
至于您的程序的问题,我没有细看。不过感觉上需要有一个专门的链表来维护已经绘制的顶点,并且在每次刷新显示,也就是displayFcn函数中每次都要重绘链表中的所有数据;当然更好的方法是使用VBO,将顶点数据传递到OpenGL服务端并不断更新链表的内容。

该用户从未签到

 楼主| 发表于 2008-5-19 12:12:00 | 显示全部楼层

用OSG 怎么做,说的能再详细一点吗?

我是机械系的,现要学这个,真的好难阿!

用到什么函数,或者 用到什么方法阿?

目前我用 setUpdateCallback 函数作了,translation。

该用户从未签到

发表于 2008-5-19 21:39:10 | 显示全部楼层
机械系怎么了 不要给我们机械丢脸

该用户从未签到

发表于 2008-5-19 21:44:46 | 显示全部楼层
原帖由 haicong 于 2008-5-19 12:12 发表
我是机械系的,现要学这个,真的好难阿!

用到什么函数,或者 用到什么方法阿?

目前我用 setUpdateCallback 函数作了,translation。


我也是机械工程学院毕业地~~ ^_^
用回调是没有问题的,只是注意每次修改Geometry类的顶点数据之后,要重新dirty()一下更新内容。加油加油

该用户从未签到

 楼主| 发表于 2008-5-20 01:18:46 | 显示全部楼层
初学OSG, 请教个问题, 反映竟然这么大, 吓我一跳 !

[ 本帖最后由 haicong 于 2008-5-20 01:42 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表