dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Nolasīt un parādīt obj failu bez ģeometrijas kļūdām
Goto page 1, 2, 3, 4  Next
 
dev.gamez.lv Forum Index -> OpenGL
View previous topic :: View next topic  
Author Message
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: 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
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: 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ā? Confused
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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. Smile
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: 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
View user's profile
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: 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. Neutral
@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 Wink
Edit: izmēģināju tavu variantu - melna bilde, neko nerāda.
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: Mon Sep 07, 2009 6:49 pm    Post subject:

Rekur example
http://mobilenin.com/pys60/resources/ex_3d_cube_simple.py
Nu nav īsti skaidrs, kas tad tur īsti jāliek un vai tiešām tas vai ģeometrija būs ne tā kā vajag atkarīgs no tā ko tur pielieku?
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: 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
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
Vecis



Joined: 01 Jan 2007
Posts: 144

PostPosted: 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
View user's profile Send e-mail
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: Mon Sep 07, 2009 10:38 pm    Post subject:

bubu wrote:
OpenGL'ā indeksus norāa ar unsigned tipiem Smile


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
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> OpenGL All times are GMT + 2 Hours
Goto page 1, 2, 3, 4  Next
Page 1 of 4

 
Jump to:  
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