Bildrotation in Draw3D
Übersicht

![]() |
N0XBetreff: Bildrotation in Draw3D |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ich möchte ein Bild zum Mauszeiger rotieren lassen. (Draw3D) Hier mein Ansatz, was mache ich falsch? Code: [AUSKLAPPEN] Include "Includes\Draw3D.bb"
Graphics3D 1024,768,32,2 SetBuffer BackBuffer() Local timer = CreateTimer(60) Local cam = CreateCamera() CameraClsColor cam,64,64,64 DrawInit3D(cam) Origin3D(1024,768) Local player = LoadImage3D("gfx\player.bmp") Local Button=0,BildX=0,BildY=0 Local Scale#=.5 While Not KeyHit(1) Angle=ATan2(MouseY()-BildY,MouseX()-BildX) DrawImage3D(player,BildX,BildY,Button,Angle*2,Scale#) WaitTimer(timer) RenderWorld Clear3D() Flip 0 Wend End Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] If MouseHit(1) Then
BildX=MouseX3D BildY=MouseY3D End If Angle#=ATan2(MouseX3D-BildX,MouseY3D-BildY) DrawImage3D(player,BildX,BildY,Button,Angle#,Scale#) Die Draw3D hat ein etwas anderes Koordinatensystem. Da gilt es das auch zu nutzen. Das fängt damit an, dass nicht die Mausfunktionen MouseX() benutzt werden, sondern die globalen Variablen der Draw3D MouseX3D dazu benutzt werden sollen. Außerdem fällt bei der Draw3D die vertauschen der Koordinaten bei ATan2 weg. Das heisst, es wird zuerst X dann Y eingetragen. |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
btw:
Zitat: Außerdem fällt bei der Draw3D die vertauschen der Koordinaten bei ATan2 weg.
woher kommt das eigentlich ? |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Keine Ahnung, aber es funktioniert. Vielleicht erlang man Erkenntnis, wenn man den ATan2-Befehl auf Atan auflöst. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Falls man den Winkel mit Atan messen würde, sähe der Funktionsaufruf ja irgendwie so aus BlitzBasic: [AUSKLAPPEN] Local Angle# = ATan( DistanzY/DistanzX ) Vielleicht war es damals logisch, das Divisionszeichen einfach durch ein Komma zu ersetzen, dass dann Atan2( DistanzY, DistanzX ) draus wurde. Es gibt aber auch (vor allem wissenschaftliche Programme ), die eine Atan2( x, y ) - Schreibweise verwenden; in der Programmierwelt aber hat sich die umgekehrte Version eingebürgert. Der Grund, wieso es im Koordinatensystem der Draw3D umgekehrt als normal ist, liegt wohl an der invertierten Y-Achse. Würde man statt Atan2( X, Y ) einfach Atan2( -Y, X ) + 90 angeben (-Y wegen der invertierten Achse und + 90 als Offset), käme man auf die gleichen Resultate BlitzBasic: [AUSKLAPPEN] SeedRnd MilliSecs() |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm, aber mit deinen ''+90'' erreichst du ja nichts anderes, als das du X und Y vertauscht. Denn genau das ist ja überhaupt der Winkelunterschied zwischen X und Y, die 90°-Versetzung. So kann man genauso gut allein mit Sin oder allein mit Cos seine Winkel berechnen.
Generell (cos und sin) Code: [AUSKLAPPEN] X=200+Cos(Winkel)*180
Y=200+Sin(Winkel)*180 ist identisch mit Alternativ (allein nur sin) Code: [AUSKLAPPEN] X=200+Sin(Winkel+90)*180
Y=200+Sin(Winkel)*180 ist identisch mit Vertauscht (sin und cos) Code: [AUSKLAPPEN] X=200+Sin(-Winkel+90)*180
Y=200+Cos(-Winkel+90)*180 Edit1: ok, also mir fällt noch was ein. In der Draw3D ist Angle=0 ein ungedrehtes Bild, welches bei +Angle sich rechts rum dreht. Also im Uhrzeigersinn. In der 3D-Programmierung dagegen dreht sich ein Objekt in seiner Z-Achse (vorrausgesetzt die Kamera hat den Winkel 0,0,0 und schaut nun das Objekt vor sich an) gegen den Uhrzeigersinn. Ich habs in der Draw3D dann einfach so gemacht, das positive Werte eben ein Bild im Uhrzeigersinn drehen. Ob es aus der Sicht der Mathematik falsch ist oder nicht kann ich nicht sagen. Aber bei einer 2D-Graphiclibrary wollte ich keinesfalls gegen den Uhrzeigersinn drehen lassen. Edit2: so, habs grad mal auf BlitzMax ausprobiert und da drehen positive Werte de Bilder auch im Uhrzeigersinn. Hab ich übrigens auch von anderen Graphiclibrarys noch so im Sinn. Von daher alles bestens. |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
hectic hat Folgendes geschrieben: Hmmm, aber mit deinen ''+90'' erreichst du ja nichts anderes, als das du X und Y vertauscht.
+ 90 alleine vertauscht nicht X und Y ![]() Probier mal folgenden Code BlitzBasic: [AUSKLAPPEN] SeedRnd MilliSecs() Die beiden Werte liegen nicht nur um 90 Grad auseinander. Wenn du X und Y vertauschst, wechselst du nämlich den Drehsinn; wenn du das erste Print durch ein "Print -ATan2( X#, Y# ) + 90" ersetzt, erhältst du bei beiden die gleichen Werte. Sprich, negatives Atan2 (=> umgekehrter Drehsinn) und dann die 90° Offset wegen der vertauschten Achsen. Dass du die Bilder im Uhrzeigersinn drehst, erklärt es dann. Da du sowieso einen umgekehrten Drehsinn in der Draw3D benutzt, als in der Mathematik verwendet wird, kann man sich das negieren des Atan-Wertes sparen. Die +90° werden dann wohl von der invertierten Y-Achse ausgeglichen. Persönlich finde ich ein System, bei dem im Gegenuhrzeigersinn gedreht wird, intuitiver, da es sich auch mit der mathematischen Denkweise deckt (und da um die Z-Achse in B3D ja auch im Gegenuhrzeigersinn gedreht wird, wenn man eine unrotierte Kamera hat). Dass in Max2D das Uhrzeigersinn-System verwendet wird, hat mich schon immer ein wenig gestört, aber das ist wohl Geschmackssache. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
also ich verstehe es ja mit dem Sinus und dem Cosinus. Das ist ja keien Kunst.
Aber das mit den +90° und der Invertierten Achse und dann noch der anderen Drehrichtung ist mir jetzt heute Abend zu hoch. Ich versuche es morgen in der Schule genauer zu betrachten. Vielen Dank trotzdem:) Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group