en ainaskaan omalla koneella pystynyt lukemaan edellistä viestiä...että pitää kai yrittää uudestaan kirjoittaa..
eli homman nimi oli se että miten saadaan muutettua piste (x,y,z) pisteeksi (x1,y1) siten että 3d vaikutelma säilyy. samalla otetaan mukaan katsojan kuvakulma. mielellään c:lle ja ilman mitään vintoosan kirjastoja tai mitään valmiita opengl/direcx kirjastoja. eli pelkkä karkea koodin pätkä sinineen ja kosinineen..
eli homman nimi oli se että miten saadaan muutettua piste (x,y,z) pisteeksi (x1,y1) siten että 3d vaikutelma säilyy. samalla otetaan mukaan katsojan kuvakulma. mielellään c:lle ja ilman mitään vintoosan kirjastoja tai mitään valmiita opengl/direcx kirjastoja. eli pelkkä karkea koodin pätkä sinineen ja kosinineen..
Vastaukset 2
Vanhimmat
Kyseiseen ongelmaan on olemassa useampiakin erinlaisia algorithmeja, mutta tähän hätään ei tullut nyt yhtään mieleen. Netistä luulisi löytyvän algorithmeja, ja kirjojakin aiheesta on tehty useampiakin.
Yksi yksinkertainen tapa on tehdä niin että määritellään koordinaatiston origo kuvaruudun pinnalle keskelle ruutua, niin että z-akseli osoittaa katsojasta kohtisuoraan kuvaruudun läpi. Määritellään sopiva "katseluetäisyys" kuvaruudusta (v_dist) ja projisoidaan kuvaruudun takana olevan kappaleen pisteet kuvaruudun pinnalle.
silloin saadaan:
x1 = x - (x*z)/(z v_dist)
y1 = y - (y*z)/(z v_dist)
Mummo-ohjeena vielä todettakoon, että koska origo on määritelty näytön keskipisteeseen, pitää tässä tapauksessa tietää näytön resoluutio (esim 1024x768).
Eli fyysisesti piste näytöllä:
X = x_resoluutio/2 x1
Y = y_resoluutio/2 - y1
Katselukulmaa voidaan sitten muuttaa siirtämällä tai pyörittämällä katseltavaa maailmaa koordinaatistossa.