.[ ČeskéHry.cz ].
glTexImageXY

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
KuboSVK



Založen: 13. 03. 2008
Příspěvky: 40

PříspěvekZaslal: 31. říjen 2009, 00:58:29    Předmět: glTexImageXY Odpovědět s citátem

Mam volumetricke data (CT ludskeho tela) ulozene na pravidelnej mriezke. Kazdy voxel (vrchol v danej mriezke) obsahuje celociselnu hodnotu v intervale 0..255, t.j. 1 byte. Tuto mriezku chcem reprezentovat pomocou 3D textury. Nasledne vo fragment shaderi z nej ziskavam dane hodnoty, s ktorymi dalej pracujem. Fragment shader mi vsak stale vracia hodnotu 0 pre lubovolny bod mriezky. Neviete, kde moze byt problem ? Som celkom novy v OpenGL. Stale mam problem s pochopenim vyznamu parametrov prikazu glTexImageXY - najma format a internalformat. Kod mam nasledovny:

FILE* fp = fopen(volumeFileName, "rb");
volumeData = new GLubyte[256*256*256]; // mriezka rozmerov 256*256*256
fread((void*)volumeData, sizeof(GLubyte), 256*256*256, fp);
fclose(fp);

glGenTextures(1, &volumeTexture);
glBindTexture(GL_TEXTURE_3D, volumeTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER);
glTexImage3D(GL_TEXTURE_3D, 0, GL_R, 256, 256, 256, 0, GL_R, GL_UNSIGNED_BYTE, volumeData);

Fragment shader:

value = texture3D(data, position); - stale vracia nulove hodnoty
Parameter position je urcite spravne.

Dik za radu
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 31. říjen 2009, 06:40:53    Předmět: Odpovědět s citátem

GL_R rozhodně není správný parametr formátu.

InternalFormat určuje, jakého typu jsou pixely.
Format určuje, jaké tam jsou barevné kanály, tedy zejména jejich pořadí.

InternalFormat dáš jeden z těchto, podle toho, jak chceš interpretovat data:
- GL_R8: Při vzorkování (texture3D) normalizuje (dělí číslem 255) barvy pixelů do rozsahu <0, 1>.
- GL_R8_SNORM: (signed normalized) To samé, akorát dále hodnotu vynásobí dvěma a odečte 1, tj. dostaneš rozsah <-1, 1>.
- GL_R8UI: Vzorkování vrací původní 8bit unsigned integer hodnoty tj. <0, 255>, potřebuješ na to ale typ sampleru isampler3D.
- GL_R8I: To samé, akorát vrací signed integer tj. <-128, 127>.

Format nastavíš na GL_RED, tam jinou možnost nemáš.

Všechny varianty vyžadují buď OpenGL 3.0 nebo GL_ARB_texture_rg.
UI/I varianty vyžadují navíc buď OpenGL 3.0 nebo GL_EXT_texture_integer.
SNORM varianta vyžaduje navíc buď OpenGL 3.1 nebo GL_EXT_texture_snorm.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1050

PříspěvekZaslal: 31. říjen 2009, 09:57:23    Předmět: Odpovědět s citátem

kontrolujes error cez glGetError()? to by sa malo volat aspon raz za jednu snimku aby sa vedelo ze je vsetko v poriadku.

ked sa dostanem ku kompu pastnem ti sem kod s fungujucim kodom. inak internal format mozes pouzit aj GL_LUMINANCE to iset aj pre format.

EDIT: moj kod na 3D texturu.
kód:
glGenTextures(1, &textura);
    glBindTexture(GL_TEXTURE_3D, textura);
    glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE, 256, 256, 256, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, data);
    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
KuboSVK



Založen: 13. 03. 2008
Příspěvky: 40

PříspěvekZaslal: 31. říjen 2009, 23:43:59    Předmět: Odpovědět s citátem

Nemohlo by to byt aj takto ?

glTexImage3D(GL_TEXTURE_3D, 0, 1, 256, 256, 256, 0, GL_RED, GL_UNSIGNED_BYTE, volumeData);

Ta jednotka ako 3. parameter udava, ze v datach je iba jeden color component.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
nou



Založen: 28. 07. 2007
Příspěvky: 1050

PříspěvekZaslal: 1. listopad 2009, 00:34:32    Předmět: Odpovědět s citátem

hej mohlo.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna