Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Помогите разобраться с OpenGL


Автор: Aristokrat 21.3.2010, 23:20
Вот начал изучать OpenGL , беда в том ,что ниже приведённый код компилируется , но выводиться просто окно , никак нимогу нарисовать прямоугольник и всё связанное с ним тоже ниработает. Может кто подскажет в чём трабла.(работаю в DEV-C++).В идеале должен рисоваться прямоугольник в окне, и с помощью мыши можно изменять его размеры, и курсор меняет вид.

Код

#include <GL/glui.h>
#include <windows.h>
#include <stdio.h>

int mx=0;
int my=0;
int WinHeight=480;
int WinWidth=600;

bool b_p1x=false;
bool b_p1y=false;
bool b_p2x=false;
bool b_p2y=false;

int p1x=50;
int p2x=50;
int p1y=150;
int p2y=150;

bool bLeftDown=false;

void SetCursor()
{
     b_p1x=false;
     b_p1y=false;
     b_p2x=false;
     b_p2y=false;
     
     if((abs(mx-p1x)<5)&&(abs(my-p1y)<5))
     {
        glutSetCursor(GLUT_CURSOR_BOTTOM_LEFT_CORNER);
        b_p1x=true;
        b_p1y=true;
        return;                                
     }
     
     if((abs(mx-p1x)<5)&&(abs(my-p2y)<5))
     {
       glutSetCursor(GLUT_CURSOR_TOP_LEFT_CORNER);  
       b_p1x=true;
       b_p2y=true;
       return;                                 
     }
        if((abs(mx-p2x)<5)&&(abs(my-p2y)<5))
     {
       glutSetCursor(GLUT_CURSOR_TOP_RIGHT_CORNER);  
       b_p2x=true;
       b_p2y=true;
       return;                                
     }
        if((abs(mx-p2x)<5)&&(abs(my-p1y)<5))
     {
       glutSetCursor(GLUT_CURSOR_BOTTOM_RIGHT_CORNER);  
       b_p2x=true;
       b_p1y=true;
       return;                                 
     }
         if((abs(mx-p2x)<5)&&(my>p1y)&&(my<p2y))
     {
       glutSetCursor(GLUT_CURSOR_LEFT_RIGHT);  
       b_p2x=true;
       return;                                
     }
     if((abs(mx-p1x)<5)&&(my>p1y)&&(my<p2y))
     {
       glutSetCursor(GLUT_CURSOR_LEFT_RIGHT);  
       b_p1x=true;
       return;                                
     }
     if((abs(my-p1y)<5)&&(mx>p1x)&&(mx<p2x))
     {
       glutSetCursor(GLUT_CURSOR_UP_DOWN);  
       b_p1y=true;
       return;                                
     }
     if((abs(my-p2y)<5)&&(mx>p1x)&&(mx<p2x))
     {
       glutSetCursor(GLUT_CURSOR_UP_DOWN);  
       b_p2y=true;
       return;                                
     }
       if((my>p1y)&&(my>p1x)&&(mx>p1x)&&(mx<p2x))
     {
       glutSetCursor(GLUT_CURSOR_SPRAY);  
       b_p2y=true;
       b_p1y=true;
       b_p1x=true;
       b_p2x=true;
       return;                                
     }
  glutSetCursor(GLUT_CURSOR_INHERIT);   
}

void Display(){
 
 glClear(GL_COLOR_BUFFER_BIT);
 glRectf(p1x,p1y,p2x,p2y);
 glutSwapBuffers();
}

void Keybord(unsigned char key,int x,int y)
{
 switch(key){
    case 27:
            {        
              exit(VK_ESCAPE);
              break;        
            }     
  }
 }

void MousePassiveMotion(int x,int y)
{
  mx=x;
  my=WinHeight-y;
  
  SetCursor();
  
}

void MyMouse(int button,int state,int x,int y)
{
  if((button==GLUT_LEFT_BUTTON)&&(state==GLUT_DOWN))
  {
    mx=x;
    my=WinHeight-y;
    bLeftDown=true;
    SetCursor();                                                
  }   
  if((button==GLUT_LEFT_BUTTON)&&(state==GLUT_UP))
  {
    bLeftDown=false;                                                
  }   
}

void MouseMotion(int x,int y)
{
  if(bLeftDown)
  {
    if(b_p1x)p1x+=x-mx;
    if(b_p2x)p2x+=x+mx;
    if(b_p1y)p1y+=WinHeight-my-y;
    if(b_p2y)p2y+=WinHeight-my-y; 
    mx=x;
    my=WinHeight-y;
    glutPostRedisplay();          
  }   
     
}
void Reshape(int width,int height)
{
 
  WinWidth=width;
  WinHeight=height;
  glViewport(0,0,WinWidth,WinHeight);

  glLoadIdentity();
  gluOrtho2D(0,WinWidth-1,0,WinHeight-1);
     
}
     

int main(int argc,char* argv[])
{
 
 glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 
  
 glutInitWindowSize(WinWidth,WinHeight);
 glutInitWindowPosition(100,100);
 glutCreateWindow("My first OpenGL Application");
 glClearColor(1,1,0.5,2);
 
 glutDisplayFunc(Display);
 glutKeyboardFunc(Keybord);
 glutPassiveMotionFunc(MousePassiveMotion);
 glutMouseFunc(MyMouse);
 glutMotionFunc(MouseMotion);
 glutReshapeFunc(Reshape); 

 glutWarpPointer(WinWidth/2,WinHeight/2);
 glutMainLoop();
 
 return 0;
}

Автор: Rickert 22.3.2010, 03:01
Модератор: используете тэги кода.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)