Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: OpenGL tekstuurit

Sivun loppuun

Nanoputki [19.12.2009 01:13:51]

#

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=sdl_gl_2

Eli tarkoitukseni oli ladata oppaan esimerkki ohjelmaa pohjana käyttäen sdl:n kautta tekstuurit openGL:lle. Suunnitelma kuitenkin tössähti lyhyeen kun kuvatiedoston lataaminen ei onnistunutkaan noin vain.

https://www.ohjelmointiputka.net/tiedostot/sdl_gl_2.c

Yritin ihan vain SDL_Surface *luo_kuva(void)funktiossa olevaa "s":n ladata suoraan bmp tiedoston. Sdl puolella homma meni hyvin mutta OGL näytti pelkkää mustaa. Kun taas kokeilin alphalla höystettyä png:tä ohjelma sammui molemmilla alustoilla lataus funktion jälkeiseen funktioon (kokeiltu erillaisia sijoituksia). Kuinka tämä sitten pitäisi tehdä? Manuaaliseta lataus funktiota bmp:stä mietin kyllä mutta olisiko jotain "oikeampaa" keinoa (ja kun bmp:ssä ei sitä alphaakaan ole)?

Ja tosiaan vähemmän kriittistä mutta kysytään nyt samalla että onko openGL:ssä SDL_BlitSurface:n kaltaisesti toimivaa funktiota joka siis piirtäisi tekstuuri pinnalta toiselle (tietyn alueen)?

Spongi [19.12.2009 10:11:39]

#

Jos kerran SDL:ää käytät, niin SDL_image on omasta mielestäni varsin pätevä kuvien lataamiseen, esimerkiks vaikka näitä png-formaatissa olevia. Alpha-kanavaa varten joudut kikkailemaan ja tarkistamaan mitä väriformaatteja glTexImage2D:lle annetaan, tästä selviää varmaan jotain. Alphan ottaminen käyttöön taas vaatii pari glEnable()-kutsua, jota varten mielestäni tämä selventää asiaa hyvin (ja vähän muutakin). Oletko muuten varma että piirretty tavarasi on varmasti ruudulla?

Nanoputki [19.12.2009 17:00:41]

#

ärrin murrin johtui näkäjään siitä että olin tuon maskcolorin mennyt heittämään vituiksi (oli kokeillut erillaisia juttuja kyllä siihenkin) mutta ilimeisesti tuon pitää olla osapuilleen juuri noin että formaatti muutos härötykset mnee oikein.

Metabolix [19.12.2009 21:17:30]

#

Jos tarkoitat, että menit muuttamaan MySDL_glTexImage2D-funktion sisältöä, niin nimenomaan siihen ei missään tapauksessa pidä koskea, jos ei aivan tarkkaan tiedä, mitä tekee. Funktio on aika tarkan kehityksen tulos. :)

Spongi [19.12.2009 22:30:59]

#

Oho tosiaan, en tuota koodia jaksanu laiskana ihmisenä lukea kokonaan, siellähän näyttäis tuo kikkailu olevan valmiina.

sdl_gl_2.c kirjoitti:

/* Tarkistetaan kuva. OpenGL:ää varten sivun pitää olla kahdella jaollinen. */

Pitääkö kuvan koko tosiaan olla jaollinen kahdella? Eikö sen pidä olla potenssiin kaks? (w & (w - 1)) Tosin uusimmat näyttikset osaa luultavasti käyttää minkämuotosia kuvia tahansa.

Metabolix [19.12.2009 22:54:37]

#

Spongi kirjoitti:

Pitääkö kuvan koko tosiaan olla jaollinen kahdella? Eikö sen pidä olla potenssiin kaks?

Ainakin OpenGL:n manuaali sanoo glTexImage2D:n kohdalla näin:

OpenGL:n manuaali kirjoitti:

width: Specifies the width of the texture image. Must be 2n+2(border) for some integer n.

Sisuaski [20.12.2009 10:49:48]

#

Manuaalista, josta Metabolix kopioi selityksen on mahdollisesti jäänyt potenssimerkki pois. Ainakin hieman vanhentunut referenssimanuaali sanoo saman tasan saman väitteen siinä muodossa, että 2n on muutettu 2^n:ksi.

En ole varma onko tämä asia tosiaan muuttunut jossain uudemmassa (3.x) standardissa, mutta ainakin vanhemmissa standardeissa kokojen tosiaan on oltava kakkosen potensseja ellei käytetä jotain laajennusta kuten ARB_texture_non_power_of_two tai ARB_texture_rectangle.

Lisäys: Kun nyt tarkistin niin näemmä ARB_texture_non_power_of_two-laajennuksen käyttä ei vaadi mitään erityisiä rituaaleja, eli jos se löytyy niin muita kuin kakkosen potenssin kokoisiakin tekstuureja saa käyttää normaalisti. Tuota laajennusta tukevat käytännössä kaikki nykyaikaiset näytönohjaimet, joten jos et piittaa, toimivatko ohjelmasi vanhahkolla raudalla niin sitten voinet jättää tuon koko-ongelman huomiotta. (Olet tosin parempi ihminen jos huolehdit myös vanhoista koneista. :)

Spongi [20.12.2009 11:06:57]

#

Kiva että tuo selkisi, aloinki jo ihmettelemään :)

Edit. Jaahas, firefoxilla tuo opengl:n oma manuaali toimii noiden merkkien kans, muttei google-chromella.

Metabolix [20.12.2009 11:37:45]

#

Itsekin kyllä ennen tiesin oikein, mutta en ole vuosiin osunut pikagoogletuksella yhteenkään toimivaan versioon manuaalista, joten väärä kaava on sitten iskostunut. Tosin nykyään tuota varmaan niin moni tukee, että enpä tiedä, kannattaako funktiota muuttaa. :)

Spongi [20.12.2009 12:21:20]

#

Ainakin Makegho valitteli irkissä erästä peliäni pari kuukautta sitten, ku ei tekstit toiminu, ja se johtu juurikin tuosta :P Ja minusta tuo on aika pöljää ajatella "kannattaako muuttaa", ku tarkistus on virheellinen.

Metabolix [20.12.2009 12:50:08]

#

Spongi kirjoitti:

Ainakin Makegho valitteli irkissä erästä peliäni pari kuukautta sitten, ku ei tekstit toiminu, ja se johtu juurikin tuosta :P

Selvä, korjaanpa sitten. Jotenkin sitä kuvittelisi, että nykyohjaimet (huonotkin) olisivat jo päässeet näistä rajoituksista yli.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta