Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OpenGl увеличение изображения по размеру формы, OpenGl рисую на тексуре цветные точки 
:(
    Опции темы
MMM
Дата 10.10.2013, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток!!!
Обращаюсь в первую очередь к знатокам OPENGL.
на одном форуме задал вопрос:
Профи помогите!!! 
Есть код, DC на хендл формы .... 
размер клиентской части формы 155 х 155 
все работает , как сделать чтобы при увеличении размеров формы увеличивалась и сама картинка (пропорционально) 
DC := GetDC(Handle); 
RC := CreateRenderingContext(DC,[opDoubleBuffered],32,24,0,0,0,0); 
.... 
glBegin(GL_POINTS); 
for I := 0 to 155 do 
  for j := 0 to 155 do 
    begin 
    glColor3f(random(2),random(2),random(2)); 
    glVertex2f((j-155)/155,(i-155)/155); 
    end; 
glEnd; 
SwapBuffers(dc);

увеличение размера точки пропорционально размеру и увеличение координат ? 
glPointSize(();

или делать из этого текстуру и натягивать на квадрат(два треугольника)? (есть у кого код рабочий)


ответы такие:
Как ты исходную картинку рисуешь? Если треугольниками - просто делаешь glViewport(0,0,Form1.ClientWidth, Form1.ClientHeight) при ресайзе формы.
А если точками как в #0... то жесть.  Зачем вообще opengl в таком случае? Ну да, наверное можно через glPixelZoom.
....
делай через текстуру



вот нашел , такой код, переделал под свои нужды 
Вопрос нет ли тут ничего лишнего ? 
Будет ли это самым быстром способом вывода кучи пикселей на экран в OpenGl?

Код


procedure TForm3.InitAll;
const
 light_diffuse : Array [0..3] of GLfloat = (1.0, 1.0, 1.0, 0.0);
 light_specular : Array [0..3] of GLfloat = (1.0, 1.0, 1.0, 0.0);
 mat_specular : Array [0..3] of GLfloat = (1.0, 1.0, 1.0, 1.0);
 lmodel_ambient : Array [0..3] of GLfloat = (0.0, 0.0, 0.0, 0.0);
 mat_shininess : GLfloat = 50.0;
begin
 glEnable(GL_DEPTH_TEST);
 glLightfv(GL_LIGHT0, GL_DIFFUSE, @light_diffuse);
 glLightfv(GL_LIGHT0, GL_SPECULAR, @light_specular);
 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, @mat_specular);
 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, @mat_shininess);
 glColorMaterial(GL_FRONT_AND_BACK,GL_DIFFUSE);
 glEnable(GL_COLOR_MATERIAL);
 glEnable(GL_LIGHT0);
 glEnable(GL_LIGHTING);
 glColor3f(1.0, 1.0, 0.0);
 PrepareImage;
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
end;

procedure TForm3.WMPaint(var Msg: TWMPaint);
var
  ps : TPaintStruct;
begin
    PrepareImage;
    BeginPaint(Handle, ps);
    glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_PROJECTION);
    glPushMatrix;
    glLoadIdentity;
    glOrtho(-50.0,50.0,-50.0,50.0,200.0,300.0);
    glMatrixMode(GL_MODELVIEW);
    glDepthMask(FALSE);
    glEnable(GL_TEXTURE_2D);
    glBegin(GL_QUADS);
    glNormal3f(0.0,0.0,1.0);
    glTexCoord2f(0.0,0.0);
    glVertex3f(0.0,0.0,0.0);
    glTexCoord2f(1.0,0.0);
    glVertex3f(100.0,0.0,0.0);
    glTexCoord2f(1.0,1.0);
    glVertex3f(100.0,100.0,0.0);
    glTexCoord2f(0.0,1.0);
    glVertex3f(0.0,100.0,0.0);
    glEnd;
    glDisable(GL_TEXTURE_2D);
    glDepthMask(TRUE);
    SwapBuffers(DC);
    EndPaint(Handle, ps);
    InvalidateRect(Handle, nil, False);
end;

procedure TForm3.FormResize(Sender: TObject);
begin
 glViewport(0, 0, ClientWidth, ClientHeight);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity;
 glFrustum(-1.0, 1.0, -1.0, 1.0, 50.0, 300.0);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity;
 glTranslatef(-50.0, -50.0, -250.0);
 InvalidateRect(Handle, nil, False);
end;

procedure TForm3.FormDestroy(Sender: TObject);
begin
 wglMakeCurrent(0, 0);
 wglDeleteContext(hrc);
 ReleaseDC(Handle, DC);
 DeleteDC(DC);
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
  DC := GetDC(Handle);
  SetDCPixelFormat;
  hrc := wglCreateContext(DC);
  wglMakeCurrent(DC, hrc);
  InitAll;
end;

procedure TForm3.SetDCPixelFormat;
var
  nPixelFormat: Integer;
  pfd: TPixelFormatDescriptor;
begin
  FillChar(pfd, SizeOf(pfd), 0);
  pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
                 PFD_DOUBLEBUFFER;
  nPixelFormat := ChoosePixelFormat(DC, @pfd);
  SetPixelFormat(DC, nPixelFormat, @pfd);
end;

procedure TForm3.PrepareImage;
type
  PPixelArray = ^TPixelArray;
  TPixelArray = array [0..0] of Byte;
var
  Data : PPixelArray;
  I, ImageSize : Integer;
begin
    ImageSize := 256 * 256 * 3;
    GetMem (Data, ImageSize * 3);
    i:=0;
      while I < ImageSize - 1 do
      begin
          Data [I] := random(255);  //r
          Data [I+1] := random(255);//g
          Data [I+2] := random(255);//b
          inc(i,3);
      end;
      glTexImage2d(GL_TEXTURE_2D, 0, 3, 256,256, 0, GL_RGB, GL_UNSIGNED_BYTE, Data);
      FreeMem (Data);
end;


СИЛЬНО НЕ ПИНАЙТЕ, Я ТОЛЬКО УЧУСЬ  smile 

Это сообщение отредактировал(а) MMM - 10.10.2013, 11:40
PM MAIL ICQ   Вверх
Alexeis
Дата 11.10.2013, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



  Все верно, через текстуры будет быстрее. Рассчитывать вершины это действительно долго. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




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


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

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