3D engine --> scaling

Pagina: 1
Acties:

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 23:17
Heui, ik had een vraagje over scaling...
Hiermee kan je dus een object groter maken, de formules hiervoor zijn:

x' = s(x) * x
y' = s(y) * y
z' = s(z) * z

Maar goed, gebruik je dit ook om een object groter op het scherm te projecteren als je er bijvoorbeeld heen loopt?
En zoja, wat zijn dan de formules voor de factoren s(x), s(y) en s(z)?
Bijvoorbeeld, je staat 100 meter van een object af, je loopt 1 meter dichterbij, hoeveel groter wordt het dan op je scherm?
Als het niet scaling is, wil je dan uitleggen hoe het wel moet :)
alvast tnx

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

volgens mij moet je dat dus _niet_ met scaling doen, maar met een 'world'-matrix.

je vertaalt de co-ordinaten naar het beeld. als je bv. dichterbij een object komt te staan, dan wordt dit gedaan door de world-matrix.

correct me if i'm wrong..

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 23:17
Hoe werkt dit dan, kben nog niet echt ver met alle wiskunde achter een 3D engine, magoed, alles gaat met matrices, kd8 dat de world-matrix, de uiteindelijke matrix van alle transformaties was, in dat geval is het dus niet zo gek als het gebeurt met een world-matrix, want dan gebeurt scaling ook met een world-matrix :)
Magoed, ik kan het net zo goed fout hebben...

Er moet toch een formule zijn, om de vergrotingsfactor van een object te berekenen?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

ja en nee :)

de scaling gebeurt indirect, door het transformeren van 3d coordinaten naar 2d schermcoordinaten (in perspectief)

De formule daarvoor is heel simpel:

x' = f * x / z
y' = f * y / z

Die f kun je zien als een zoom-factor, hoe groter die is hoe meer uitvergroot je object wordt waar je tegenaan kijkt. De zoom heeft ook te maken met de fov (field of view), als je bedenkt dat een grote zoom zorgt voor een vergroting van je object, is dus het totaalbeeld van je object kleiner. Dus het stukje wat je ziet van je wereld is ook kleiner

Als je voor f de helft van de breedtje van je scherm in pixels neemt, dan krijg je een fov van 90 graden (wat meestal wordt gebruikt in spellen enzo)


Hieruit kun je dus opmaken dat het object groter wordt als het dichterbij staat, aangezien de z dan kleiner is, dus x' en y' worden groter

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 23:17
ah, ksnap het, ik dacht dat dit alleen werd gebruikt om alles te vertalen naar een 2D scherm, maar nu ik er over nadenk, gebeurt die vergroting of verkleining automatisch door deze formule...
Dus als je een translatie doet over de z-as (z wordt kleiner, dus dichter bij jou) dan wordt het object automatisch groter op het scherm...

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

Op woensdag 23 januari 2002 18:27 schreef DarkShadow het volgende:
ah, ksnap het, ik dacht dat dit alleen werd gebruikt om alles te vertalen naar een 2D scherm, maar nu ik er over nadenk, gebeurt die vergroting of verkleining automatisch door deze formule...
Dus als je een translatie doet over de z-as (z wordt kleiner, dus dichter bij jou) dan wordt het object automatisch groter op het scherm...
yez

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 23:17
Ik dacht trouwens dat fov, tussen de 75 en 85 graden lag, maar de focus is in beide formules een andere waarde, door het 4:3 formaat van je beeldscherm, dus f(x') = (4/3)*f(y')
correct me if im wrong, of istie hoek (fov) naar rechts gewoon anders, als die naar boven? een andere focus is een beetje lastig nu ik er zo over nadenk

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

de x-fov en y-fov is niet hetzelfde

zou ook niet kloppen, anders wordt een van de 2 uitgerekt omdat je scherm nou eenmaal niet vierkant is

een x-fov van 90 geeft een y-fov van 73.73979529168804 op een 4:3 scherm :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 23:17
hoe kom je aan die 73.7 [insert lang getal]?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

yfov = atan (tan (0.5 * xfov) / (width / height)) * 2
xfov = atan (tan (0.5 * yfov) * (width / height)) * 2

:)

waardoor je overigens gelijk op de berekening van f komt:

f = 0.5 * width * tan (0.5 * xfov)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 23:17
ok tnx, nog een vraag, wat is atan? of noem ik dat tan^-1 (op mn rekunmachin) :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

atan = arctan, de inverse van tan, en dat wordt meestal aangeduid met tan-1 jah :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 23:17
tnx :)

Verwijderd

Het is zo kut driehoeken tekenen in ascii, dus ik ga het maar niet proberen, maar als je een vertikale lijn tekent in het midden van een stuk papier. Dat is je scherm. Links zet je op ong 2 cm daarvanaf een stip. Dat is je oog. Nu teken je aan de rechterkant van de vertikale lijn een pijl met de punt omhoog en de basis op de zelfde hoogte als je oog. Trek nu een lijn van je stip naar de pijlpunt. Trek ook een horizontale lijn tussen oog en pijlbasis.

Je ziet 2 driehoeken: die tussen pijlpunt, oog en pijlbasis en die tussen de projectie van de pijl op het scherm en het oog. Heeee! dat is wat we wilden. Nu kun je dmv de afstand van je oog tot het scherm en de afstand van de pijl tot het scherm en de lengte van de pijl bepalen hoe groot de pijl projectie op het scherm is. Schrijf dit op als formule met als invoer parameter Z van de pijl (afstand pijl-scherm) en X of Y (de lengte van de pijl). Stel de afstand van het oog tot het scherm constant (bv 32 ;))

  • DarkShadow
  • Registratie: Juli 2000
  • Laatst online: 23:17
yup ik snap psies wat je bedoeld (heb hier zon plaatje voor me liggen :) )
Maar toch bedankt, kan iemand nog uitleggen hoe ik hem in een matrix zet en waarom hij er dan zo uitziet?
Pagina: 1