Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2010, 16:20   #1
peredozer
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 16
По умолчанию Наложить текстуру в первую четверть и отображать ее на всю форму(Opengl).

Я накладываю текстуру на квадрат, на переднюю грань, как мне сделать что бы наложенная текстура находилась тока в части, где x и y - положительные? То есть только что бы находилась в первой четверти декартовой системы координат(трехмерная не используется)? Текстура при этом должна быть растянута на всю форму или tabsheet(то есть как раз на всю эту область положительных значений) и например на оси x и y шкала была где-то 10(в данных момент тока до 2,3 максимум), можно сто целых единиц,то есть что бы побольше значения можно было задать для шкалы?

Код:
procedure TForm1.FormPaint(Sender: TObject);
 begin
  BeginPaint(TabSheet1.Handle,ps);
          glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT) ;
          glMatrixMode(GL_PROJECTION);
          glLoadIdentity;
          LoadTexture('GetMap.bmp',Texture,false);
          glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);
        GLENABLE(GL_TEXTURE_2D);
        glBegin(GL_QUADS);
              glTexCoord2f(0,0); glVertex2f(-2.3,-2);
              glTexCoord2f(0,1); glVertex2f(-2.3,2);
              glTexCoord2f(1,1); glVertex2f(2.3,2);
              glTexCoord2f(1,0); glVertex2f(2.3,-2);
        glEnd;
        GLDISABLE(GL_TEXTURE_2D);
            glMatrixMode(GL_MODELVIEW);
            glFlush();
            SwapBuffers(DC);
  EndPaint(TAbsheet1.Handle,ps);

 end;

procedure TForm1.FormResize(Sender: TObject);
  begin
     glLoadIdentity;
     if width <= height then
       glOrtho(-2,2,-2*height/width,2*height/width,-10.0,10.0);
     else
       glOrtho(-2*width/height,2*width/height,-2,2,-10.0,10.0);
       glViewport(0,0,TabSheet1.Width,TabSheet1.Height);
       FormPaint(Self);
  end;

Последний раз редактировалось peredozer; 25.05.2010 в 16:22.
peredozer вне форума Ответить с цитированием
Старый 25.05.2010, 16:26   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

по умолчанию в ГЛ рабочая область это [-1,-1]:[1,1]
правда точно не помню где -1,-1 точка
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.05.2010, 04:58   #3
peredozer
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 16
По умолчанию

В принципе сделал что хотел, но тока теперь при использовании glScale получается увеличиваются координаты так сказать только с левого угла(я даже не знаю как сказать).То есть приближается не центр формы к наблюдателю ,а левый угол.Как поменять сие чудо?
peredozer вне форума Ответить с цитированием
Старый 26.05.2010, 12:52   #4
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

сделай так :
Код:
glPushMatix;
glTranslatef(1,1);//я думаю, что эти координаты тебе тоже надо будет //менять вместе с x,y,z . Нужно будет найти соотношения.
glScale(x,y,z);
glBegin(GL_QUADS);
  glVefrtex3f(1,1);
  glVefrtex3f(1,-1);
  glVefrtex3f(-1,-1);
  glVefrtex3f(-1,1);
elEd;
glPopMatrix;
glTranslate перемещает начало координат(0,0) на заданные параметры(в нашем случае 1, 1). Если тебе нужно переместить квадрат в другую часть экрана, то поэксперементируй с параметрами Translate ? чтобы понять , как это работает.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 27.05.2010, 02:13   #5
peredozer
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 16
По умолчанию

Спасибо конечно, но это уже сделал, суть в том что когда приближаю текстуру, центром приближения является теперь левый нижний угол, хотелось бы что бы к центру приближалось, вот тока теперь не знаю с какой функцией поиграться.
peredozer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как растянуть текстуру на всю форму(прямоугольник)?(OpenGl) peredozer Мультимедиа в Delphi 2 05.05.2010 19:29
вторая форма запускалась первой а уже с нее запускать первую форму, где основная программа Chudo4258 Помощь студентам 5 09.04.2010 23:13
Не получается сделать прозрачную текстуру devi409 Мультимедиа в Delphi 5 25.03.2009 05:47
Ссылку наложить на флешку zavodilo JavaScript, Ajax 2 24.03.2009 16:46
Как перетаскивать всю форму с помощью объекта на форме. Bill Gates Общие вопросы Delphi 1 02.01.2008 20:42