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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2007, 02:39   #1
Skif
 
Регистрация: 08.04.2007
Сообщений: 9
По умолчанию OpenGl+Delphi,при загрузке текстуру сильно корежит

Помогите, пожалуйста, лаба-графика в делфе,создал 3д флаг, надо его покрыть текстурой. решил для начала потренироватся на шаре, написал всё так, как смог понять методу и то что смог накопать в хелпах и в инете...
Итог запускается только со второго раза, после 1-го выдаёт:

после 2-го:

вот чувствую-"истина где-то рядом" )), но где точно не знаю, думаю это динамическая переменая tex в LoadTexture.
Препод предложил использовать динам.массив, но я с ним еще не работал, боюсь косяков только больше станет, да и возится уже особо некогда, надо с текстурами разобратся и дальше по лабам двигать.
А вот и код:

Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OpenGL, ComCtrls, ExtDlgs;
type
  TForm1 = class(TForm)
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  TBit=array [0..5] of byte;
    Trgb=record
        b,g,r:byte;
    end;
    Trgba=record
        r,g,b,a:byte;
    end;
    Trgbmas=array[0..16384] of Trgb;
    Trgamas=array[0..16384] of Trgba;
    PrgbAmas=^Trgamas;
    Glar=array[0..3] of GLFloat;
  const
 s_coeffs:Array [0..3] of GLFloat = (1, 0, 0, 1);
 t_coeffs:Array [0..3] of GLFloat = (0, 1, 0, 1);

var
   Form1: TForm1;
   rgb: Trgbmas;
 Textures:array[0..1] of PrgbAmas=(nil,nil);
 tex:PrgbAmas;
 Ms:Extended;
  n:integer;
  Q,l:GLUquadricObj;
  rotate:Boolean;
  wX:single;
  wY:single;
  rX:single;
  rY:single;
  F:gluNurbsObj;

implementation

{$R *.dfm}

procedure LoadTexture(fn:String; j, alp:integer);
//function LoadTexture(fn:String;  alp:integer): integer;
Var
F: file of byte;
headr:TBit;
{j,}i,RGBs:integer;
begin
assignFile(F,Fn);
reset(F);
RGBs:=FileSize(f)-54;
//for j:=1  to 2{maxTextures} do
 { if Textures[j]=nil then
    begin
    Break;
    end;  }
    New(tex);
    Textures[j]:=tex;
    FillChar(headr,54,0);
    BlockRead(f,headr,54);
    BlockRead(f,RGB,RGBs);

    for i:=0  to (rgbs div 3) - 1 do
    begin
    tex[i].r:=RGB[i].r;
    tex[i].g:=RGB[i].g;
    tex[i].b:=RGB[i].b;
    tex[i].a:=alp;
    end;
   glpixelstorei(gl_unpack_alignment,4);
   CloseFile(f);
end;

procedure TForm1.FormPaint(Sender: TObject);
Var
hrc:HGLRC;
i:integer;
begin
hrc:=wglCreateContext(Canvas.Handle);
wglMakeCurrent(Canvas.Handle,hrc);
glClearColor(1,1,1,1);
glLineWidth(2);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.6,0.6,0.6);
   glRotatef(rX,0,1,0);
   glRotatef(rY,1,0,0);
   glRotatef(45,1,0,0);

glEnable(GL_TEXTURE_GEN_S);
gltexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_object_LINEAR);
//glTexGenFv(GL_S,GL_EYE_PLANE, S_coeffs);
glEnable(GL_TEXTURE_GEN_t);
gltexGeni(GL_t, GL_TEXTURE_GEN_MOdE, GL_object_LINEAR);
//glTexGendv(GL_t,GL_EYE_PLANE,t_coeffs);
glEnable(GL_TEXTURE_2D);
//glBindTexture(GL_TEXTURE_2D, Textures[0]);
glTexImage2D(Gl_texture_2D,0,4,64,64,0,gl_RGBA,GL_UNSIGNED_BYTE,Textures[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

  glPushMatrix;
  glBegin(GL_TRIANGLES);
  Q:=gluNewQuadric;
  gluQuadricDrawStyle(Q,Glu_fill);
  gluSphere(Q,0.9,44,44){(Q,0.4,0.4,1,28,28)};
  glEnd();
  glPopMatrix;
end;

procedure TForm1.FormCreate(Sender: TObject);
Var
pfd:TPixelFormatDescriptor;
nPixelFormat: Integer;
begin
FillChar(pfd, sizeof(pfd), 0);
nPixelFormat:=ChoosePixelFormat(Canvas.Handle, @pfd);
SetPixelFormat (Canvas.Handle,nPixelFormat, @pfd);
LoadTexture('Y:\015\015B\OpenGL03\Tesxtures\0.bmp',0,1);
LoadTexture('Y:\015\015B\OpenGL03\Tesxtures\8.bmp',1,1);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
wX:=X;
wY:=Y;
rotate:=true;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
rotate:=false;
form1.FormPaint(Form1);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  Var
hrc:HGLRC;
begin
if rotate then
begin
    rX:=rX+(X-wX)/2;
    rY:=rY+(Y-wY)/2;
    wX:=X;
    wY:=Y;
    form1.FormPaint(Form1);
    InvalidateRect(Form1.Handle,nil,false);
end;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
//gl
end;
end.
P.S. Если у кого найдется что-то толковое по openGl для делфи, буду очень благодарен, т.к. в методе очень сжато всё описано и не все команды работают
Skif вне форума Ответить с цитированием
Старый 27.11.2007, 08:40   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Ищи: "OpenGL Red Book (русская версия)", "Краснов М. - OpenGL в Delphi"
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Срочно подскажыте пожайлуста (OpenGL, Delphi) Nadjuha Помощь студентам 4 10.06.2008 08:12
Работа с текстурами. OpenGL в Delphi. Gambler Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 21.04.2008 01:19
Ошибка компонента TADOQuery при загрузке запроса из файла в Delphi 2006 WhiteKoS Помощь студентам 2 16.02.2008 15:07
Обработка XML строки при загрузке dbf в Delphi SereJa1020 БД в Delphi 1 18.12.2007 18:28
Ошибка при загрузке Delphi 6 bllem Общие вопросы Delphi 10 20.11.2006 20:37