SingleSurface - 2 Vertexe zur Kamera ausrichten

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Xaymar

ehemals "Cgamer"

Betreff: SingleSurface - 2 Vertexe zur Kamera ausrichten

BeitragSa, Okt 10, 2009 0:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann ich Vertexe so ausrichten das die Triangles davon zur Kamera gucken? Ich hab ne wage lösung aber die funktioniert nicht richtig. Wie kann ich das machen?

Derzeitiger Update BlitzBasic: [AUSKLAPPEN]
Function UpdateTrails(Came)
Local T.Trails, Cur, V[4], CamOff#[3], OffX#, OffY#, OffZ#
For T = Each Trails
T\X[0] = EntityX(T\Parent):T\Y[0] = EntityY(T\Parent):T\Z[0] = EntityZ(T\Parent)
;PositionEntity T\Mesh, T\X[0], T\Y[0], T\Z[0]
For Cur = 19 To 1 Step -1
T\X[Cur] = T\X[Cur-1]
T\Y[Cur] = T\Y[Cur-1]
T\Z[Cur] = T\Z[Cur-1]
Next
ClearSurface T\Surf

PositionEntity TEnt, T\X[0], T\Y[0], T\Z[0]
PointEntity TEnt, Came

OffX# = Cos(EntityYaw(TEnt))
OffY# = Sin(EntityYaw(TEnt))

V[0] = AddVertex(T\Surf, T\X[0]-OffX, T\Y[0]-OffY, T\Z[0]-OffZ, 0, 0)
V[1] = AddVertex(T\Surf, T\X[0]+OffX, T\Y[0]+OffY, T\Z[0]+OffZ, 1, 0)
For Cur = 1 To 19
V[2] = AddVertex(T\Surf, T\X[Cur]-OffX, T\Y[Cur]-OffY, T\Z[Cur]-OffX, 0, Cur)
V[3] = AddVertex(T\Surf, T\X[Cur]+OffX, T\Y[Cur]+OffY, T\Z[Cur]+OffX, 1, Cur)
AddTriangle T\Surf, V[0], V[1], V[2]
AddTriangle T\Surf, V[2], V[1], V[3]
V[0] = V[2]
V[1] = V[3]
Next
Next
End Function
Warbseite

ToeB

BeitragSa, Okt 10, 2009 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hängst dein Mesh an die Camera mit EntityParent. Ganau auf die Locale 0,0,0 Koordintae der camera. Jetzt machst du zum malen folgendes :
Code: [AUSKLAPPEN]
TFormPoint(patx,paty,patz,0,camera)

Dann kannst du mit TFormedX,TFormedY und TFormedZ die globale Position der Particle in Locale umwandeln und dann an diese Positionen malen. Z ist dabei auch der abstand zur camera, also z.b nur malen wenn z > Camera_min_range ist !

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Xaymar

ehemals "Cgamer"

BeitragSa, Okt 10, 2009 14:57
Antworten mit Zitat
Benutzer-Profile anzeigen
und was ist patx/paty? sry hab noch keine Vector rechnung gehabt/kaum
Warbseite

ToeB

BeitragSa, Okt 10, 2009 14:59
Antworten mit Zitat
Benutzer-Profile anzeigen
patx/y/z sind die positionen der Particle im Raum wo du sie hinhaben möchtest !

TFormedX/Y/Z sind die Koordinaten wo du sie malen musst !

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Xaymar

ehemals "Cgamer"

BeitragSa, Okt 10, 2009 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Das richtet die 2 vertexe aber nicht zur kamera aus, oder hab ich den befehl nu falsch verstanden?
user posted image
So möcht ich das haben, das die beiden vertexe eienn Offset zur mitte haben
Edit: und diesen möchte ich errechnen
Warbseite

ToeB

BeitragSa, Okt 10, 2009 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry ich blick deinen code nicht ganz durch. Bei einzelnen Particlen (also eigenständige 4 Vertexpunkte und 2 Dreicke) funtz das ...


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Xaymar

ehemals "Cgamer"

BeitragSa, Okt 10, 2009 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
der code ist eigentlich egal. Ich möchte nur wissen wie ich diesen vertexe so ausrichte, das die Senkrechte der Linie zwischen den beiden Vertexen auf die Kamera zeigt.
Warbseite
 

Haubitze

BeitragSa, Okt 10, 2009 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,

also so wie ich das verstehe moechtest du die 2 vertex punkte so ausrichten das die
mitte der differenz beider punkte die senkrechte zur camera abbildet.

also zB (pseudo)

Code: [AUSKLAPPEN]

cam=0,0,10
x1=20,0,0
x2=10,0,0

dif=(x1+x2)/2

pos x1-dif
pos x2-dif

Edit:oh warst schneller, erstell dir doch nen pivot der auf der pos der cam steht und du die vertexe anhaengst dann kannst due diese sehr leicht immer ao ausrichten wie du magst


naja glaube es ist noch nich ganz genau das was du willst aber der ansatz duerfte stimmen.

hoffe ich konnte dir einen neuen gedanken injizieren Very Happy

gruesse
  • Zuletzt bearbeitet von Haubitze am Sa, Okt 10, 2009 17:05, insgesamt einmal bearbeitet

ToeB

BeitragSa, Okt 10, 2009 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
aso ^^

Theroetisch müsste das auch so gehen... oder versuchs mal mit winkeln :

Winkel mit atan2 ausrechen :
Code: [AUSKLAPPEN]
winkel# = Atan2(v2y-v1y,v2x-v1x)
mid# = Sqr((v2x-v2y)^2+(v2y-v1y)^2)/2.0
v1x = mid+cos(winkel+90)*abstand
v1y = mid+sin(winkel+90)*abstand
v2x = mid+cos(winkel-90)*abstand
v2y = mid+sin(winkel-90)*abstand


So funtz es in 2D. bei 3D winkel habe ích keine ahnung sry..

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Xaymar

ehemals "Cgamer"

BeitragSa, Okt 10, 2009 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ne lösung gefunden, ist zwar nicht die beste, aber sie geht^^

TrailSystem Test.bb
BlitzBasic: [AUSKLAPPEN]
;trailsystem test
Graphics3D 1024, 768, 32, 2
Include "TrailSystem.bb"
SeedRnd MilliSecs()

Piv = CreatePivot()
Box = CreateCone():ScaleEntity box, .2, .2, .2
Camera = CreateCamera(Piv):PositionEntity Camera, 0, 0,-25, 1
Texture = LoadTexture("texture.png", 2)
InitTrail(Camera)
WireFrame 1
trail = AddTrail(Texture ,Box, 1, 5)

r = 20
While Not KeyHit(1)
Cls


If KeyDown(28)
PositionEntity Box, Cos(a)*r, Sin(a*2)*5, Sin(a)*r
a = a + 1
EndIf
RotateEntity Piv, EntityPitch(Piv)+MouseYSpeed(), EntityYaw(Piv)-MouseXSpeed(), 0

MoveMouse 512, 384

UpdateTrails(Camera)
ColorTrail(trail, r2, g2, b2)
r2 = r2 + 25
If r2 > 255
g2 = g2 + 25
r2 = 0
If g2 > 255
b2 = b2 + 25
g2 = 0
If b2 > 255
b2 = 0
EndIf
EndIf
EndIf

RenderWorld

Flip
Wend


TrailSystem.bb
BlitzBasic: [AUSKLAPPEN]
;SingleSurface Trails
Global TInterval
Const TrailVertexes = 100
Global TPiv, ViewCam
Global TBox1
Global TBox2

Type Trails
Field Parent
Field Mesh, Surf, Size#
Field X#[TrailVertexes], Y#[TrailVertexes], Z#[TrailVertexes]
Field Interval, R[TrailVertexes], G[TrailVertexes], B[TrailVertexes]
End Type

Function InitTrail(Cam)
TPiv = CreatePivot():ViewCam = Cam
TBox1 = CreateCube(TPiv):MoveEntity TBox1, 0, 5, 0:ScaleEntity TBox1, .1, .1, .1
TBox2 = CreateCube(TPiv):MoveEntity TBox2, 0,-5, 0:ScaleEntity TBox2, .1, .1, .1
End Function

