|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
Vecis
Joined: 01 Jan 2007 Posts: 144
|
Posted: Sun Sep 06, 2009 3:19 pm Post subject: Nolasīt un parādīt obj failu bez ģeometrijas kļūdām |
|
Pagaidām izveidoju vienkāršu kodu lai nolasītu ģeometriju no .obj faila
(Python)
Code: |
verts=[]
tris=[]
def load_obj():
global verts, tris
a=[]
obj_file = file("E:\obj1.obj")
obj_file.seek(0)
for line in obj_file:
a=line.split()
if a != []:
cmd=a[0]
param=a[1:]
if cmd != "#" or cmd != "object" or cmd != "mtllib" or cmd != "g" or cmd != "usemtl":
if cmd=="v":
verts.append(param)
elif cmd=="f":
tris.append(param)
load_obj()
lverts=[]
ltris=[]
def add_verts(list):
temp=[]
for x, y, z in verts:
temp.append(float(x))
temp.append(float(y))
temp.append(float(z))
list.append(temp)
temp=[]
add_verts(lverts)
def add_tris(list):
temp=[]
for i1, i2, i3 in tris:
temp.append(int(i1)-1)
temp.append(int(i2)-1)
temp.append(int(i3)-1)
list.append(temp)
temp=[]
add_tris(ltris)
vertices = array(GL_BYTE, 3, lverts)
triangles = array(GL_UNSIGNED_BYTE, 3, ltris)
|
Eksportēju obj failus no 3ds max, parastas kastītes exportējas kā vajag, bet ja paņem ko sarežģītāku piemēram teapot vai sphere objekts vispār neparādās vai parādas kkādas nejēdzīgas formas, tā kā tam nav jāizskatās, kādam ir nojausma kas pa vainu? |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Sep 06, 2009 3:53 pm Post subject: |
|
Tev nevajadzīgas rindiņas kodā ir:
obj_file.seek(0) - fails pie atvēršanas jau ir 0'tā pozīcijā
if cmd != "#" or cmd != "object" or cmd != "mtllib" or cmd != "g" or cmd != "usemtl":
no šī if'a nav nekādas jēgas, jo tālāk esošais ifs tikai skatās "v" un "f" komandas.
Daudz ko var arī uzrakstīt daudz īsāk.
add_verts fjas izsaukuma vietā, piemēram var rakstīt:
Code: | lverts = [map(float, v) for v in verts] |
Un vai pēdējās divās rindiņās tiešām vajag GL_BYTE un GL_UNSIGNED_BYTE lietot?
Vai visu virsotņu koordinātes aprakstās ar veseliem skaitļiem no -128 līdz 127, un vai indeksa bufera vērtības ietilpst 0..255 intervālā? |
|
Back to top |
|
|
Vecis
Joined: 01 Jan 2007 Posts: 144
|
Posted: Mon Sep 07, 2009 5:52 pm Post subject: |
|
Nu man īsti sajēga nav, es pārveidoju code exampli
Bet paldies par to īso kodu, noderēs
Ko tad man īsti likt to GL_UNSIGNED_BYTE un GL_BYTE vietā? |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Mon Sep 07, 2009 6:30 pm Post subject: |
|
Tos datu tipus, kādos obj fails glabā 3d modeļa datus.
P.S. Varētu jau pateikt generic variantu tam, ko likt viņu vietā, bet gribētos, lai tu nedaudz RTFM. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Mon Sep 07, 2009 6:35 pm Post subject: |
|
GL_FLOAT un GL_INT/GL_SHORT
Bet tas ir fascineejoshi ka pat sito nejeedz- tas ir - copy paste ... _________________ Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552 |
|
Back to top |
|
|
Vecis
Joined: 01 Jan 2007 Posts: 144
|
Posted: Mon Sep 07, 2009 6:37 pm Post subject: |
|
Nu izmeklējos, pie vertices mēģināju gl_float, gl_unsigned_byte, gl_byte, bet nu visādi brīnumi tik parādās nevis tas ko vajag. Bet nu paskatīšos vēl varbūt kādu dienu uzrakšu.
@Storm: Ko es nejēdzu? Dotajā Python OpenGL ES examplī bija attiecīgie datu tipi ko jau teicu, tāpēc domāju ka kļūdām nevajadzētu būt
Edit: izmēģināju tavu variantu - melna bilde, neko nerāda. |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Mon Sep 07, 2009 6:46 pm Post subject: |
|
Ar OpenGL ES uzmanīgi. Ir divu veidu profili (tipa ES varianti) - viens, kurš supportē tikai floatus (GL_FLOAT), otrs, kurš supportē tikai fixed point skaiļus (GL_FIXED).
Parādi tā piemēra sourci, kurš strādā. Nevajag ar copy&paste nodarboties. Vajag palasīt dokumentāciju, saprast kas un kā, un tikai tad kodu rakstīt. Citādi bilde kā būs melna, tā arī paliks melna :)
Storm: runājot tavā valodā - tu fail. GL_INT/GL_SHORT. OpenGL'ā indeksus norāa ar unsigned tipiem :)
Last edited by bubu on Mon Sep 07, 2009 6:49 pm; edited 1 time in total |
|
Back to top |
|
|
Vecis
Joined: 01 Jan 2007 Posts: 144
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Mon Sep 07, 2009 6:50 pm Post subject: |
|
Aizmirsu piebilst - parādi kā tu veic zīmēšanu no saviem masīviem. |
|
Back to top |
|
|
Vecis
Joined: 01 Jan 2007 Posts: 144
|
Posted: Mon Sep 07, 2009 6:52 pm Post subject: |
|
Code: |
def initgl():
global render
#Initializes OpenGL and sets up the rendering environment
#creating texture
texture=glGenTextures(1)
glBindTexture(GL_TEXTURE_2D, texture)
glClearColorx(0,0,0,65536)# Set the screen background color.
glEnable( GL_CULL_FACE )# Enable back face culling.
glEnable( GL_TEXTURE_2D )# Enable texture2D
resize()# our function we made above
glTexCoordPointerb(texcoords)# the pointer to our texture coordiates
glMatrixMode( GL_MODELVIEW )
glEnableClientState( GL_VERTEX_ARRAY )# Enable vertex arrays.
glVertexPointerb(vertices)# Set array pointers.
glEnableClientState(GL_TEXTURE_COORD_ARRAY)
#glShadeModel( GL_SMOOTH )# smooth looks nice with low quality textures
glShadeModel( GL_FLAT )# Set the initial shading mode
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST )# no perspective correction
def redraw(frame):
global running,img1,size1
iFrame = frame
cameraDistance = 1000
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT )
if running:
glPushMatrix()
glMatrixMode( GL_TEXTURE )
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, size1[0], size1[1], 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, img1)
#this past is very important !!!
glTexEnvx( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE )
# Mipmapping must be disabled for each texture if not used
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR )
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR )
#otherwise the texture don't get replaced !!!
glLoadIdentity()
glMatrixMode( GL_MODELVIEW )
glLoadIdentity()
glTranslatex( 0 , 0 , -cameraDistance << 16)
glRotatex( iFrame << 16,1 << 16,0,0)
glScalef( 2, 2, 2 )
glDrawElementsub( GL_TRIANGLES, triangles )
glPopMatrix()
|
Zinu ka tas viss nav zīmēšana, bet nu ko vajag ir
Last edited by Vecis on Mon Sep 07, 2009 6:58 pm; edited 1 time in total |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Mon Sep 07, 2009 6:56 pm Post subject: |
|
brr, izlabo postu un lieto CODE, nevis QUOTE kodam. Pitonam identācija tak ir svarīga!
Savā kodā tu lieto funkcijas, kuras darbojas ar fixed point ES profilu. Tajā iepriekšējā pitona koda piemēra darbošanās notiek ar float'u ES profilu. Vēl trakāk - tu miksē tās ar float fjām (glTranslatex/glScalef). Tas ne pie kā laba nevedīs.
Tas tiešām tev strādāja ar kubu? Pamēģini nelietot fjas, kuras beidzās ar x burtu, un tā vietā lieto fjas, kuras beidzas ar f burtu. Vai arī otrādi, nelieto f, un lieto x visur. Tāpat arī glTexParameter* vajag lietot vienreiz - pie bildes ielādes, nevis ik katru zīmēšanas reizi.
Nelieto arī glTexParameterf, lai uzstādītu int tipa tekstūras parametrus. Lieto glTexParameteri fju.
Un vēl - glTexImage2D fja ir dārga fja. Tā sūta bildes datus uz videokarti/videoprocesoru. Nevjag to darīt ik katru kadru. To vajag darīt vienreiz, pie bildes ielādes (piemēram tavā glinit funkcijā).
Last edited by bubu on Mon Sep 07, 2009 7:12 pm; edited 5 times in total |
|
Back to top |
|
|
Vecis
Joined: 01 Jan 2007 Posts: 144
|
Posted: Mon Sep 07, 2009 6:58 pm Post subject: |
|
Izlabots,
nu paldies izlabošu, es nezināju kāda īsti ir starpība starp tiem f un x... |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Mon Sep 07, 2009 10:38 pm Post subject: |
|
bubu wrote: | OpenGL'ā indeksus norāa ar unsigned tipiem |
Well, taadaa gadiijumaa OGL = lol. Vai tad vins var suporteed indexu ar unsigned int maximaalo veertiibu? _________________ Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552 |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Mon Sep 07, 2009 11:11 pm Post subject: |
|
Storm, pat ja nesupportē (un ja arī kādreiz būs kartēm tik daudz atmiņas), izskatās tomēr normālāk, ja netiek kaut kādā maģiskā veidā atļauti lietot un apstrādāti negatīvi indeksi..
Tad jau drīzāk tu = LOL, ne OpenGL... _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Mon Sep 07, 2009 11:25 pm Post subject: |
|
Storm wrote: | Well, taadaa gadiijumaa OGL = lol. |
OGL šajā situācijā ir tikpat liels lol kā Direct3D 10 (un 9 arī visdrīzāk): ID3D10Device::IASetIndexBuffer:
Quote: | Format
[in] Specifies format of the data in the index buffer. The only formats allowed for index buffer data are 16-bit ( DXGI_FORMAT_R16_UINT) and 32-bit ( DXGI_FORMAT_R32_UINT) integers. |
fail again, Storm :) |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|