Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с OpenGL, всё компилиться да не тот результат 
:(
    Опции темы
Aristokrat
Дата 21.3.2010, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.3.2010

Репутация: нет
Всего: нет



Вот начал изучать 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, 02:59
PM MAIL   Вверх
Rickert
Дата 22.3.2010, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Модератор: используете тэги кода.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.