kameramatrix
-
ok, ich hab nu ne kameramatrix erschaffen( das adapterprob hab ich erstmal zurückgestellt
)
nunja, ich kann vorwärts und rückwärts gehen, un natürlich nach rechts und links schauen,aber wnen ic mich drehe, und DANACH laufe lauf ich in die total falsche richtung.ich hab folgenden code benutzt:
void Matrix::Mkamera(Vector position,Vector sichtpunkt,Vector hoehe) {//position der kamera,sichtpunkt der kamera höhe der kamera //benötigte vectoren Vector XAchse;//die x achse des neuen koordinatensystems Vector YAchse;//die y achse Vector ZAchse;//die z achse // Die Achsen des Kamerakoordinatensystems berechnen ZAchse. VecNormalisieren(sichtpunkt);//normalisieruen des sichtpunkt vektors ergibt automatisch neue z achse XAchse.VecNormalisieren(hoehe*ZAchse);//kreuzmultiplikation YAchse.VecNormalisieren(ZAchse*XAchse);//kreuzmultiplikation //berechnen der kameramatrix Matrix translation; translation.Mtranslation(position);//translationsmatrix Matrix achsen(XAchse.VecGetx(),YAchse.VecGetx(),ZAchse.VecGetx(),0.0f, XAchse.VecGety(),YAchse.VecGety(),ZAchse.VecGety(),0.0f, XAchse.VecGetz(),YAchse.VecGetz(),ZAchse.VecGetz(),0.0f, 0.0f,0.0f,0.0f,1.0f);//achsenmatrix Matrix Kamera=translation*achsen; for(int x=0;x<4;x++){ for(int y=0;y<4;y++){//übertragen der behelfskameramatrix this->m[x][y]=Kamera.m[x][y]; } } }
der mathematische hintergrund ist, durch kreuzmultiplikationen die achsen des neuen koordinatensystems zu erstellen.
die funktion erhält im ersten parameter die kameraposition, im 2. parameter einen vektor folgender form:sin(DEG_TO_RAD(blickwinkel der kamera)),0,cos(DEG_TO_RAD(blickwinkel der kamera))
dieser vector beschreibt den blickpunkt der kamera
der 3. vector kann erstmal vernachlässigt werden, da er standardmäßig 0,1,0 ist.
weis jemand wo der fehler liegt?
ich hab nämlich atm nich die lust nochmal en paar stunden zeit zu investieren um eine andere theorie der kameramatrix zu lernen und um hinter mathematische systeme zu steigen, die mindestens 3 schuljahre zu hoch für mich sind
-
Mal versucht den Translationsvektor zu rotieren?
Bye, TGGC (Der Held ist zurück)
-
TGGC schrieb:
Mal versucht den Translationsvektor zu rotieren?
ERROR 2007: Bad argument!
Accepted arguments: "Lern coden!", "-> Doku", "Du bist zu blöd!"
-
void CPointOfView::GetMatrix(CMatrix3D *matrix) { matrix->CreateTranslation(-Position.X,-Position.Y,-Position.Z); matrix->MultiplyMatrixRotationY(-Mod(AngleY,PI*2)); //multipliziert die matrix mit einer rotationsmatrix matrix->MultiplyMatrixRotationX(-Mod(AngleX,PI*2)); matrix->MultiplyMatrixRotationZ(-Mod(AngleZ,PI*2)); }
mit:
a) Position = Vector3D(x,y,z), beschreibt die position des betrachters
b) AngleX,AngleY,AngleZ beschreibt die rotationswinkel um die achsen x,y und zdie matrix muss dann noch gesetzt werden:
pD3DDevice->SetTransform(D3DTS_VIEW,&matrix); //das ist die matrix die oben generiert wurde, nur als directx matrix D3DXMatrixPerspectiveLH(&ProjectionMatrix,0.2f/m_Zoom,0.2f/m_Zoom*m_AspectRatio,0.1f,100000.0f); pD3DDevice->SetTransform(D3DTS_PROJECTION,&ProjectionMatrix);
-
@kxII das sieht ja schonmal sehr logisch aus...wieso nehm ich nur immer den schweren weg
@sgt.nukem
add user to group TGGC like
einen schönen abend noch euch allen
//edit sorry, nu klappts...hab an einer stelle vergessen den winkel ins bogenmaß zu übertragen
-
Hmm, ich hab das gleiche wie KXII gesagt, nur kürzer...
Muss wohl an mir liegen.
Bye, TGGC (Der Held ist zurück)
-
otze schrieb:
@sgt.nukem
add user to group TGGC like
Ich wollt' doch nur TGGC 'n bisserl verscheissern, war gar nicht gegen Dich gerichtet...!
-
@Sgt. Nukem:
Du bist zu blöd. Lern coden! -> DokuBye, TGGC (Der Held ist zurück)
-
TGGC schrieb:
@Sgt. Nukem:
Du bist zu blöd. Lern coden! -> DokuBye, TGGC (Der Held ist zurück)
Ich verlange sofort, daß TGGC gebannt wird!!
Er wiedert mich an!
(oder wiehert?!?)
Er macht mich als totalen Newbie immer soooo fertig!
Bös'! Bös'! Bös'!
-
Sagt man einmal die Wahrheit, schon heulen'se rum...
Bye, TGGC (Der Held ist zurück)