Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Вниз

OpenGL - Создание текстур   Найти похожие ветки 

 
Cash ©   (2005-12-01 17:39) [0]

whatsup!
Люди, сведающие в опене, поделитесь пожалуста наработками,
кто как текстуры создает под опеном?

Я вот надыбал один вариант, когда текстура создается
путем прямой перезаписи RGB элементов пикселей из TBitMap с
добавлением альфа канала в байтовый масив. А потом создается идентификатор типа UInt. Но не нравится мне там отображение,
альфа канал на краях текстуры сливается и получается лаг.
Вот таким макаром:

 glGenTextures(1,FTexture);
 glBindTexture(GL_TEXTURE_2D,FTexture);
 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
 gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA,RealWidth,RealHeight,
                   GL_RGBa,GL_UNSIGNED_BYTE,pBits);


Что то не так?


 
Дурачок   (2005-12-01 19:10) [1]

Я воопщето текстуры создаю в фотожопе,=) чего и тебе советую =)


 
XProger ©   (2005-12-01 19:43) [2]

"Что то не так?"
Баг в ДНК не позволяющий тебе выучить "велийкий и могучий", вследствии чего ты не способен прочитать книгу Краснова по OpenGL.

P.S.
Какой вопрос, такой и ответ...


 
Фео   (2005-12-01 22:07) [3]

http://aw.mirg.ru/Articles/Files/General/0001/index.htm
может это тебе поможет...


 
Cash ©   (2005-12-02 08:49) [4]

Дурачок   (01.12.05 19:10) [1]:
Неее, фотошоп - это для буржуев, :)))
я их в MS Paint -е шлепаю! ;)

XProger ©   (01.12.05 19:43) [2]:
Мы с Брежевым очень похожи: и он и я книг не читаем! :)
А вопрос в другом был: "Люди, сведающие в опене, поделитесь пожалуста наработками,
кто как текстуры создает под опеном?"
.
не внимательный ты наш! :)))

Фео   (01.12.05 22:07) [3]:
Я благодарю за ссылку, но...!

Всетаки из за невнимательности люди часто наезжают не на тех!
Я всетаки просил поделиться прямым опытом:
"Кто как предпочитает создавать текстуры в OGL."

Все общедоступные места я уже облазил!
Поэтому и не написал что то вроде этого "... и / или дайте ссылку".
Руки то у меня ростут от куда надо, и поисковиком (не яндексом - ][...яндексом там каким то, а самой крутой и новой системой - "nigma.ru") пользоваться умею!
Мне интересен реальный опыт, всетаки!


 
Frost (w/o pass)   (2005-12-02 12:15) [5]


> а самой крутой и новой системой - "nigma.ru"


Поиск среди примерно 1"052"227"229 русскоязычных документов по всему миру это круто? Заметь, РУССКОЯЗЫЧНЫХ, т.е. 90% инфы ты уже лишаешься.


 
Фео   (2005-12-02 13:54) [6]

Cash, помоему логично будет, что если я описал, как с текстурами рабтать, то я с ними так и работаю ;)


 
ancara ©   (2005-12-02 14:12) [7]


> альфа канал на краях текстуры сливается и получается лаг.

 Возможно у Вас то, о чем я думаю...
 Поподробнее, пожалйста, как это выглядит, с чем сливается? Может скрин, но только не большой, чтоб сам эффект было видно?


 
Cash ©   (2005-12-02 16:21) [8]

Frost (w/o pass)   (02.12.05 12:15) [5]:
Буржуйский я знаю тоже, и базарить, и говорить на нем умею,
а про чтение уж и слов нет. Токма орфография - мой самый
заклятый противник во всех языках! :)))
НО!!! Уважаю, более, русские или украинские издания,
в последних столько всяческих примочек, обхохочешься!
А если что ангицкое понадобится, то мыльным ( http://search.mail.ru/ ) поиском пользуюсь,
он в сайтах по всей Земле ищет круче, на мой взгляд.

ancara ©   (02.12.05 14:12) [7]:
Явление, подобное сглаживанию картинки, когда содержимое
ближних пикселей смешивается в одно среднее зачение.
Тем самым, там, где кончается область цвета clLime - альфы,
и начинается видимая область(другими цветами), в результате
наблюдаются жуткие зеленые края.


 
П7   (2005-12-02 16:28) [9]

Можно вопрос? А в Интернете люди наверное абстрактно-виртуальный опыт в статьях и сходниках оставляют? А вот если на форуме, то да, это конечно реальный опыт.


 
ancara ©   (2005-12-02 16:54) [10]

Ага, это не то, о чем я думал, но эффект имеет место быть.
 Я его как-то раньше не замечал... Пока эксперементировал, пришло в голову два решения, если их так можно назвать:
 1 Не красить прозрачную область в Lime, а оставлять там картинку как есть.
 2 Использовать Nearest - фильтрацию текстур (ужасно выглядит :).

Насчет первого варианта:
 зачем Lime? Лучше ИМХО сразу заготовить 32-битную картинку с альфой, сохранить, скажем в TGA, и спокойно ее оттуда читать, чем в ран-тайме искать в картинке цвет lime и на лету формировать альфа-канал, это ж медленно? Или я чего-то не понял?


 
Кефир87 ©   (2005-12-02 17:35) [11]

Как в библии написанно так и делаю. Что там сложного то?! 4 ОГЛ функции запомнить и понять...


 
Cash ©   (2005-12-02 18:44) [12]

П7   (02.12.05 16:28) [9]:
... абстрактно-виртуальный ...
НУ ДА!!! П7, я всегда знал, что вы меня поймете колллллега! :)))

Реальный, нереальный, мне просто интересно узнать от первоисточника.
У тебяж тоже опыт есть, так именно он мне и интересен,
а статьи люди лизать друг у друга любят.

ancara ©   (02.12.05 16:54) [10]:
Да, ты все правильно понял. Но мне необходимо создание текстур именно из данных в ОП.

Тут теперь видно два маленьких вывода(предположения):
1) Люди у нас "жадные", делиться не хотят. Это радует не сильно.
   А мож это и не жадность, а страх, за то, что типа скажут:
     "Ну ты чел. дал.... Это типа ламерский способ, который все знают, но никто не юзает!".
2) (ну, не вывод, а вытекающий вопрос) А что, от этого эффекта размытия
нельзя избавиться?


 
Кефир87 ©   (2005-12-02 19:02) [13]

Задалбал! 8)

unit uTextures;

interface
uses
 OpenGL, Jpeg, Windows, Graphics;

type
 TBGR = record
   b,g,r : Byte;
 end;

 TRGBA = record
   r,g,b,a:Byte;
 end;

 TBGRarr  = array[0..0] of TBGR;
 TRGBAarr = array[0..0] of TRGBA;

const
 GL_BGR = $80E0;

function gluBuild2DMipmaps(Target: GLenum; Components, Width, Height: GLint; Format, atype: GLenum; Data: Pointer): GLint; stdcall; external glu32;
procedure glGenTextures(n: GLsizei; var textures: GLuint); stdcall; external "opengl32.dll";
procedure glBindTexture(target: GLenum; texture: GLuint); stdcall; external "opengl32.dll";

function GenTexture(p:Pointer; w,h:Integer;b:Byte;mode:GLuint):GLuint;
function LoadJPG(const FileName : string):GLuint;
function LoadBMP24(const BMP24 : string):GLuint;
function LoadSprite(const BMP24 : string):GLuint;
function LoadJPGTexture(Filename: String): GLuint;

implementation

function LoadSprite;
var
 bf   : TBitmapFileHeader;
 bi   : TBitmapInfoHeader;
 f    : file of Byte;
 size : Cardinal;
 p,a  : Pointer;
 x    : Integer;
