PDA

View Full Version : [Frage] einheitsvektor ?


jessi
12-12-2002, 20:57
ich brauch doch von dem normalvektor, den ich mir pro polygon berechnet habe, den einheitsvektor um das flat shading zu machen. wie berechne ich mir den ?

lifelikebmx
12-12-2002, 21:37
mit

unitvector = vector / betrag(vector)

jessi
12-12-2002, 21:46
naja schon, aber den normalvektor hab ich mir ja aus dem produkt von 2 vektoren des polygons ausgerechnet. wenn ich jetzt die formel betrag = wurzel aus (x*x + y*y + z*z) ausrechnen dann ist das ja nicht wirklich die länge des vektors, oder ?
bei mir stimmt das flat shading nicht, und das liegt wahrscheinlich daran.

kann mir da wer helfen ?

jessi
13-12-2002, 11:23
hab den einheits-normalvektor jetzt auf eine 2.methode ausgerechnet, und er scheint zu stimmen. nachher fahre ich dann so fort:
magnitudeTn = Math.sqrt(tn[X]*tn[X] + tn[Y]*tn[Y] + tn[Z]*tn[Z]);
unitTn[Z] = (tn[Z] / magnitudeTn);
double z = Math.abs(unitTn[Z]);
int red = (int) (z * col.getRed()); ....

was stimmt hier nicht ????

alle polygone haben die selbe intensität, da die länge des normalvektors immer fast genauso groß ist wie der z-wert vom normalvektor.

bimbo
13-12-2002, 11:37
also: länge des vektors ist : wurzel (x1*x1 + x2*x2 + ... + xn*xn)

einheitsvektor = vektor / |vektor|


magnitudeTn = Math.sqrt(tn[X]*tn[X] + tn[Y]*tn[Y] + tn[Z]*tn[Z]);
unitTn[Z] = (tn[Z] / magnitudeTn);


sollt schon so passen, an deier stelle würd ich aber den originalen normalvektor tn mit dem normierten überschreiben.

also

tn[X]=tn[X]/länge;
tn[Y]=tn[Y]/länge;
...

jessi
13-12-2002, 11:39
brauch ich die x- und y-koordinate des normalvektors noch ? ich dachte, dass nur z ein rolle spielt. ansonsten ist es ja egal, ob ich den normalvektor überschreibe oder eine neue variable definiere.

RS250
13-12-2002, 12:28
Ich hab im Prinzip das shading auch so gemacht, aber ich hab das Problem, dass zwar die richtigen Farberte übergeben werde, bzw es stehen auch in imgData die richtigen Werte, aber zeichnen tut er alles in einer Farbe
Woran könnt das liegen?

bimbo
13-12-2002, 13:35
habts ihr schon brav den edgetable geändert? man muss natürlcih dei z-werte , und die änderung entlang der kante der speichern, sonst hauts auch net hin, das hab ich mal ghabt.

jessi
13-12-2002, 13:52
ich komm mir echt schon unfähig vor!!
so schauen meine z-werte, mit dem ich die intensität der farbe ändere, aus. der erste block beim laden und die weiteren wenn ich um die x-achse (+) rotiere.
kann doch nicht sein, dass sich diese immer bei ca. 0.99 oder 0.59 liegen!!! bei den anderen figuren schaut's ähnlich aus - sehe quasi keinen unterschied zw. scanfilled und flatshaded. es liegt aber nicht daran, dass er die intensität nicht wirklich ändert (hab's mit einer konstanten 0.1 probiert - da wird alles dünkler)
hat wer eine idee ??

1 ---------------------------- z: 1.0
2 ---------------------------- z: 0.5904019139858123
3 ---------------------------- z: 0.5904019139858124
4 ---------------------------- z: 0.5904019139858124
5 ---------------------------- z: 0.5904019139858123

1 ---------------------------- z: 0.999999040510117
2 ---------------------------- z: 0.5910942069442461
3 ---------------------------- z: 0.5897260653302255
4 ---------------------------- z: 0.9923884353863857

1 ---------------------------- z: 0.9999960871272927
2 ---------------------------- z: 0.5915890632839147
3 ---------------------------- z: 0.5892481207690534
4 ---------------------------- z: 0.9979287436604627

1 ---------------------------- z: 0.9999909019811164
2 ---------------------------- z: 0.5918592797237725
3 ---------------------------- z: 0.5889930798679598
4 ---------------------------- z: 0.9990767812854311

1 ---------------------------- z: 0.9999830407768563
2 ---------------------------- z: 0.5918992117438274
3 ---------------------------- z: 0.5889651391457795
4 ---------------------------- z: 0.9994956907412776

RS250
13-12-2002, 14:07
hab genau das gleich problem, hab aber keine Ahnung warum!

Bin auch schon bissi am verzwifeln!

jessi
13-12-2002, 21:58
@RS250
ich bin ja wirklich ein depp! hab bei den getProjectionCoordinates vergessen den z-wert mitzuskalieren: transformed[i][Z] *= depth; ist vielleicht bei dir derselbe fehler.

leobasil
13-12-2002, 22:22
BAHH!!!! THX jessi !!! da RS250 und ich sitzen scho seit gestern nachmittag, und kommen net drauf .... ma... da muss ma auch erst amal draufkomman :)

RS250
13-12-2002, 22:30
cool, funktioniert! danke fürn tipp!!! :bounce:

MarkusL
16-12-2002, 16:58
wahnsinn!! danke! funktioniert jetzt...

...hab schon fast graue haare bekommen...

MAZi
19-12-2002, 00:01
jessi is einfach die gscheiteste hier im forum.
da können wir alle noch was lernen!
;)