Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: 3D:tä OpenGL:ää käyttäen

Shark90 [06.11.2009 08:17:41]

#

Täällä Putkassahan on jo 2D esimerkki noiden yhteiskäytöstä, mutta näkyy vain harmaa tausta kun yritän sen saada piirtämään 3D-kuution. Mitä pitäisi huomioida kun vaihdetaan 2D piirrosta 3D:hen?

float vertex[8][3]={
{-1,-1,-1},{1,-1,-1},{-1,1,-1},{1,1,-1},
{-1,-1,1}, {1,-1, 1},{-1,1, 1},{1,1, 1}};
int index[6*4]={ 0,2,3,1,  4,5,7,6,  5,1,3,7,  4,6,2,0,  7,3,2,6,  4,0,1,5 };

glBegin(GL_QUADS);
int i;
for (i=0; i<6*4; i++)
{
  glVertex3f(vertex[index[i]][0], vertex[index[i]][1], vertex[index[i]][2]);
}
glEnd();

Sisuaski [06.11.2009 08:40:58]

#

Tuosta koodista ei näy syytä miksei näytöllä näkyisi mitään. Mahdollisuuksia on esim. että kuutio piirtyy koko näytön kokoisena tai jää kuvakulman taakse tai se on niin kaukana tai lähellä että sitä ei näytetä.
Yleensä 3D-piirtoa varten asetetaan käyttöön perspektiiviprojektio (esim. funktiolla gluPerspective tai glFrustum) ja siirretään kuvakulmaa kauemmas (esim. glTranslatef(0,0,-5)) jotta piirretyt asiat näkyvät kameran edessä. Mikäli nämä asiat eivät tunnu tutuilta niin suosittelen lukemaan perusasiat jostain OpenGL-oppaasta.

Mikäli asia ei selviä niin pastea enemmän koodiasi tänne niin virhekohta saattaa löytyäkin.

Metabolix [06.11.2009 08:46:24]

#

Oletko asettanut perspektiivin oikein? Oletko siirtynyt glTranslatella jonnekin? Nythän piirrät kuutiosi origon eli katselukohdan ympärille, jolloin et voi nähdä sitä. (Muista, että vain sivun etupuoli piirtyy, ellet erikseen säädä muuta!)

Oppaassani näytetään, miten SDL ja OpenGL toimivat yhdessä. Varsinaista OpenGL:n käyttöä voit opetella jostain OpenGL-oppaasta, SDL ei vaikuta sillä piirtämiseen mitenkään. Yksi vaihtoehto alkuun on Suomipelit.comin OpenGL-opas. Koska käytät SDL:ää, sinun tarvitsee huomioida vain gl-alkuiset funktiot; kyseinen opas on tehty Windowsille ilman SDL:ää, joten matkalla on monta aivan turhaa mutkaa.

Shark90 [10.11.2009 09:42:31]

#

Kuinkas muuten texturoidaan esim. 3Dkuutio siten, että yhdellä kuvalla (SDL_surfacella) yksi sivu yhdellä, ja toinen toisella kuvalla.

Kesken piirron eri tekstuurin sitominen glBindTexture:lla ei ainakaan auta...

Sisuaski [10.11.2009 12:13:44]

#

Funktioiden glBegin ja glEnd kutsujen välissä ei saa vaihtaa tekstuuria, joten jos käytät niitä piirtoosi, sinun on jokaisen sivun kohdalla asetettava tekstuuri, aloitettava piirto glBeginillä, piirrettävä sivu ja lopetettava sivun piirto glEndillä.

Tämän pitäisi toimia, mutta tapa on varsin epätehokas. Parempi tapa olisi yhdistää tekstuurit yhdeksi kuvaksi ja viitata jokaisen sivun kohdalla haluttuun osaan tekstuuria tekstuurikoordinaateilla.

Vastaus

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

Tietoa sivustosta