Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.27;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.036 c
15-1154423861
VitV
2006-08-01 13:17
2006.08.27
Как обеспечить полную безопастность ICQ-общения?


1-1153111816
Степан
2006-07-17 08:50
2006.08.27
Цвет фона в ListView


2-1154609678
webpauk
2006-08-03 16:54
2006.08.27
TreeView select item


15-1154225165
eowl
2006-07-30 06:06
2006.08.27
Что случилось с Cos


2-1154930963
валет
2006-08-07 10:09
2006.08.27
word