Текущий архив: 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.52 MB
Время: 0.038 c