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


Автор: Aristokrat 22.3.2010, 15:56
Так как все вежливо отмолчались на мой предыдущий вопрос, упрощаю поставленный вопрос, как нарисовать прямоугольник я это делаю так (ниже приведённый код) , но так как прямоугольник ниресуется , пологаю что делаю что то не так,так в чём же трабла кто подскажет. Повторюсь , всё компилться без ошибок , но выводиться просто окно.

Код

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

int WinHeight=480;
int WinWidth=600;


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



void Display(){
 
 glClear(GL_COLOR_BUFFER_BIT);//очищает экран
 glRectf(p1x,p1y,p2x,p2y);//ДОЛЖНО ПОИДЕЕ РИСОВАТЬ ПРЯМОУГОЛЬНИК АН, НЕТ
 
 /*
    glBegin(GL_POLYGON);
    glVertex2(p1x, p1y);
    glVertex2(p2x, p1y);   ПРОБОВАЛ И ТАК НО НИЧЕГО НЕТ
    glVertex2(p2x, p2y);
    glVertex2(p1x, p2y);
    glEnd();
 */
 
 glutSwapBuffers();//выводит полученное изображение    
  
}

void Keybord(unsigned char key,int x,int y)//реагирует на esc
{
 switch(key){
    case 27:
            {        
              exit(VK_ESCAPE);
              break;        
            }     
  }
 }



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);
 glutReshapeFunc(Reshape); 
 glutWarpPointer(WinWidth/2,WinHeight/2);
 
 glutMainLoop();//организовывает цикл
 
 return 0;
}   




 

Автор: Aristokrat 22.3.2010, 17:04
спасибо всем, что посматрели вопрос , возможно даже подумали.Может кому понадобиться, решил эту проблему таким образом :

Код

    glColor3ub(0,100,100);
    glBegin(GL_QUADS);
      glVertex2f(left,bottom);
      glVertex2f(left,top);
      glVertex2f(right,top);
      glVertex2f(right,bottom);
    glEnd();

 

Автор: colyambas 3.4.2010, 15:25
у тебя не правильная пара координат p1(50, 150) и p2(50, 150)
поменяй p2(100, 200)

Добавлено через 1 минуту и 29 секунд
желательно обьявлять координаты под double, как того требует функция, на крайняк float, лишняя нагрузка с приведением типов

Автор: Rickert 3.4.2010, 16:31
Использовать надо GLdouble/GLfloat - это раз.
Во-вторых, для экранных координат абсолютно не нужны дробные числа. Необходимо использовать glVertex2i.

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