begin
 Result := 0;
 AssignFile(f, BMP24);
 Reset(f);

 BlockRead(f, bf, sizeof(bf));

 if bf.bfType = $4D42 then
 begin
   BlockRead(f, bi, sizeof(bi));

   if bi.biBitCount = 24 then
   begin
     size := bi.biWidth*bi.biHeight*3;
     GetMem(p, size);
     BlockRead(f, p^, size);
     GetMem(a, bi.biWidth*bi.biHeight*4);

     for x := 0 to bi.biWidth*bi.biHeight-1 do
     begin
       TRGBAarr(a^)[x].r := TBGRArr(p^)[x].r;
       TRGBAarr(a^)[x].g := TBGRArr(p^)[x].g;
       TRGBAarr(a^)[x].b := TBGRArr(p^)[x].b;

       if (TBGRArr(p^)[x].r = 255)and(TBGRArr(p^)[x].g=0)and(TBGRArr(p^)[x].b = 255)then
       begin
         TRGBAarr(a^)[x].a := 0;
         TRGBAarr(a^)[x].r := 0;
         TRGBAarr(a^)[x].g := 0;
         TRGBAarr(a^)[x].b := 0;
       end else
           TRGBAarr(a^)[x].a := 255;

     end;

     Result := GenTexture(a, bi.biWidth, bi.biHeight, 32, GL_RGBA);

     FreeMem(a);
     FreeMem(p);
   end;
 end;

 CloseFile(f);
end;

function LoadBMP24;
var
 bf   : TBitmapFileHeader;
 bi   : TBitmapInfoHeader;
 f    : file of Byte;
 size : Cardinal;
 p    : Pointer;
begin
 Result := 0;
 AssignFile(f, BMP24);
 Reset(f);

 BlockRead(f, bf, sizeof(bf));

 if bf.bfType = $4D42 then
 begin
   BlockRead(f, bi, sizeof(bi));

   if bi.biBitCount = 24 then
   begin
     size := bi.biWidth*bi.biHeight*(bi.biBitCount div 8);
     GetMem(p, size);

     BlockRead(f, p^, size);

     Result := GenTexture(p, bi.biWidth, bi.biHeight, bi.biBitCount, GL_BGR);
   end;
 end;

 CloseFile(f);
end;

{------------------------------------------------------------------}
{  Load JPEG textures  by Jan Horn                                 }
{------------------------------------------------------------------}
function LoadJPGTexture(Filename: String): GLuint;
var
 Data : Array of LongWord;
 W, Width : Integer;
 H, Height : Integer;
 BMP : TBitmap;
 JPG : TJPEGImage;
 C : LongWord;
 Line : ^LongWord;
begin
 JPG:=TJPEGImage.Create;
 try
   JPG.LoadFromFile(Filename);
 except
   MessageBox(0, PChar("Couldn""t load JPG - ""+ Filename +"""), PChar("BMP Unit"), MB_OK);
   Result := 0;
   Exit;
 end;

 // Create Bitmap
 BMP:=TBitmap.Create;
 BMP.pixelformat:=pf32bit;
 BMP.width:=JPG.width;
 BMP.height:=JPG.height;
 BMP.canvas.draw(0,0,JPG);        // Copy the JPEG onto the Bitmap

 //  BMP.SaveToFile("D:\test.bmp");
 Width :=BMP.Width;
 Height :=BMP.Height;
 SetLength(Data, Width*Height);

 For H:=0 to Height-1 do
 Begin
   Line :=BMP.scanline[Height-H-1];   // flip JPEG
   For W:=0 to Width-1 do
   Begin
     c:=Line^ and $FFFFFF; // Need to do a color swap
     Data[W+(H*Width)] :=(((c and $FF) shl 16)+(c shr 16)+(c and $FF00)) or $FF000000;  // 4 channel.
     inc(Line);
   End;
 End;

 BMP.free;
 JPG.free;

 Result := GenTexture(@data[0], Width, Height, 32, GL_RGBA);
