TFormPoint versteh ich nicht

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

BB-Fan

Betreff: TFormPoint versteh ich nicht

BeitragMo, Jun 23, 2008 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab zwar die Blitzhilfe gewälzt, aber so richtig versteh ich den Befehl, sowie TFormedX() TFormedY() TFormedZ().

Kann man das auch mit anderen Befehlen umschreiben, also alle vier Befehle, vielleicht versteh ich es dann eher.

Hab hier diesen Code entdeckt, und wollte ihn auch woanders verwenden, verstehe aber diese Befehle nicht so richtig.
Code: [AUSKLAPPEN]
Graphics3D 640,480,16,3
SetBuffer=BackBuffer()

Global campivot=CreateCube() ; create pivot for camera
Global camera=CreateCamera()  ; create camera (!!!)

; ---------------------- THIS IS ALL JUST TO POPULATE THE WORLD WITH SOME RUBBISH ---------------

Global light=CreateLight()
Global player=CreateCube()    ; create simple player
Global plane=CreatePlane()   ; create simple floor
MoveEntity player,0,1,0
; Create texture of size 256x256
tex=CreateTexture(256,256)

; Set buffer - texture buffer
SetBuffer TextureBuffer(tex)

; Clear texture buffer with background white color
For i=1 To 10
Color Rnd(0,255),Rnd(0,255),Rnd(0,255)
Rect Rnd(0,256),Rnd(0,256),Rnd(0,256),Rnd(0,256)
Next

; Texture cube with texture
EntityTexture plane,tex
EntityTexture player,tex

; Set buffer - backbuffer
SetBuffer BackBuffer()

; ----------------------------------------------------------------------------------------------

While Not KeyHit(1)

If KeyDown(200) Then
   MoveEntity player,0,0,.2
End If

If KeyDown(203) TurnEntity player,0,1,0
If KeyDown(205) TurnEntity player,0,-1,0

SuperCam(camera,player,.02,8,3,0,2)

RenderWorld
Flip

Wend

End

