[3d][php] vertexen achter camera

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben nu een tijdje bezig met mezelf verdiepen in de werking van een 3d engine (3d -> 2d). Ik heb in PHP (in php ja :) ) de volgende vars:
$camera[1]: camera x positie
$camera[2]: camera y positie
$camera[3]: camera z positie
$vector[1]: vertex x positie
$vector[2]: vertex y positie
$vector[3]: vertex z positie
$width: imagebreedte
$height: imagehoogte
$fov: field of view factor

Vooralsnog kijkt de camera maar in 1 richting.

Ik werk met polygonen met 2 punten (gewoon rechte lijnen). Nu kan ik redelijk eenvoudig een 3d beeld voor de camera creeeren:

PHP:
1
2
3
4
5
6
$zfactor = $vector[2] - $camera[2];

$x = $fov * ($vector[0] - $camera[0]) / $zfactor
     * ($width / 2) + ($width / 2);
$y = $fov * ($vector[1] - $camera[1]) / $zfactor
     * ($height / 2) + ($height / 2);


Dit gebeurt voor elke vertex, en daar kan ik dan lijntjes tussen trekken. Nu kom ik echter op een probleem als ik een lijn van bijvoorbeeld 10,10,-10 naar 10,10,10 wil tekenen en de camera op punt 10,10,5 staat. Het punt achter de camera wordt niet juist gerendered. Iemand suggesties?

[edit]
Foute topictitel |:( matrices = vertexen tnx :)

[ Voor 4% gewijzigd door Verwijderd op 31-07-2003 23:28 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

php -> P&W

en je topic titel ff aangepast dan ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Waarom wil je het punt achter de camera renderen als je hem niet kan zien?

Tenminste, jij zet je camera recht in het midden op de lijn die je wilt tekenen en je fov wijst een richting op. Dan kun je ook maar de helft zien :)

Of snap ik jouw probleem nog niet? :/

Acties:
  • 0 Henk 'm!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
je moet wel clipping doen he dude? Ik weet niet hoe je lijnen tekent maar lijkt mij dat je gewoon 2D tools doet dan gaat elk punt achter de camera geprojecteerd worden VOOR je camera maar dan gespiegeld. Normaal gaat de lijn dan ook door het middelpunt. OPlossing - je moet eerst alle punten achter de camera projecteren op het camera vlak.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:05
Ik denk dat het sowieso nodig is om alle polygonen tegen je view volume (of in ieder geval je near clipping plane) te clippen, omdat je anders altijd dit soort artifacts overhoudt na de projectie. Als je dan toch bezig bent is het hele view volume wel een betere keuze, in verband met de efficiëntie van je rendering algoritme.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hobbit_be schreef op 31 July 2003 @ 14:02:
je moet wel clipping doen he dude? Ik weet niet hoe je lijnen tekent maar lijkt mij dat je gewoon 2D tools doet dan gaat elk punt achter de camera geprojecteerd worden VOOR je camera maar dan gespiegeld. Normaal gaat de lijn dan ook door het middelpunt. OPlossing - je moet eerst alle punten achter de camera projecteren op het camera vlak.
Clipping :) dat zocht ik, tnx :), is hier echter een formule/code voor oid. Hoe pak ik zoiets aan in php?

[ Voor 8% gewijzigd door Verwijderd op 31-07-2003 23:31 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:05
Verwijderd schreef op 31 July 2003 @ 23:28:
Clipping :) dat zocht ik, tnx :), is hier echter een formule/code voor oid. Hoe pak ik zoiets aan in php?
Hmm, ik vind dat in C++ al lastig, maar ik zou het in PHP helemaal niet aandurven. Je moet sowieso beschikken over wat basale vectoroperators. Hoe je dat in PHP gaat regelen zoek je zelf maar mooi uit. ;)

Ik weet niet precies wat de gangbare realtime clipping algoritmen zijn, maar je zou bijvoorbeeld het algoritme van Sutherland&Hodgman (ja ja, dat heb ik even opgezocht ;)) kunnen gebruiken. Google levert daar onder andere de volgende hit op: Computer Graphics - Clipping. Inclusief pseudocode, dus als je de benodigde wiskundige basis hebt, moet je er uit kunnen komen.

Overigens wordt het algoritme daar in 2D besproken, maar het kan in algemene vorm ook op 3D (of nD, denk ik) toegepast worden. Zoek desnoods op Google op de namen in combinatie met 3D.

[ Voor 17% gewijzigd door Soultaker op 01-08-2003 00:39 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

sutherland-hodgeman clipping is een convex polygoon clipping algoritme :) Bij lijntjes is het vrij simpel, gewoon een lijn-vlak intersectie. En aangezien de nearplane hier alleen gedaan hoeft te worden, wordt het nog makkelijker.

Het is allemaal een kwestie van interpoleren. Stel je hebt een lijn van (3, 4, 5) naar (6, 3, -2)
De lengte in de z-richting is dus 5 - -2 = 7. En stel dat je 'm wilt clippen bij z=1

De afstand van het beginpunt van de lijn tot de nearplane is 5 - 1 = 4. Je houdt dus totaal 4/7e van de lijn over. En dan is het een kwestie van vermenigvuldigen: de x-coordinaat bij z=1 is 3 + (6 - 3) * 4/7 = 4.71, en de y-coordinaat wordt 4 + (3 - 4) * 4/7 = 3.43

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.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Tnx luitjes, hier kan ik mee aan de slag :)

Acties:
  • 0 Henk 'm!

Verwijderd

Google eens naar 'perspective projection'. Ik zou naast de properties van de camera die je nu al hebt ook een near en een far plane definiëren voor je camera (zijn in feite gewoon z-waarden) om je view volume te definiëren.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Blukske: perspective projection heeft niets te maken met clipping, alleen het projecteren van 3d coordinaten op een 2d vlak. De deling door z dus, en dat had de topicstarter al voor elkaar

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.


Acties:
  • 0 Henk 'm!

Verwijderd

Klopt, maar wel zonder gebruik te maken van een near en far clipping plane. En die 'clipping planes' zijn relatief eenvoudig in de perspective projection formule in te voegen, wat hierboven nog niet is gebeurt.
Pagina: 1