end;

function LoadJPG(const FileName : string):GLuint;
type
 TRGB = record
   r,g,b:Byte;
 end;

 TRGBarr = array[0..0] of TRGB;
var
 jpg : TJPEGImage;
 bmp : TBitmap;
 x   : Integer;
 i,j : Integer;
 p   : Pointer;
begin
 jpg := TJPEGImage.Create;
 jpg.LoadFromFile(FileName);

 bmp := TBitmap.Create;
 bmp.Assign(jpg);

 GetMem(p, jpg.Width*jpg.Height*3);

 x := 0;
 for i := 0 to jpg.Width-1 do
 begin
   for j := 0 to jpg.Height-1 do
   begin
     TRGBarr(p^)[x].r := TRGBAarr(bmp.Canvas.Pixels[i,j])[x].r;
     TRGBarr(p^)[x].g := TRGBAarr(bmp.Canvas.Pixels[i,j])[x].g;
     TRGBarr(p^)[x].b := TRGBAarr(bmp.Canvas.Pixels[i,j])[x].b;
     inc(x);
   end;
 end;

 Result := GenTexture(p, jpg.Width, jpg.Height, 24, GL_RGB);

 bmp.Free;
 jpg.Free;
 FreeMem(p);

end;  

function GenTexture(p:Pointer; w,h:Integer;b:Byte;mode:GLuint):GLuint;
begin
 glGenTextures(1, Result);
 glBindTexture(GL_TEXTURE_2D, Result);

 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_NEAREST);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_NEAREST);

 gluBuild2DMipmaps(GL_TEXTURE_2D, b div 8, w, h, mode, GL_UNSIGNED_BYTE, p);
end;

end.

Кое что от туда не работает. Что не помню. Кусок из нетленного шедевра
http://cwdev.mykm.ru/index.php?pg=project&prj=mtm
8))))


 
Cash ©   (2005-12-02 19:16) [14]

Кефир87 ©   (02.12.05 19:02) [13]:
СПАСИБА!
По скрину гама зашибенская.
И, опять же по скрину, видно, что там тоже текстурки с этим эффектом.

Не, а что, действительно нет способов получения четкой текстуры о OpenGL?
Так, чтобы каждый пиксель на своем месте был!


 
Кефир87 ©   (2005-12-02 19:36) [15]

Елы палы. Ну фильтр GL_NEAREST чем не устраевает? 8)


 
П7   (2005-12-02 19:42) [16]

Ну сгоняй на мой сайт, покопай исходники. Коих там достаточное количество. Там первоисточник, типа.. (:


 
XProger ©   (2005-12-02 20:08) [17]

Ну сгоняй на мой сайт, покопай исходники. Коих там достаточное количество. Там первоисточник, типа.. :)


 
Кефир87 ©   (2005-12-02 20:33) [18]

Ну сгоняй на мой сайт, покопай исходники. Коих там достаточное количество. Там первоисточник, типа.. 8)


 
Фео   (2005-12-02 23:24) [19]

Ну сгоняй на мой сайт, покопай исходники. Коих там достаточное количество. Там первоисточник, типа.. хз, у меня нет сайта :D


 
Cash ©   (2005-12-03 08:39) [20]

:)))
Ок. уболтали! :)))

Всем спасибо, я типа более менее, чё то накопал!



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.046 c
15-1154118328
QuickFinder
2006-07-29 00:25
2006.08.27
Commercial Open Source


8-1138057546
Змей
2006-01-24 02:05
2006.08.27
регулировка звука


1-1152522186
97
2006-07-10 13:03
2006.08.27
JvSearchFiles из Jedi


15-1154532828
MultiCreator
2006-08-02 19:33
2006.08.27
Спасение Delphi7


2-1154630337
Exit
2006-08-03 22:38
2006.08.27
Whois





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский