Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - kosmatkao

Strony: [1]
1
Sztuczna inteligencja / Odp: AI które się uczy.
« dnia: Grudzień 09, 2009, 23:38:03 »
Też uważam, że prosta sieć neuronowa na początku wystarczy. Wiem z doświadczenia bo nie tylko czytałem ale też zastosowałem w grze, gdzie było dużo parametrów rozgrywki i mało chęci na pisanie pełnego algorytmu decyzyjnego. A uczyłem się z tej świetnej strony: http://nrn.prv.pl/

PS: Jeśli dobrze zaprojektujesz i użyjesz SSN to otrzymasz błyskawiczny, rozszerzalny, łatwy do podziału na poziomy trudności, uczący się (sam lub od kogoś) algorytm, który Cię zaskoczy;)

2
OpenGL / Odp: [Delphi + OpenGL] Zakrzywienia na grafikach tga
« dnia: Październik 31, 2009, 21:33:02 »
Dzięki chłopaki, oczywiście pomogło, rzut ortogonalny idealnie się sprawdził.

Dla zielonych kilka linijek mam nadzieję pomocnego kodu.

  //RYSOWANIE 3D----------------------------------------------------------------
  glLoadIdentity();
  glMatrixMode(GL_PROJECTION);
  glFrustum(-rpLP, rpLP, -rpGD, rpGD, rpB, rpD);

  glEnable(GL_DEPTH_TEST);
  glEnable(GL_LIGHTING);

  //...tutaj tworzymy scenę 3D

  //RYSOWANIE 2D----------------------------------------------------------------
  glLoadIdentity();
  glMatrixMode(GL_MODELVIEW);
  glOrtho(0, panRozgrywkaGL.Width, panRozgrywkaGL.Height, 0, -1, 1);

  glDisable(GL_ALPHA_TEST);
  glDisable(GL_LIGHTING);

  //...a tutaj 2D

Nie jestem pewien czy światło ma wpływ na te zakrzywienia ale napewno nie jest potrzebne przy rysowaniu GUI

Dzięki jeszcze raz i pozdrawiam!

3
OpenGL / [Delphi + OpenGL] Zakrzywienia na grafikach tga
« dnia: Październik 28, 2009, 16:55:20 »
Witam!

To mój pierwszy post na tym forum, więc proszę o odrobinę tolerancji. Oczywiście zastosuję się do wszystkich rad i uwag.

Otóż cała rzecz dotyczy poniższego obrazka, który jest częścią screena z powstającej gry. Technologia Delphi plus OpenGL.



Na obrazku widoczne są wyraźne zakrzywienia na grafice przycisków. Klika uwag odnośnie ich:
- niektóre przyciski zamiast się porządnie wykrzywić po prostu znikają (nie na każdym komputerze)
- obrazki wyświetlane są płasko na panelu gry po przeliczeniu współrzędnych 3d na 2d ekranu
- obrazki są w formacie tga i wyświetlane z blendem, kiedy wyświetlam bez blendu to wiadomo, jest wokół nich ramka ale zakrzywienia znikają
- zakrzywienia nie występują na każdym komputerze, co mogłoby sugerować problem sterowników karty graficznej lub problem samej karty
- to dopiero ciekawe: na rodzaj, ilość i kształt zakrzywień ma wpływ obrót kamerą świata, z tym ze na każdym komputerze inaczej
- na komputerze na którym pracuje, nie ma żadnych tego typu efektów (mam kartę GeForce 7100GS czyli nic szczególnego, u kolegi na 10 razy lepszej są zakrzywienia)

Być może ktoś z Was spotkał się już z analogicznym problemem. Bardzo proszę o rychłą odpowiedź. Chętnie odpowiem na wszelkie pytania uszczegóławiające.

Poniżej zamieszam kilka linijek kodu, którego używam przy pracy z openGl w Delphi. Może tu jest pies pogrzebany...

