ohne einfluss des winkels skalieren

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

lettorTrepuS

Betreff: ohne einfluss des winkels skalieren

BeitragDi, Sep 21, 2004 4:44
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Suco-X

Betreff: ..........

BeitragDi, Sep 21, 2004 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach doch freundlicherweise ein kleines Sample, was dein Problem zeigt.
So könnten dir mehr Leute helfen. Deine Beschreibung ist nicht gerade einleuchtend.
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

lettorTrepuS

BeitragDi, Sep 21, 2004 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Markus2

BeitragDi, Sep 21, 2004 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Du mußt deine Scalierung so drehen wie das Objekt im Raum steht .
Dafür kannste nen Pivot nehmen , als Pos. die Werte für XYZ Scalierung ,
dann drehen wie Objekt , dann XYZ auslesen und dann das Objekt so Scalieren .
Irgendwie so in der Art Confused
 

lettorTrepuS

BeitragDi, Sep 21, 2004 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

Dreamora

BeitragDi, Sep 21, 2004 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
In Blitz3D ist es so, dass ScaleEntity / RotateEntity die BoundingBox beeinflussen, während ScaleMesh / RotateMesh die Vertexdaten selbst beeinflussen.
In Blitz3D kann man also mittels RotateMesh und ScaleEntity ein Objekt innerhalb eines "Quaders" rotieren lassen.

Für OpenGL heisst das, dass die EntityBefehle sich auf die Objektmatrix auswirken während die Meshbefehle direkt mit den Vertexdaten verändern.


newx# = x# * cos( alpha# ) * cos( beta# ) * scalex#
newy# = y# * cos( beta# ) * scaley#
newz# = z# * sin( alpha# ) * sin( beta# ) * scalez#

wobei alpha# der winkel um die Y achse ist mit start bei der x achse und beta# der winkel zur x-z-Ebene ist.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

lettorTrepuS

BeitragDi, Sep 21, 2004 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

Dreamora

BeitragDi, Sep 21, 2004 17:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Da du ja in 3D rotierst, ist nur 1 Rotationswinkel nicht möglich ( solange man nicht mit Quaternions arbeitet ), sondern du benötigst 2 Winkel.

Alpha ist dabei der Winkel in der Grundebene ( Boden, also X-Z-Ebene ), während Beta der Rotationswinkel zu dieser Ebene ist.

Beta muss dabei aus dem Rotationswinkel um X und Rotationswinkel um Z errechnet werden. Ich suche aktuell noch die Formel, werde sie später hier hinzueditieren und dir zusätzlich per PM zukommen lassen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

lettorTrepuS

BeitragDi, Sep 21, 2004 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

lettorTrepuS

BeitragFr, Okt 01, 2004 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

Dreamora

BeitragFr, Okt 01, 2004 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry habe im Moment keine Zeit 1-2h nach der Umrechnungsformel von 2 winkeln auf 1 winkel zu suchen, da ich bis kommenden Montag Prüfungen habe.

Für welchen Zweck brauchst du es? In Blitz3D oder in OpenGL? Da es auch andere Mittel und wege gibt die beträchtlich effizienter sind.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

lettorTrepuS

BeitragFr, Okt 01, 2004 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Markus2

BeitragFr, Okt 01, 2004 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
@ShadowTurtle
Wenn das aber mit dem Pivot so geht könntest du es aber bestimmt
leicht umsetzen .
Vom Pinzip her brauchst du drei Achsen & Matrix berechnungen ...


Code: [AUSKLAPPEN]

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

.VectorenTypes

Type V2D
 Field x#
 Field y#
End Type

Type V3D
 Field x#
 Field y#
 Field z#
End Type

Dim mx#(4, 4)  ;Matrix
Dim mx1#(4, 4) ;Matrix1
Dim mx2#(4, 4) ;Matrix2

;################################################################################################# Vector

.Vectoren

