Nu försöker jag göra ett 3d bilspel i opengl. Av någon anledning fungerar inte samma kod som fungerade i 2d spelet. Bilen flyttas åt alla möjliga konstiga håll. Och nästan aldrig åt hållet den står riktad mot.
Kan inte heller något om OpenGL, men jag fick en tanke om att det kanske är något skumt med vinklarna. Är du säker på att du använder vinkeln mot en axel i xy-planet? I en 3D-värld kan du ju även ha vinklar jämfört med xy-planet (alltså snett uppåt).
glDrawScene();
SwapBuffers(h_DC);
if keys[VK_LEFT] then Player.angle := Player.angle + 1.0;
if keys[VK_RIGHT] then Player.angle := Player.angle - 1.0;
if keys[VK_UP] then begin
player.xpos := player.xpos + sin(player.angle)/10;
player.zpos := player.zpos + cos(player.angle)/10;
end;
if keys[VK_DOWN] then begin
player.xpos := player.xpos - sin(player.angle)/10;
player.zpos := player.zpos - cos(player.angle)/10;
end;
Vad är "angle" i ditt program? Vad jag kan förstå så är det samma vinkel som i 2D-spelet, dvs höjdled ingår inte. Rätta mig om jag har fel. Det betyder i så fall att koden ska se ut precis som den gjorde innan, dvs x och y ska ändras men inte z som du har gjort.
Um... jag går i 9an ;)
Ingen som vet hur fan man räknar ut vart bilen kommer att flyttas med sin och cos? Kom på att jag använde cos256 och sin256 i mitt 2D spel... det var några special funktioner som följde med DelphiX, Men det borde väl gå att räkna ut det genom att använda samma formel som i en analog klock, fast man ändrar från 60 möjliga positioner till 360? :q
Någon som vet hur man räknar ut positionerna i en analog klocka? jobbigt att söka eftersom man får mest svar om hur man gör det i javascript med google :p
Någon som vet hur man räknar ut positionerna i en analog klocka? jobbigt att söka eftersom man får mest svar om hur man gör det i javascript med google :p
Vad har analoga klockor med saken att göra?
Om det är enheten på vinkeln du är ute efter, då är frågan snarare om du har grader eller radianer. Det troliga är att sin och cos jobbar med radianer. I så fall får du relativt stora vridningar på din bil varje gång du trycker ner en piltangent (och därmed vrider bilen 1 radian). Du kanske skulle skala ner de vridningar av bilen som görs.
Jaså, men hur gör jag det?
Anledningen till att jag tänkte på en analogklocka är ju att i en sån finns det ju 60 olika positioner pekarna kan vara på, tänkte om man kunde modifiera det till 360.... :OO
För att skala ner vinklarna, menar du? Om du vill veta hur stora vinklar du rör dig med, då gäller följande grundförutsättningar:
Ett varv =
360 grader
2*pi eller med andra ord ca 6,28 radianer.
När du ökade/minskade din vinkel med 1,0, då svängde du alltså bilen nästan 60 grader. Om du vill konvertera en vinkel i grader till samma i radianer, då får du räkna ut:
vinkelRadianer = vinkelGrader*6,28/360
Sedan kan du räkna med radianvinkeln i dina formler.
Det är ett speciellt vinkelmått som brukar användas mer eller mindre standardmässigt i alla sin- cos- och tan-funktioner. Du har 2*pi (ung. 6,28) radianer på ett varv. Måttet kan härledas till den så kallade enhetscirkeln. En enhetscirkel är en cirkel med radie=1. Utgår du från exakt samma längdenhet som när du mätte radien, kommer omkretsen på denna enhetscirkel vara 2*pi, dvs ungefär 6,28. Som du ser så är radian-vinkeln direkt kopplad till cirkelns egna mått. Skulle du utgå från grader (360 på ett varv), då skulle du behöva konvertera den där omkretsen för att få det rätt. Radianer skulle du alltså kunna betrakta som "det naturliga vinkelmåttet". Det är därför radianer används i så hög utsträckning.