[CG]Backface culling

Forum van 1ste Bachelor Informatica.

Moderator: Praesidium

User avatar
Fristi
WOZ
Posts: 4565

[CG]Backface culling

Post#1 » Wed Mar 26, 2008 4:27 pm

Loha
Kheb isee nvraagske, het ogenschijnlijke simpele backface culling loopt mis.

Ik heb al vanalles geprobeerd maar telkens verdwijnen er te veel vlakken of net te weinig. Gezien ik het nu echt ni meer weet en men ideen een beetje zijn uitgeput gaak hier posten wak gedaan heb, hopelijk kan iemand me verderhelpen :)

Beginnen bij het begin:
- DrawBackfaceCulled:
Ik loop hier men polygonen af en geef per polygoon de eerste 3 punten mee aan procedure IsPolyFrontFace

- IsPolyFrontFace:
De manier waark het verste mee gekomen ben (1 enkele polygoon fout):
Ik bereken eerst Ez (de Ez uit de viewingmatrix - deze is correct want men viewmat klopt met die van de nils, tekenen lukt ook perfect).
Vervolgens bereken ik zoals in de cursus de vectoren u en v (enkel zijnt er bij mij van dimensie 4 ipv 2).
Kneem hier dan het vectorproduct u x w = v van.
Dan doe ik ez . v (dotproduct) = N

Aan de hadn van deze N zou men moete kunnen zien of een polygoon frontface is (zijnde > ofte < dan 0).

Dit lukt dus op 1 polygoon na..(bij de standaard kubus die bij de engine werd gegeven)

Ik heb ook al letterlijk geimplementterd wat er in de cursus stond (bij BFC bij perspectiefprojectie, ge moet delen door Ax x Ay x Az opt einde, maar das altijd delen door 0, of toch meestal dus daar zit ook eits mis..en de bijhorende kleine d die we der moeten gebruiken is ook maar vaag)

Excuses voor weeral lastigvallen en de vage uitleg, indien nodig post ik gwn letterlijk men code wel ffkes

greets
Fris


EDIT: Kheb de methode uit het niet verplichte boek gebruikt en krijg net hetzelfde probleem. Hier gaan ze wedereom u en w berekenen , het vectorproduct hiervan en dan het dotproduct tussen v en u eye vector..Krijg hier net hetzelfde resultaat mee, 1 enkele polygoon die bij de kubus verkeerd staat (de onderste wordt getekend en de bovenste niet, tzou omgekeerd moeten zijn)

User avatar
Fristi
WOZ
Posts: 4565

Post#2 » Wed Mar 26, 2008 5:54 pm

Kej, kheb ontdekt dattek mijn hoekpunten verkeerd doorgaf, kdenk da da wel is wa kan uitmaken..het werkt nog niet maar nu kank terug beginne proberen ^_^

User avatar
Fristi
WOZ
Posts: 4565

Post#3 » Wed Mar 26, 2008 7:48 pm

okej, whatever ik ook ook doe, der is altijd 1 polygoon fout.
2 van de 3 tekent hij juist. Altijd eentje fout, dit is de methode die in onze cursus staat bij perspectiefprojectie. (Tom heeft al een andere manier gegeven maar dan krijgk net hetzelfde resultaat).

Code: Select all


PROCEDURE (mv: MyView) IsPolyFrontFace*(a, b, c: Vector.Vector4D; proj, view, wtov: Matrix.Matrix4D): BOOLEAN;
VAR
D : REAL;
mat : Matrix.Matrix3D;

BEGIN
a := view.VectorMult( a );
a := proj.VectorMult(a);
a := wtov.VectorMult(a);

b := view.VectorMult( b );
b := proj.VectorMult(b);
b := wtov.VectorMult(b);

c := view.VectorMult( c );
c := proj.VectorMult(c);
c := wtov.VectorMult(c);

NEW(mat);
mat.Set(a.x[0],a.x[1], 1,b.x[0],b.x[1], 1,c.x[0],c.x[1], 1);
D := mat.Det();

IF D > 0 THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END;
END IsPolyFrontFace;
FF ni letten op het feit dattek hier projecteer, kmoet dringend eens opkuisen enzo, op de moment ist inefficient, maar kwil het eerst werkend krijgen.

Wak dus doe is men 3 punten projecteren en dan die in een matrix steek. Hier neemk de determinant van en ik vergelijk met 0.

EDIT: Tis opgelost, tmarsjeert, kmoest in bovenstaande code nog delen ^^

User avatar
Shinta
WOZ
Posts: 1122

Post#4 » Wed Mar 26, 2008 9:03 pm

Dit is de eerste topic die ik al gezien heb waar 1 persoon met zichzelf praat :P
Remember remember the fifth of November
Gunpowder, treason and plot.
I see no reason why gunpowder, treason
Should ever be forgot...

User avatar
Sebastiaan
Posts: 1184

Post#5 » Wed Mar 26, 2008 10:02 pm

Shinta wrote:Dit is de eerste topic die ik al gezien heb waar 1 persoon met zichzelf praat :P
en waarom verbaast mij dat nix dat het van de fristi komt :D

User avatar
Robbe
WOZ
Posts: 2161
Contact:

Post#6 » Wed Mar 26, 2008 11:17 pm

ik vind het tof dat hij zelf tot een oplossing is gekomen :)
"I'm not afraid of falling, I'm afraid of landing" -- Sam
How To Ask Questions The Smart Way

Zingen? UKA-n dat ook!

User avatar
Fristi
WOZ
Posts: 4565

Post#7 » Wed Mar 26, 2008 11:33 pm

Ja, kdacht, telkens alsk wa verder geraak laatek da weten, als er dan mensen lezen en wille helpen dan wete ze waark sta, maar uiteindelijk is men frank dus zelf gevallen :P

Most probably it won't be the last time :P

User avatar
Tom
Posts: 602

Post#8 » Thu Mar 27, 2008 12:04 am

(Ge kunt ook RETURN d > 0; doen, hetzelfde met toekennen van booleanse waarden.)

Maar verder prachtig dat ge er uit bent geraakt, hopelijk maakt ge geen grove fouten bij triangulate/hiddenline. Een typfout daar debuggen is hopeloos. :-(

Return to “1ste Bachelor”

Who is online

Users browsing this forum: Google [Bot] and 44 guests