在Opengl中通过鼠标移动形状

用户名
void Rectangle(void) { 

glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
    glColor3f(1.0,0.0,0.0);
    glVertex2f(m_x-0.25,m_y-0.25);
    glColor3f(1.0,0.0,0.0);
    glVertex2f(m_x-0.25,m_y-0.75);
    glColor3f(1.0,0.0,0.0);
    glVertex2f(m_x-0.75,m_y-0.75);
    glColor3f(1.0,0.0,0.0);
    glVertex2f(m_x-0.75,m_y-0.25);
glEnd();
glutSwapBuffers();

我想将矩形移动到按下鼠标的位置。m_x和m_y是全局变量。此函数在glutDisplayFunc(Rectangle)主函数中调用,鼠标函数如下所示:

void mouse(int button,int state,int x,int y)  
  switch(button)
{
case GLUT_LEFT_BUTTON:
    if(state==GLUT_DOWN)
    {
        m_x=x;
        m_y=y;
        Rectangle();
        glutSwapBuffers();
    }
    break;

default:
    break;

}

当应用程序运行时,它在我按下鼠标后绘制了一个矩形,矩形丢失了。我怎么了?

Genpfault

不要像这样在鼠标处理程序中渲染东西,只需更新对象位置并使用glutPostRedisplay()以下命令将重绘排入队列

#include <GL/glut.h>

float objX = 100;
float objY = 100;
float objSize = 50;
bool dragging = false;
void mouse( int button, int state, int x, int y )
{
    if( GLUT_DOWN == state )
    {
        bool colliding = 
            objX - objSize <= x && x <= objX + objSize
            &&
            objY - objSize <= y && y <= objY + objSize;
        if( colliding )
        {
            dragging = true;
            objX = x;
            objY = y;
            glutPostRedisplay();
        }
    }
    else
    {
        dragging = false;
    }
}

void motion( int x, int y )
{
    if( dragging )
    {
        objX = x;
        objY = y;
        glutPostRedisplay();
    }
}

void drawRect( float x, float y, float size )
{
    glPushMatrix();
    glTranslatef( x, y, 0.0f );
    glScalef( size, size, 1.0f );
    glBegin( GL_QUADS );
    glColor3ub( 255, 255, 255 );
    glVertex2f( -1, -1 );
    glVertex2f(  1, -1 );
    glVertex2f(  1,  1 );
    glVertex2f( -1,  1 );
    glEnd();
    glPopMatrix();
}

void display()
{
    glClearColor( 0, 0, 0, 1 );
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    const double w = glutGet( GLUT_WINDOW_WIDTH );
    const double h = glutGet( GLUT_WINDOW_HEIGHT );
    glOrtho( 0, w, h, 0, -1, 1 );

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();

    drawRect( objX, objY, objSize );

    glutSwapBuffers();
}

int main(int argc, char **argv)
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE );
    glutInitWindowSize( 600, 600 );
    glutCreateWindow( "GLUT" );
    glutDisplayFunc( display );
    glutMouseFunc( mouse );
    glutMotionFunc( motion );
    glutMainLoop();
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Opengl中通过鼠标移动形状

来自分类Dev

在Java中通过单击鼠标移动球

来自分类Dev

OpenGL- C ++,使用鼠标单击将形状移动到单击位置

来自分类Dev

OpenGL- C ++,使用鼠标单击将形状移动到单击位置

来自分类Dev

捕获Win32 / Opengl中的鼠标移动

来自分类Dev

Java Swing用鼠标移动形状

来自分类Dev

使用鼠标在openGL中移动图形

来自分类Dev

在OpenGL中移动3d形状

来自分类Dev

通过鼠标拖曳绘制时的多种形状

来自分类Dev

通过形状传递鼠标单击事件

来自分类Dev

通过鼠标拖曳绘制时的多种形状

来自分类Dev

在Linux中相对移动鼠标

来自分类Dev

Swift 中的线性鼠标移动

来自分类Dev

通过单击鼠标在PuTTY中移动光标?

来自分类Dev

CSS过渡随着鼠标在旋转形状上的移动而静止

来自分类Dev

在OpenGL中绘制多个形状

来自分类Dev

如何通过更改代码中而不是鼠标的位置来移动JUNG节点(顶点)?

来自分类Dev

硒-通过水平移动鼠标从隐藏的工具提示中获取文本

来自分类Dev

Mac OS X(Mavericks)-如何仅通过移动鼠标从屏幕保护程序中唤醒?

来自分类Dev

我们可以在Ubuntu中通过键盘命令移动鼠标光标吗?

来自分类Dev

如何通过移动或拖动鼠标来旋转A形框中的框?

来自分类Dev

通过GLFW进行鼠标输入的简单OpenGL程序中的明显滞后

来自分类Dev

移动设备中鼠标移动时,对象无法正常移动

来自分类Dev

Python 2.7 Tkinter:如何通过按键配置鼠标下的形状

来自分类Dev

鼠标移动,而鼠标向下在Dart中不起作用?

来自分类Dev

javascript中逼真的鼠标移动坐标?

来自分类Dev

react div中的鼠标元素移动

来自分类Dev

Node.js中的鼠标移动

来自分类Dev

在Qt中获取原始鼠标移动

Related 相关文章

热门标签

归档