ohne einfluss des winkels skalieren
Übersicht

lettorTrepuSBetreff: ohne einfluss des winkels skalieren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
Suco-XBetreff: .......... |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group