Function AddTrail(Texture, Parent, Size#, Interval)
Local T.Trails = New Trails, TempBrush, TCount
TempBrush = CreateBrush(255, 255, 255):BrushTexture TempBrush, Texture:BrushFX TempBrush, 19
T\Mesh = CreateMesh():T\Surf = CreateSurface(T\Mesh, TempBrush)
FreeBrush TempBrush
T\Parent = Parent:T\Interval = Interval:T\Size = Size
For TCount = 0 To TrailVertexes
T\X[TCount] = EntityX(T\Parent):T\Y[TCount] = EntityY(T\Parent):T\Z[TCount] = EntityZ(T\Parent)
T\R[TCount] = 255:T\G[TCount] = 255:T\B[TCount] = 255
Next
Return Handle(T.Trails)
End Function

Function RemoveTrail(Trail)
Local T.Trails = Object.Trails(Trail)
FreeEntity T\Mesh:Delete T.Trails
End Function

Function ColorTrail(Trail, R, G, B)
Local T.Trails = Object.Trails(Trail)
T\R[0] = R:T\G[0] = G:T\B[0] = B
End Function

Function UpdateTrails(Came)
Local T.Trails, Cur, V1[3], Pos#[5], Multi#, Dist#, LDist#
TInterval = TInterval + 1
For T = Each Trails
T\X[0] = EntityX(T\Parent):T\Y[0] = EntityY(T\Parent):T\Z[0] = EntityZ(T\Parent)
If (TInterval Mod T\Interval) = 0
For Cur = TrailVertexes To 1 Step -1
T\X[Cur] = T\X[Cur-1]:T\Y[Cur] = T\Y[Cur-1]:T\Z[Cur] = T\Z[Cur-1]
T\R[Cur] = T\R[Cur-1]:T\G[Cur] = T\G[Cur-1]:T\B[Cur] = T\B[Cur-1]
Next
EndIf
ClearSurface T\Surf

V1[0] = AddVertex(T\Surf, T\X[TrailVertexes], T\Y[TrailVertexes], T\Z[TrailVertexes], 0, 0):VertexColor T\Surf, V1[0], T\R[Cur], T\G[Cur], T\B[Cur]
V1[1] = AddVertex(T\Surf, T\X[TrailVertexes], T\Y[TrailVertexes], T\Z[TrailVertexes], 1, 0):VertexColor T\Surf, V1[1], T\R[Cur], T\G[Cur], T\B[Cur]
For Cur = TrailVertexes-1 To 0 Step -1
LDist = Dist:Dist = Abs(Sqr((T\X[Cur+1]-T\X[Cur])^2.0 + (T\Y[Cur+1]-T\Y[Cur])^2.0 + (T\Z[Cur+1]-T\Z[Cur])^2.0)):Multi = 1-(Cur/Float(TrailVertexes))

PositionEntity TPiv, T\X[Cur], T\Y[Cur], T\Z[Cur], 1
PositionEntity TBox1, 0, -T\Size*Multi, 0
PositionEntity TBox2, 0, T\Size*Multi, 0
PointEntity TPiv, ViewCam, 1

Pos[0] = EntityX(TBox1, 1):Pos[1] = EntityY(TBox1, 1):Pos[2] = EntityZ(TBox1, 1)
Pos[3] = EntityX(TBox2, 1):Pos[4] = EntityY(TBox2, 1):Pos[5] = EntityZ(TBox2, 1)

;V1[2] = AddVertex(T\Surf, T\X[Cur]-T\Size*Multi, T\Y[Cur], T\Z[Cur], 0, LDist# + Dist + Cur):VertexColor T\Surf, V1[2], T\R[Cur], T\G[Cur], T\B[Cur]
;V1[3] = AddVertex(T\Surf, T\X[Cur]+T\Size*Multi, T\Y[Cur], T\Z[Cur], 1, LDist# + Dist + Cur):VertexColor T\Surf, V1[3], T\R[Cur], T\G[Cur], T\B[Cur]
V1[2] = AddVertex(T\Surf, Pos[0], Pos[1], Pos[2], 0, LDist# + Dist + Cur):VertexColor T\Surf, V1[2], T\R[Cur], T\G[Cur], T\B[Cur]
V1[3] = AddVertex(T\Surf, Pos[3], Pos[4], Pos[5], 1, LDist# + Dist + Cur):VertexColor T\Surf, V1[3], T\R[Cur], T\G[Cur], T\B[Cur]

AddTriangle T\Surf, V1[0], V1[1], V1[2]
AddTriangle T\Surf, V1[2], V1[1], V1[3]

V1[0] = V1[2]:V1[1] = V1[3]
Next
Next
End Function
Warbseite

Xaymar

ehemals "Cgamer"

BeitragSo, Jun 13, 2010 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Da ich es bis jetzt noch nicht geschafft habe das richtig umzusetzen, grabe ich dies mal eben aus.

Also folgende Situation:
-Ich habe 4 Vertex = 2 Triangles
-Die Senkrechte der entstehenden Fläche muss zur Kamera zeigen(immer genau zur Kamera)

Wie löse ich das jetzt? Bisherige Versuche mit TFormPoint waren erfolglos.

Edit: Zitat:
Ein halbes Jahr später zurück kommen ist schon echt ein Hammer...
war das sarkasmus?
  • Zuletzt bearbeitet von Xaymar am So, Jun 13, 2010 21:45, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Jun 13, 2010 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein halbes Jahr später zurück kommen ist schon echt ein Hammer... TFormPoint ist hier dein Freund.

Arrow Erstell ein Mesh, dass die Kamera als Parent hat
Arrow Auf dieses Mesh als Bezug lädst du nun deine Textur
Arrow Und nun folgender Code ist aus meiner Draw3D2 kopiert und gekürzt:

Code: [AUSKLAPPEN]
;RAUMPROJEKTION/VON: 'aMul'
TFormPoint(FDrawX,FDrawY,FDrawZ,0,GDrawCamera)

;KAMERA/Z-POSITION
FDrawZ=TFormedZ()

;SICHTBARKEIT/PRÜFEN
If FDrawZ>0 Then
   
   ;TRANSFORMATION
   FDrawX=TFormedX()
   FDrawY=TFormedY()
   
   ;VERTEX/POLYGON/ZUWEISUNGEN
   IDrawV0=AddVertex(LDrawFace,FDrawX-1,FDrawY+1,FDrawZ ,LDrawU1MP,LDrawV1MP)
   IDrawV1=AddVertex(LDrawFace,FDrawX+1,FDrawY+1,FDrawZ ,LDrawU2MP,LDrawV1MP)
   IDrawV2=AddVertex(LDrawFace,FDrawX+1,FDrawY-1,FDrawZ ,LDrawU2MP,LDrawV2MP)
   IDrawV3=AddVertex(LDrawFace,FDrawX-1,FDrawY-1,FDrawZ ,LDrawU1MP,LDrawV2MP)
   AddTriangle LDrawFace,IDrawV0,IDrawV1,IDrawV2
   AddTriangle LDrawFace,IDrawV2,IDrawV3,IDrawV0
End If
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group