Podczas inicjowania GLa:
  //ustawienie sposobu wykonywania przekształceń w Open GL
  glMatrixMode(GL_PROJECTION); //macierz rzutowania

  //tryb1
  rpLP := 1.2;
  rpGD := 1;
  rpB := 4;
  rpD := 30;
  //parametry rzutowania perspektywicznego
  glFrustum(-rpLP, rpLP, -rpGD, rpGD, rpB, rpD);

  //ponowne ustawienie sposobu wykonywania przekształceń w Open GL
  glMatrixMode(GL_MODELVIEW); //macierz modelowania

  //ustawienie kierunku tworzenia wierzchołków wielokątów
  glFrontFace(GL_CW);

  //ukrywanie tylnych ścian
  glCullFace(GL_BACK);

  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  //glColor4f(0.5, 0.5, 0.5, 1.0);
  //glBlendFunc(GL_SRC_ALPHA, GL_ONE);

  //glClearColor(0, 0.0, 0.6, 0); // Kolor tla
  glClearColor(0, 0, 0, 0); // Kolor tla
  glColor3f(1.0, 1.0, 1.0);

  //oświetlenie
  glEnable(GL_LIGHTING);
  glLightfv(GL_LIGHT0, GL_AMBIENT, @swOtaczajace);
  glLightfv(GL_LIGHT0, GL_DIFFUSE, @swRozproszone);
  glLightfv(GL_LIGHT0, GL_SPECULAR, @swOdbite);
  //lampa0 - z góry na planszę
  glGrafika.swX := 0.5;
  glGrafika.swY := 5.0;
  glGrafika.swZ := 30.0;
  swPozycja[0] := glGrafika.swX;
  swPozycja[1] := glGrafika.swY;
  swPozycja[2] := glGrafika.swZ;
  swPozycja[3] := 1.0;
  glLightfv(GL_LIGHT0, GL_POSITION, @swPozycja);
  glEnable(GL_LIGHT0);
  //lampa1
  {
  glGrafika.swX := 0.5;
  glGrafika.swY := 5.0;
  glGrafika.swZ := 50.0;
  swPozycja[0] := glGrafika.swX;
  swPozycja[1] := glGrafika.swY;
  swPozycja[2] := glGrafika.swZ;
  swPozycja[3] := 1.0;
  glLightfv(GL_LIGHT1, GL_POSITION, @swPozycja);
  glEnable(GL_LIGHT1);}

  glEnable(GL_COLOR_MATERIAL);
  glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);

  glMaterialfv(GL_FRONT, GL_SPECULAR, @swOdblaski);
  glMateriali(GL_FRONT, GL_SHININESS, 128);

Wczytywanie grafik TGA (pewnie znajomy kod):
function LoadTGATexture(Filename: String; var Texture: GLuint; LoadFromResource : Boolean): Boolean;
var
  TGAHeader : packed record   // Header type for TGA images
    FileType     : Byte;
    ColorMapType : Byte;
    ImageType    : Byte;
    ColorMapSpec : Array[0..4] of Byte;
    OrigX  : Array [0..1] of Byte;
    OrigY  : Array [0..1] of Byte;
    Width  : Array [0..1] of Byte;
    Height : Array [0..1] of Byte;
    BPP    : Byte;
    ImageInfo : Byte;
  end;
  TGAFile   : File;
  bytesRead : Integer;
  image     : Pointer;    {or PRGBTRIPLE}
  Width, Height : Integer;
  ColorDepth    : Integer;
  ImageSize     : Integer;
  I : Integer;
  Front: ^Byte;
  Back: ^Byte;
  Temp: Byte;
  NumBytes : Integer;
  ResStream : TResourceStream;      // used for loading from resource