Function SuperCam(cam,ent,cspeed#,dist#,hite#,xrot#,tilt#)

TFormPoint 0,hite#,-dist#,ent,0

cx#=(TFormedX()-EntityX(cam))*cspeed#
cy#=(TFormedY()-EntityY(cam))*cspeed#
cz#=(TFormedZ()-EntityZ(cam))*cspeed#

TranslateEntity cam,cx,cy,cz
PointEntity cam,ent
RotateEntity cam,xrot#,EntityYaw(cam),tilt#

End Function


also gerade diesen Teil:
Code: [AUSKLAPPEN]
Function SuperCam(cam,ent,cspeed#,dist#,hite#,xrot#,tilt#)

TFormPoint 0,hite#,-dist#,ent,0

cx#=(TFormedX()-EntityX(cam))*cspeed#
cy#=(TFormedY()-EntityY(cam))*cspeed#
cz#=(TFormedZ()-EntityZ(cam))*cspeed#

TranslateEntity cam,cx,cy,cz
PointEntity cam,ent
RotateEntity cam,xrot#,EntityYaw(cam),tilt#

End Function


wäre nett, wenn mir jemand sagt, ob man diese befehle auch anders realisieren kann, und mir erklärt, wie das überhaupt funktioniert.
 

ChristianK

BeitragMo, Jun 23, 2008 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
TFormPoint ( und TFormVector ) rechnen ein Punkt bzw. Vektor in ein anderes Koordinatensystem um, zum Beispiel von Global nach Lokal, umgekehrt oder zwischen zwei Entities. In der Hilfe ist ein Beispiel, das die Befehle ziemlich treffend erklärt. http://www.blitzbasic.com/b3dd...p;ref=goto oder TFormPoint.

Natürlich kann man diese Befehle mit etwas 3D-Mathe-Kenntnissen selbst programmieren, aber warum dann nicht gleich TFormPoint verwenden ...
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

BB-Fan

BeitragMo, Jun 23, 2008 23:53
Antworten mit Zitat
Benutzer-Profile anzeigen
weil ich das hier mit bb3d für windows schreibe, aber noch für linux haben will.

stellt euch bb3d ohne diese T... befehle vor, wie würde man diese dann selber definieren können?

anhand einer funktion beispielsweise.

soweit reichen meine kenntnisse nämlich nicht.
 

ChristianK

BeitragDi, Jun 24, 2008 0:19
Antworten mit Zitat
Benutzer-Profile anzeigen
BB-Fan hat Folgendes geschrieben:
weil ich das hier mit bb3d für windows schreibe, aber noch für linux haben will.

Da würde ich dir aber was anders als BB empfehlen, oder willst du für Linux alles neu programmieren?!?

BB-Fan hat Folgendes geschrieben:
soweit reichen meine kenntnisse nämlich nicht.

Die wirst du aber brauchen, denn die "Formel" zu kennen, ohne zu wissen, was dahinter steckt, ist nicht besonders sinnvoll.

Ich kenne mich zwar auf dem Gebiet nicht perfekt aus, aber hier trotzdem ein Beispiel für die Vektortransformation:

Vektor [x,y,z,w] x 4x4-Transformationsmatrix = Transformierter Vektor [x',y',z',w']

x' = x * M11 + y * M21 + z * M31 + w * M41
y' = x * M12 + y * M22 + z * M32 + w * M42
z' = x * M13 + y * M23 + z * M33 + w * M43
w' = x * M14 + y * M24 + z * M34 + w * M44

TFormedX, TFormedY und TFormedZ geben dann jeweils die Komponenten des neuen Vektors V' zurück.

Edit: Entschuldigung, das ist jetzt für TFormVector. Hab mich verlesen.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

BB-Fan

BeitragDi, Jun 24, 2008 1:54
Antworten mit Zitat
Benutzer-Profile anzeigen
ich beschäftige mich gerade mit matrizen, und alles zu dem thema läßt mich natürlich immer mehr verstehen.

kannst du das statt für vector auch für point machen?

wäre äußerst nett.
 

Dreamora

BeitragDi, Jun 24, 2008 2:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein Punkt ist nix anderes als ein Vektor von 0 zum Punkt
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BB-Fan

BeitragDi, Jun 24, 2008 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
hab trotzdem noch nicht verstanden, wie ich tformpoint und tformedx usw. herleiten kann?

wie die matrix in etwa aufgebaut ist, weiß ich, nur wärs toll, wenn da jemand was tun könnte.
 

Dreamora

BeitragDi, Jun 24, 2008 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
tformedpoint = tformedvector

und tformedx zb ist einfach die X Koordinate der Transformation des Ursprungsvektors in den neuen Vektorraum. Diese transformation wird durch die Matrix ausgedrückt.

Am einfachsten kaufst du dir den 3D math primer for graphics and game development, wenn du die matrix - vektor rechnung dahinter verstehen willst.

In blitz selbst würdest du das NIEMALS umschreiben weil es dann gleich eine ganze ecke langsamer wird als mit tform

TForm macht nichts anderes als das entsprechende Objekt von einem Koordinatensystem in ein anderes umzurechnen. Die Mathe brauchst du dafür eigentlich nicht zu können, zeichnen ist wichtiger, dann kannst du dir die 2 objekt lokalen koordinatensystem (oder 1 objektlokales + 0 system) nämlich aufzeichnen und verstehst was es macht!
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BB-Fan

BeitragDi, Jun 24, 2008 14:57
Antworten mit Zitat
Benutzer-Profile anzeigen
aber stell dir vor, ich könnte komplette matrizenberechnungen durchführen, und hätte auf jeden fall koordinaten als argumente zur verfügung, wie würde so etwas aussehen?

ich habe einen befehle um 4x4 matrix zu multiplizieren, einen zum invertieren, einen um vektor mit matrix zu multiplizieren und noch ein paar andere.

könnte man damit was anfangen?
 

Dreamora

BeitragDi, Jun 24, 2008 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
aufhören im blitz3d board nach dingen zu fragen die nix mit blitz3d zu tun haben

moved

Und angenommen du hast die funktionen: Besuch seiten zu Matrix - Vektor Rechnung oder kauf dir das von mir oben erwähnte buch.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BB-Fan

BeitragDi, Jun 24, 2008 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
na da bin ich ja mal froh, dass ich net der einzige bin, der es nicht kapiert.grins

nach was muss ich in dem buch suchen? bzw. wie nennt sich diese form der umrechnung/transformation denn?

da ist ja englisch, und da brauch ich eh bisschen länger, aber wenns gut ist, würd ich es mir glatt kaufen, kann man sicher eh brauchen.
 

Dreamora

BeitragDi, Jun 24, 2008 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab damit relativ wenige Probleme. Meine 2D Engine im BM macht nichts anderes als TForm.
Was meinst du was genau passiert wenn du ein Objekt an ein anderes hängst via EntityParent? Das bleibt nicht durch Magie am gleichen Ort relativ zum parent, das ist weil die lokalen Position des Childs via TForm (-> simple hierarchische Vektorraumtransformationenen, Basiswissen wenn man zb eine 3D Engine schreiben will) aktualisiert wird.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BB-Fan

BeitragDi, Jun 24, 2008 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
ah, gutes beispiel, der globale bezugspunkt 0,0,0 wird auf den neuen punkt festgelegt.
und alle globalen xyz beziehen sich nun auf diesen, schon hab ich was verstanden.

praktisch gesehen jedoch, weiß ich nicht was alle die parameter hier bedeuten:

TFormPoint x#, y#, z#, quelle%, ziel%

es steht in der hilfe zwar zu jedem eine erklärung, verstehen tu ich es jedoch nicht.

x: z.b. Koordinate X für Transformation (normal)

was für eine x koordinate? von was? für was?

und

Quell% - Objekt für Transformation (0=global) welche informationen werden da übergeben, doch sicher nicht nur das entityhandle!

und tformedx bsp. gibt dann was zurück?
 

X-tra

BeitragSa, Jun 28, 2008 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
mmmm ich schnall das auch nicht, bzw. diese funktionsweise, und wozu man das nehmen könnte.

in der hilfe steht nicht wirklich viel drin, wenn man mit sowas anfängt, denke ich fehlen einfach die grundlagen, oder man denkt einfach zu kompliziert.

kanns nicht noch jemand anders, vielleicht bildlich erklären?
 

ChristianK

BeitragSa, Jun 28, 2008 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Zum Beispiel:

Ein 3D-Raumschiff soll sich in deinem Spiel vom Punkt 2, 2, 2 aus um eine Einheit nach vorne bewegen. In Blitz3D schreibst du dafür einfach MoveEntity schiff, 0, 0, 1. Diese relative, lokale Koordinate muss jetzt irgendwie in eine globale Koordinate umgewandelt werden. Wenn das Raumschiff eine Rotation von 0 hat, ist die globale Position dem entsprechend 2, 2, 3. Aber was, wenn das Schiff um 45 Grad gedreht ist?
Dann ändert sich nur die Z-Position, sondern auch X, da sich das Schiff global gesehen auch etwas nach rechts bewegt. Und um diese neue Position ( bzw. den Bewegungsvektor ) auszurechnen, nutzt man Vektortransformation, bei der man die Bewegung aus Sicht des Objektes ins globale Koordinatensystem umrechnet.
Geht natürlich auch umgekehrt, oder eben mit Punkten bei TFormPoint.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Noobody

BeitragSa, Jun 28, 2008 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun, angenommen, du hast ein Mesh erstellt, in dem du einen Würfel mit AddVertex und AddTriangle erstellt hast.
Jetzt bewegst du das Mesh, rotierst es noch ein wenig und willst nun die Koordinaten der linken vorderen oberen des Würfels wissen (beispielsweise, um dort ein Sprite oder sonstwas zu positionieren).
Du kennst zwar die Koordinaten des Vertex relativ zum Würfelmittelpunkt (beispielsweise {-1|1|-1}), aber diese Koordinaten entsprechen nicht seinen Koordinaten relativ zum Nullpunkt des Weltkoordinatensystems, da du den Würfel noch rotiert und bewegt hast.
Hier kommt TFormPoint ins Spiel.
Du rufst nun den Befehl mit den Koordinaten des Vertex auf (natürlich relativ zum Würfelmittelpunkt), mit dem Handle des Würfels als Quelle und als Ziel 0 (für das Weltsystem).
Jetzt kannst du mit TFormedX() etc. seine Koordinaten bezüglich des Weltnullpunktes abrufen und so andere Objekte an ihn dranhängen oder sonst was tun.
Man kann natürlich auch von einem Objektsystem in ein anderes umrechnen und noch vieeele andere tolle Dinge tun, aber als Beispiel sollte dies reichen.

Edit: Ich hätte schwören können, dass dein Post bei der Vorschau noch nicht da war...
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

Triton

BeitragMo, Jun 30, 2008 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Was hat das eigentlich in OT zu suchen?

verschoben nach B3D
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group