【问题标题】:drag and drop of images using opengl c++ [closed]使用opengl c ++拖放图像[关闭]
【发布时间】:2013-05-02 15:52:05
【问题描述】:

我想制作一款类似http://www.sciencekids.co.nz/gamesactivities/movinggrowing.html的游戏

1-如何根据鼠标坐标移动图像?我知道如何翻译一个像多边形但不是图像的对象?

2-如何检查它是否在正确的地方并让它卡在那里 我使用了 gltranslate 但图像没有移动,并尝试了 copypixl 但它一直在复制图像 鼠标碰到的每一个地方。

 #include <windows.h>
#include <GL/glut.h>
#include <gl/glaux.h>

#pragma comment(lib,"glaux.lib")

AUX_RGBImageRec *image ;
GLsizei wh = 600, ww = 800;
//-----------------------------------------------------------------------------------------------
void display(void){

    image = new AUX_RGBImageRec();
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    image = auxDIBImageLoad(L"boy.bmp");
    glDrawPixels(image->sizeX, image->sizeY, GL_RGB,
    GL_UNSIGNED_BYTE,image->data);

    glFlush();
}
//-----------------------------------------------------------------------------------------------
void mouse (int btn , int state , int x , int y){

    int h = wh-y ;
    if(btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN){

        /*glPushMatrix();*/
        /*glTranslatef(x , h , 0);*/
        glRasterPos2i(x,h);
        glCopyPixels(0,0,image->sizeX, image->sizeY,GL_COLOR);
        //glPopMatrix();}
        if(btn == GLUT_LEFT_BUTTON && state == GLUT_UP) {

          // check if it is in right place to stuck it else will retuen to original place  
      }
    }glFlush();

}
//-----------------------------------------------------------------------------------------------
void intiate(){

    glClearColor(0.0, 0.0, 0.0, 0.0);
    glMatrixMode (GL_PROJECTION);
    glLoadIdentity ();
    gluOrtho2D(0,ww,0,wh);
}
//-----------------------------------------------------------------------------------------------
void main()
{
glutInitDisplayMode (GLUT_RGB);  
glutInitWindowSize (ww, wh);
glutInitWindowPosition (100, 100);
glutCreateWindow ("Inside my Body");
intiate();
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
} 

【问题讨论】:

标签: c++ image opengl mousemove


【解决方案1】:

1-如何根据鼠标坐标移动图像?我知道如何翻译一个像多边形但不是图像的对象?

首先:请不要使用 glDrawPixels。改为使用纹理,应用于常规几何体。 OpenGL 不处理用户输入,因此您必须自己实现鼠标交互。 从不将 OpenGL 绘图命令放在输入事件处理程序中。在输入事件处理程序中,更改一些变量、设置标志等,但不要绘制。设置标志后,发出重绘,以便绘制更新。

2-如何检查它是否在正确的地方并让它卡在那里

OpenGL 是一个绘图 API,而不是场景图。你告诉它要画什么,就是这样。如果事情看起来不像你所期望的那样,那么你画得不对。

专业提示:将所有 OpenGL 命令放在绘图例程中。不要从其他任何地方调用任何 OpenGL 函数。您在initiate 函数中所做的事情实际上属于显示函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2014-03-16
    • 1970-01-01
    相关资源
    最近更新 更多