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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2011, 20:14   #1
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию OpenGL - наложение текстур.

Здравствуйте, возникла проблема! Прошу помочь.

У меня есть программа которая генерирует куб и накладывает текстуру на него.
Проблема в том что текстура при растягивании размывается(интерполяция кажется, да?).

Вот так все это дело выглядит:



Как это размытие убрать?

Код:
Код:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, dglopengl, glBitmap, ExtCtrls, ComCtrls;

type
  TMainForm = class(TForm)
    Panel: TPanel;
    TrackBar: TTrackBar;
    TrackBar1: TTrackBar;
    TrackBar2: TTrackBar;
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure TrackBarChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    dc: HDC;
    hrc: HGLRC;
    fTexture: TglBitmap2D;
    procedure SetupGL;
    procedure Render;
    procedure IdleHandler(Sender: TObject; var Done : boolean);
  end;

const
 NearClipping = 0.1;
 FarClipping =  200;
var
  MainForm: TMainForm;
  R,R2,Fo : single;


implementation

{$R *.dfm}

procedure TMainForm.IdleHandler(Sender: TObject; var Done: Boolean);
begin
 Render;
 Sleep(1);
 Done := False;
end;
procedure TMainForm.Render;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glViewport(0,0,CLientWidth,ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(Fo,ClientWidth/ClientHeight,NearClipping,FarClipping);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glTranslatef(0,0,-3);
 glRotatef(R, 1.0, 0.0, 0.0);
 glRotatef(R2, 0.0, 1.0, 0.0);
 InvalidateRect(Handle,nil,False);
 glBegin (GL_QUADS);
   glTexCoord2f ( 0 , 0 ) ; glVertex3f (1.0, 1.0, 1.0);
glTexCoord2f ( 0 , 1 );    glVertex3f (-1.0, 1.0, 1.0);
glTexCoord2f ( 1 , 1 );     glVertex3f (-1.0, -1.0, 1.0);
glTexCoord2f ( 1 , 0 );    glVertex3f (1.0, -1.0, 1.0);



 glEnd;

 glBegin (GL_QUADS);
   glTexCoord2f ( 0 , 0 ) ; glVertex3f (1.0, 1.0, -1.0);
glTexCoord2f ( 0 , 1 );    glVertex3f (1.0, -1.0, -1.0);
glTexCoord2f ( 1 , 1 );    glVertex3f (-1.0, -1.0, -1.0);
glTexCoord2f ( 1 , 0 );     glVertex3f (-1.0, 1.0, -1.0);
 glEnd;

 glBegin (GL_QUADS);
   glTexCoord2f ( 0 , 0 ) ;  glVertex3f (-1.0, 1.0, 1.0);
glTexCoord2f ( 0 , 1 ); glVertex3f (-1.0, 1.0, -1.0);
glTexCoord2f ( 1 , 1 );glVertex3f (-1.0, -1.0, -1.0);
glTexCoord2f ( 1 , 0 );glVertex3f (-1.0, -1.0, 1.0);
 glEnd;

 glBegin (GL_QUADS);
   glTexCoord2f ( 0 , 0 ) ; glVertex3f (1.0, 1.0, 1.0);
glTexCoord2f ( 0 , 1 );    glVertex3f (1.0, -1.0, 1.0);
glTexCoord2f ( 1 , 1 );     glVertex3f (1.0, -1.0, -1.0);
glTexCoord2f ( 1 , 0 );    glVertex3f (1.0, 1.0, -1.0);
 glEnd;

 glBegin (GL_QUADS);
   glTexCoord2f ( 0 , 0 ) ; glVertex3f (-1.0, 1.0, -1.0);
glTexCoord2f ( 0 , 1 );     glVertex3f (-1.0, 1.0, 1.0);
glTexCoord2f ( 1 , 1 );   glVertex3f (1.0, 1.0, 1.0);
glTexCoord2f ( 1 , 0 );    glVertex3f (1.0, 1.0, -1.0);


 glEnd;

 glBegin(GL_QUADS);
   glTexCoord2f ( 0 , 0 ) ; glVertex3f (-1.0, -1.0, -1.0);
glTexCoord2f ( 0 , 1 );    glVertex3f (1.0, -1.0, -1.0);
glTexCoord2f ( 1 , 1 );    glVertex3f (1.0, -1.0, 1.0);
glTexCoord2f ( 1 , 0 );   glVertex3f (-1.0, -1.0, 1.0);
 glEnd;
SwapBuffers(dc);
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
DeactivateRenderingContext;
DestroyRenderingContext(HRC);
ReleaseDC(Handle,Dc);
DeleteDc(DC);
fTexture.Free;
end;

procedure TMainForm.FormResize(Sender: TObject);
var
tmpbool: Boolean;
begin
glViewport(0,0,ClientWidth,ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(Fo,ClientWidth/ClientHeight,NearClipping,FarClipping);
end;

procedure TMainForm.SetupGL;
begin
glClearColor(0.0,0.0,0.0,0.0);
//glColor3f(1.0,0,0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glEnable (GL_TEXTURE_2D);
fTexture := TglBitmap2D.Create;
fTexture.LoadFromFile ('icon-64.bmp');
fTexture.GenTexture;
end;

procedure TMainForm.TrackBarChange(Sender: TObject);
begin
R := TrackBar.Position;
R2 := TrackBar1.Position;
Fo := TrackBar2.Position;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
dc := GetDC(Handle);
if not InitOpenGl then
Application.Terminate;
hrc := CreateRenderingContext(dc,[opDoubleBuffered],32,24,0,0,0,0);
ActivateRenderingContext(dc,hrc);
SetupGL;
Application.OnIdle := IdleHandler;
end;

end.
Nater вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[OpenGL, Delphi] Добавление текстур на грани куба newStudent Помощь студентам 0 03.12.2010 00:50
наложение текстур в OpenGL FJFray Мультимедиа в Delphi 1 23.10.2010 12:40
Наложение нескольких текстур в OpenGL Krechet Мультимедиа в Delphi 4 06.05.2010 15:30
OpenGL некорректное наложение текстуры Selestis Мультимедиа в Delphi 1 03.02.2009 19:59
Создание текстур KLOP Мультимедиа в Delphi 12 28.01.2009 22:36