Function toV3D.V3D(v.V3D,x#, y#, z#)

 ;MR 22.06.2003

 ;V must be exist !

 V\x = x
 V\y = y
 V\z = z

 Return v

End Function

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

Function newV3D.V3D(x#, y#, z#)

 ;MR 22.06.2003

 Local v.V3D=New V3D

 V\x = x
 V\y = y
 V\z = z

 Return v

End Function

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

Function V3D2D(v1.V3D,v2.V2D)
 
 ;MR 23.06.2003
   
 ;Vector von 3D in 2D umrechnen
   
 v2\x =  v1\x
 v2\y = -v1\y ;Plus ist Oben

 ;v2\y =  v1\z  ;TEST !!! sicht von oben
 
End Function

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

Function VCOPY(v.V3D, vout.V3D)

 ;MR 22.06.2003
 
 ;=
 
 vout\x = v\x
 vout\y = v\y
 vout\z = v\z

End Function

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

Function VADD(v1.V3D, v2.V3D,vout.V3D)

 ;MR 22.06.2003
 
 ;+
 
 vout\x = v1\x + v2\x
 vout\y = v1\y + v2\y
 vout\z = v1\z + v2\z

End Function

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

Function VSUB(v1.V3D, v2.V3D,vout.V3D)

 ;MR 22.06.2003
 
 ;-
 
 vout\x = v1\x - v2\x
 vout\y = v1\y - v2\y
 vout\z = v1\z - v2\z

End Function

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

Function VMUL(v1.V3D, v2.V3D,vout.V3D)

 ;MR 22.06.2003
 
 ;*
 
 vout\x = v1\x * v2\x
 vout\y = v1\y * v2\y
 vout\z = v1\z * v2\z

End Function

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

Function VDIR(a.V3D, b.V3D,vd.V3D)

 ;MR 23.06.2003

 Local hyp#
 
 VSUB b,a,vd
 
 hyp = Sqr(vd\x * vd\x + vd\y * vd\y + vd\z * vd\z)
 
 If hyp <> 0.0 Then
  vd\x = vd\x / hyp
  vd\y = vd\y / hyp
  vd\z = vd\z / hyp
 Else
  vd\x = 0.0
  vd\y = 0.0
  vd\z = 0.0
 End If
 
 ;returns vector in vd
 
End Function

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

Function VENT#(a.V3D, b.V3D)
 
 ;MR 22.06.2003
 
 ;Entfernung

 Local ve.V3D=New V3D
 Local e#

 VSUB b, a,ve
 
 e = Sqr(ve\x * ve\x + ve\y * ve\y + ve\z * ve\z)

 Delete ve

 Return e
 
End Function

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

Function VINV(a.V3D,b.V3D)

 ;MR 22.06.2003
   
 ;Invertiert Vector , aus Plus wird Minus und umgekehrt
 
 b\x = -a\x
 b\y = -a\y
 b\z = -a\z

End Function

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

Function VDOT#(a.V3D, b.V3D)
 
 ;MR 22.06.2003

 ;Dotprodukt - Skalarprodukt
 
 ;berechnet ein Skalarprodukt zweier Vectoren
 
 Return (a\x * b\x + a\y * b\y + a\z * b\z)
 
End Function

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

Function VNORM(a.V3D)

 ;MR 22.06.2003
 
 ;gibt Normvector zurück , aufpassen auf überlauf !
 
 Local fa#
 
 fa = Sqr(VDOT(a, a))
 
 If fa = 0 Then
  a\x = 0
  a\y = 0
  a\z = 0
 Else
  fa = 1.0 / fa
  a\x = a\x * fa
  a\y = a\y * fa
  a\z = a\z * fa
 End If
 
End Function

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

Function VCROSS(a.V3D,b.V3D,c.V3D)
 
 ;MR 22.06.2003
 
 ;gibt Vectorprodukt zurück
 
 c\x = a\y * b\z - b\y * a\z
 c\y = a\z * b\x - b\z * a\x
 c\z = a\x * b\y - b\x * a\y
 
End Function

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

Function VTRANS(a.V3D)

 ;MR 23.06.2003

 ;überschribt den Vector ! AUFPASSEN !

 Local b.V3D=New V3D
 
 ;DebugLog "vorher A\xyz"

 ;DebugLog a\x
 ;DebugLog a\y
 ;DebugLog a\z

 b\x = a\x * mx(0, 0) + a\y * mx(1, 0) + a\z * mx(2, 0)
 b\y = a\x * mx(0, 1) + a\y * mx(1, 1) + a\z * mx(2, 1)
 b\z = a\x * mx(0, 2) + a\y * mx(1, 2) + a\z * mx(2, 2)

 ;ByRef
 
 a\x = b\x
 a\y = b\y
 a\z = b\z

 ;DebugLog "nacher A\xyz"

 ;DebugLog a\x
 ;DebugLog a\y
 ;DebugLog a\z

 ;DebugLog "Matrix"

 ;DebugLog mx(0,0)
 ;DebugLog mx(0,1)
 ;DebugLog mx(0,2)

 ;DebugLog mx(1,0)
 ;DebugLog mx(1,1)
 ;DebugLog mx(1,2)

 ;DebugLog mx(2,0)
 ;DebugLog mx(2,1)
 ;DebugLog mx(2,2)

 Delete b
 
End Function

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

Function MatrixZero()
 
 ;MR 22.06.2003
 
 Local i, j
 
 For i = 0 To 3
  For j = 0 To 3
   mx(i, j) = 0.0
  Next
 Next
 
End Function

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

Function MatrixCreateIdentity()

 ;MR 22.06.2003

 Local i

 For i = 0 To 3
  mx(i, i) = 1.0
 Next
 
End Function

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

Function MatrixCreateTranslate(a.V3D)
 
 ;MR 22.06.2003
 
 MatrixCreateIdentity()
 
 mx(3, 0) = a\x
 mx(3, 1) = a\y
 mx(3, 2) = a\z
 
End Function

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

Function MatrixCreateAxisRotate(axis.V3D,Angle#)

 ;MR 22.06.2003
 
 Local sqraxis.V3D=New V3D
 
 sqraxis\x = sqare(axis\x)
 sqraxis\y = sqare(axis\y)
 sqraxis\z = sqare(axis\z)
 
 Local cosine#
 
 cosine = Cos(Angle)
 
 Local sine#
 
 sine = Sin(Angle)
 
 Local one_minus_cosine#
 
 one_minus_cosine = 1.0 - cosine
 
 MatrixZero()
 
 mx(0, 0) = sqraxis\x + (1.0 - sqraxis\x) * cosine
 mx(0, 1) = axis\x * axis\y * one_minus_cosine + axis\z * sine
 mx(0, 2) = axis\x * axis\z * one_minus_cosine - axis\y * sine
 
 mx(1, 0) = axis\x * axis\y * one_minus_cosine - axis\z * sine
 mx(1, 1) = sqraxis\y + (1.0 - sqraxis\y) * cosine
 mx(1, 2) = axis\y * axis\z * one_minus_cosine + axis\x * sine
 
 mx(2, 0) = axis\x * axis\z * one_minus_cosine + axis\y * sine
 mx(2, 1) = axis\y * axis\z * one_minus_cosine - axis\x * sine
 mx(2, 2) = sqraxis\z + (1.0 - sqraxis\z) * cosine
 
 mx(3, 3) = 1.0
 
 Delete sqraxis

End Function

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

Function MatrixCreateScale(a.V3D)
 
 ;MR 22.06.2003

 MatrixZero
 
 mx(0, 0) = a\x
 mx(1, 1) = a\y
 mx(2, 2) = a\z
 
End Function

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

Function MatrixMultiply()

 ;MR 22.06.2003
 
 ;Multipliziert Matrix 1 & 2
 
 Local i,j
 
 For i = 0 To 3
  For j = 0 To 3
   mx(i, j) = mx1(i, 0) * mx2(0, j) + mx1(i, 1) * mx2(1, j) + mx1(i, 2) * mx2(2, j) + mx1(i, 3) * mx2(3, j)
  Next
 Next
 
End Function

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

Function MatrixKamera(ObjX.ObjektType)
 
 ;MR 23.06.2003
 
  Local o.V3D
  o = newV3D(0, 0, 0)

  Local ax.V3D=New V3D
  Local ay.V3D=New V3D
  Local az.V3D=New V3D
 
  VDIR ObjX\AchseX, o,ax
  VDIR ObjX\AchseY, o,ay
  VDIR ObjX\AchseZ, o,az
 
  mx(0, 0) = ax\x
  mx(0, 1) = ay\x
  mx(0, 2) = az\x
  mx(0, 3) = 0
  mx(1, 0) = ax\y
  mx(1, 1) = ay\y
  mx(1, 2) = az\y
  mx(1, 3) = 0
  mx(2, 0) = ax\z
  mx(2, 1) = ay\z
  mx(2, 2) = az\z
  mx(2, 3) = 0
  mx(3, 0) = 0
  mx(3, 1) = 0
  mx(3, 2) = 0
  mx(3, 3) = 1

 Delete o

 Delete ax
 Delete ay
 Delete az
 
End Function

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

Function sqare#(x#)

 ;MR 23.06.2003

 Return (x * x)

End Function

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

Function mMax#(a#, b#)
 
 ;MR 22.06.2003
 
 If a > b Then
  Return a
 Else
  Return b
 End If
 
End Function

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

Function mMin#(a#, b#)
 
 ;MR 22.06.2003
 
 If a < b Then
  Return a
 Else
  Return b
 End If
 
End Function

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

Function mMin3#(a#,b#,c#)
 
 ;MR 27.06.2003

 Return mMin(a,mMin(b,c))

End Function

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

Function mMax3#(a#,b#,c#)

 ;MR 27.06.2003

 Return mMax(a,mMax(b,c))

End Function


 

lettorTrepuS

BeitragSa, Okt 02, 2004 0:11
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group