begin
  result :=FALSE;
  GetMem(Image, 0);
  if LoadFromResource then // Load from resource
  begin
    try
      ResStream := TResourceStream.Create(hInstance, PChar(copy(Filename, 1, Pos('.', Filename)-1)), 'TGA');
      ResStream.ReadBuffer(TGAHeader, SizeOf(TGAHeader));  // FileHeader
      result :=TRUE;
    except on
      EResNotFound do
      begin
        MessageBox(0, PChar('File not found in resource - ' + Filename), PChar('TGA Texture'), MB_OK);
        Exit;
      end
      else
      begin
        MessageBox(0, PChar('Unable to read from resource - ' + Filename), PChar('BMP Unit'), MB_OK);
        Exit;
      end;
    end;
  end
  else
  begin
    if FileExists(Filename) then
    begin
      AssignFile(TGAFile, Filename);
      Reset(TGAFile, 1);

      // Read in the bitmap file header
      BlockRead(TGAFile, TGAHeader, SizeOf(TGAHeader));
      result :=TRUE;
    end
    else
    begin
      MessageBox(0, PChar('File not found  - ' + Filename), PChar('TGA Texture'), MB_OK);
      Exit;
    end;
  end;

  if Result = TRUE then
  begin
    Result :=FALSE;

    // Only support uncompressed images
    if (TGAHeader.ImageType <> 2) then  { TGA_RGB }
    begin
      Result := False;
      CloseFile(tgaFile);
      MessageBox(0, PChar('Couldn''t load "'+ Filename +'". Compressed TGA files not supported.'), PChar('TGA File Error'), MB_OK);
      Exit;
    end;

    // Don't support colormapped files
    if TGAHeader.ColorMapType <> 0 then
    begin
      Result := False;
      CloseFile(TGAFile);
      MessageBox(0, PChar('Couldn''t load "'+ Filename +'". Colormapped TGA files not supported.'), PChar('TGA File Error'), MB_OK);
      Exit;
    end;

    // Get the width, height, and color depth
    Width  := TGAHeader.Width[0]  + TGAHeader.Width[1]  * 256;
    Height := TGAHeader.Height[0] + TGAHeader.Height[1] * 256;
    ColorDepth := TGAHeader.BPP;
    ImageSize  := Width*Height*(ColorDepth div 8);

    if ColorDepth < 24 then
    begin
      Result := False;
      CloseFile(TGAFile);
      MessageBox(0, PChar('Couldn''t load "'+ Filename +'". Only 24 bit TGA files supported.'), PChar('TGA File Error'), MB_OK);
      Exit;
    end;

    GetMem(Image, ImageSize);

    if LoadFromResource then // Load from resource
    begin
      try
        ResStream.ReadBuffer(Image^, ImageSize);
        ResStream.Free;
      except
        MessageBox(0, PChar('Unable to read from resource - ' + Filename), PChar('BMP Unit'), MB_OK);
        Exit;
      end;
    end
    else         // Read in the image from file
    begin
      BlockRead(TGAFile, image^, ImageSize, bytesRead);
      if bytesRead <> ImageSize then
      begin
        Result := False;
        CloseFile(TGAFile);
        MessageBox(0, PChar('Couldn''t read file "'+ Filename +'".'), PChar('TGA File Error'), MB_OK);
        Exit;
      end;
    end;
  end;

  // TGAs are stored BGR and not RGB, so swap the R and B bytes.
  // 32 bit TGA files have alpha channel and gets loaded differently
  if TGAHeader.BPP = 24 then
    NumBytes := 3
  else
    NumBytes := 4;

  for I :=0 to Width * Height - 1 do
  begin
   Front := Pointer(Integer(Image) + I*NumBytes);
   Back := Pointer(Integer(Image) + I*NumBytes + 2);
   Temp := Front^;
   Front^ := Back^;
   Back^ := Temp;
  end;
  if TGAHeader.BPP = 24 then
    Texture :=CreateTexture(Width, Height, GL_RGB, Image)
  else
    Texture :=CreateTexture(Width, Height, GL_RGBA, Image);
  Result :=TRUE;
  FreeMem(Image);
end;

Rysowanie GLa:
  //zeruje bufor ekranu i bufor głębi
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

  //resetuje macierz widoku modelu
  glLoadIdentity();

  //zoom wzdłuż osi X, Y, Z
  glTranslatef(zoomX, zoomY, zoomZ);

  //obrot wokół kazdej osi
  glRotatef(obrotX, 1, 0, 0);
  glRotatef(obrotY, 0, 1, 0);
  glRotatef(obrotZ, 0, 0, 1);

  //włączenie, poinformowanie OpenGL o braku rysowania płaszczyzn
  //zainicjowanych funkcją glCullFace() ? brak obliczeń dla niewidocznych stron
  glEnable(GL_CULL_FACE);

  glEnable(GL_TEXTURE_2D);
  glDisable(GL_TEXTURE_1D);
  glEnable(GL_DEPTH_TEST);

Rysowanie przycisku:
  GetOGLPos(x, y, X1, Y1, Z1, GL_ALPHA);
  GetOGLPos(x + w, y, X2, Y2, Z2, GL_ALPHA);
  GetOGLPos(x + w, y + h, X3, Y3, Z3, GL_ALPHA);
  GetOGLPos(x, y + h, X4, Y4, Z4, GL_ALPHA);

  //glDisable(GL_ALPHA_TEST);

  glPushMatrix;
  glColor(1.0, 1.0, 1.0);
  //gora
  glBindTexture(GL_TEXTURE_2D, tex);
  glBegin(GL_QUADS);
    glNormal3f(0.0, 1.0, 1.0);
    glTexCoord2f(0, 0); glVertex3f(X4, Y4, Z4);
    glTexCoord2f(0, kopie); glVertex3f(X1, Y1, Z1);
    glTexCoord2f(kopie, kopie); glVertex3f(X2, Y2, Z2);
    glTexCoord2f(kopie, 0); glVertex3f(X3, Y3, Z3);
  glEnd();
  glPopMatrix;

  glBindTexture(GL_TEXTURE_2D, 0);

Bardzo dziękuję za wszelka podpowiedź!

Strony: [1]