Representera rotation för objekt? (c++, sdl)
Jag tror inte riktigt jag förstår vad som är din fråga. Om du lite tydligare kan skriva precis vad som är frågan så skulle det vara enklare att hjälpa.
Spontant så tror jag att du skulle tjäna på att gå ifrån att representera rotationer som Eulervinklar till antingen matriser eller kvaternioner.
Om du använder matris eller kvaternion så kan du ta användarens interaktion, typiskt uttryckt som en vektor samt en vinkel att rotera kring den vektorn, och skapa en rotations[matris/kvaternion] utifrån den, och sen multiplicera med ditt objekts rotation för att få objektets nya rotation.
http://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_...
http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation...
Jag tror inte riktigt jag förstår vad som är din fråga. Om du lite tydligare kan skriva precis vad som är frågan så skulle det vara enklare att hjälpa.
...
Om vi säger så här, jag har tre st variabler som uttrycker rotationen för ett objekt, eller rättare sagt en transformationsnod (TransformationNode), den har ett antal värden som grund och beräknar sedan en huvudmatris mha de små, skalning, rotation, translation som används till beräkningar samt utritning...
Om vi säger att jag skulle köra på ditt tips med att rotera matrisen ytterligare med matrismultiplikation så går det smidigt att göra, men det är väll inte lika lätt att få ut resultatet som en vektor eller tre gradantal? Antar också att man behöver nån sorts vektor som noll-punkt, tex v(1,0,0) är en vektor som motsvarar 0 grader ist för nuvarande v(rx,ry,rz) som är noll när rx, ry, rz är noll.
Jag behöver alltså rotationsriktningen som en vektor som jag lätt kan manipulera utifrån, men vill också lätt kunna sätta den med grader ist för matrismultiplikation när det behövs.
Jag skummade igenom dina länkar, verkar ganska komplicerat måste jag säga, just nu har jag implementerat alla sorters matriser för att manipulera andra matriser eller vektorer och det fungerar bra där jag använder dom.
Om vi säger att jag skulle köra på ditt tips med att rotera matrisen ytterligare med matrismultiplikation så går det smidigt att göra, men det är väll inte lika lätt att få ut resultatet som en vektor eller tre gradantal?
Väl? Frågan är fortfarande en aning vagt ställd Är frågan ifall det är möjligt, eller i så fall hur?
Det är möjligt att utifrån en rotationsmatris få tre vinklar.
Här är en sida jag just googlade: http://www.euclideanspace.com/maths/geometry/rotations/conver...
Notera att det står "This conversion is better avoided, since it is non-linier and has singularities at attitude + & - 90 degrees, so if already working in terms of matricies its better to continue using matrices if possible."
Mitt tips är återigen att göra om och undvika vinklarna. Jag har aldrig jobbat med nån 3D-motor som använder det, utan alla har använt rotationsmatriser eller rotationskvaternioner.
Det ser som sagt lite komplicerat ut när man tittar på det första gången, men i själva verket är det rätt så enkelt att använda när man förstår hur man ska tänka. Hmm, jag funderar hur du kan gå vidare. Det borde vara möjligt att hitta kod på nätet där du kan se både koden och hur man använder den. Eftersom du redan har kod för olika matrisoperationer så kanske det är enklast att bara byta ut din vinkelvektor mot en 3x3 rotationsmatris överallt, och köra på det istället. Rotationsmatriser och rotationskvaternioner är ekvivalenta, bara att vissa saker är enklare att göra med den ena eller den andra, så du kan strunta i kvaternionerna tills vidare så underlättar det lite.
Väl? Frågan är fortfarande en aning vagt ställd Är frågan ifall det är möjligt, eller i så fall hur?
Frågan är hur, och på bästa sätt Jag såg också att det fanns nackdelar med vissa metoder...
Tackar för dina länkar förresten, ska försöka harva igenom dom!
Är för övrigt ganska usel på sådant med cos & sin med alla vinklar, matriser har jag hittat i diverse böcker och dom är generella för datorgrafik, eller för opengl i deta fall. Inget problem annars att beräkna matriser för hand, men går inte lika bra när det kommer in en hel del med nuffror, divisioner & cosinus...
Här nedan är ett försök att försöka få vinklarna i grader från en riktningsvektor, ja lade också till en matrismultiplikation mitt i allt för ytterligare rotering av vektorn, efter skrivs allt ut i grader, frågan är om jag (och delvis pers på internet) är ute & cyklar, detta är körbar kod till skillnad från det andra:
int main(int argc, char *argv[]) {
double rX,rY,rZ; // gradantal runt x, y, z
Vector rotVec(1,0,0); // objektets riktningsvektor
// beräkning
HomVector h=ZUI_MatVecMul(ZUI_Rotate_Y(90),rotVec); // multiplikation (grader)
Vector newRotVec(ZUI_Homogenize(h));
// gradantal i grader
rX=acos(newRotVec.x())*180/M_PI;
rY=acos(newRotVec.y())*180/M_PI;
rZ=acos(newRotVec.z())*180/M_PI;
return 0;
}
- Idag Sony läcker uppgifter i rättegång – så stort är Call of Duty 17
- Igår Nvidia: "Energieffektiva RTX 4060 sparar hundralappar" 38
- Igår MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare 49
- Igår Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer 15
- Igår Nvidias nästa arkitektur för Geforce kommer år 2025 58
- Idag Youtube testar aggressiv taktik mot annonsblockerare 5
- Igår Veckans fråga: Vilket operativsystem föredrar du? 89
- Igår Bilar med smarta inslag ger fler dumma fel 65
- 27 / 6 Telekombranschen: "Smarta glasögon ersätter telefoner inom fem år" 91
- 26 / 6 Lastpass-användare rasar – kan inte logga in 59
- Vad spelar du för tillfället?725
- Senaste klarade spel?398
- Föra över mini DV till datorn via Firewire DV - USB1
- Solceller, solpaneler, egen elproduktion, styra elförbrukning516
- Får inte ut rätt hastighet6
- Skillnad på nätverkskablar?5
- Tråden om PlayStation 513052
- Råd om vilken skärm5
- linux för spel på pc.62
- Veckans fråga: Vilket operativsystem föredrar du?89
- Säljes Intel Core i5 13400F
- Säljes Gamingdator 4080 / 13700KF / 32GB DDR5
- Säljes I5 12500
- Säljes LG 27'' UltraGear 27GP950 4K Nano IPS 160 Hz HDMI 2.1
- Säljes Star Wars Jedi AMD kod
- Säljes Trasig Xiaomi Mi Electric Scooter (M365) Svart
- Säljes 5800x3D + x570 Meg Unify + be quiet! Dark Rock Slim
- Säljes AMD ASUS DUAL RX6700XT
- Säljes Dell OptiPlex 7010
- Säljes Datordelar: i5 9600k + 1070 GTX mm.
- Youtube testar aggressiv taktik mot annonsblockerare7
- Sony läcker uppgifter i rättegång – så stort är Call of Duty17
- Nvidia: "Energieffektiva RTX 4060 sparar hundralappar"38
- MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare49
- Veckans fråga: Vilket operativsystem föredrar du?89
- Bilar med smarta inslag ger fler dumma fel65
- Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer15
- Nvidias nästa arkitektur för Geforce kommer år 202558
- Microsoft vill strömma Windows från molnet72
- Starfield utvecklas med AMD:s välsignelse155
Externa nyheter
Spelnyheter från FZ
- Över tre miljoner exemplar av Final Fantasy XVI har skeppats och sålts idag
- Sony råkar avslöja spelbudgetar och annat på grund av dålig märkpenna idag
- Alan Wake och CoD: Kallt krig snart på PS Plus igår
- Red Dead Redemption åldersmärkt igen i Korea – det spekuleras i remaster igår
- Fallout London flyttas för att slippa Starfield-konkurrensen igår