Hälp! Brauche kurz Nachhilfe in Sachen 'Normale'

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

x-pressive

Betreff: Hälp! Brauche kurz Nachhilfe in Sachen 'Normale'

BeitragSo, Feb 15, 2004 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Also irgendie raffe ich das mit den 'Normalen' noch nicht so ganz. Ich dachte immer, der einzige Zweck von Normalen wäre, zu bestimmen, welche Seite eines Polygons sichtbar ist, und welche nicht. Eine Normale ist doch eine gedachte 'Linie', die vom Mittelpunkt eines Polygons ausgeht, und an deren Richtung man erkennt, welche Seite des Polygons sichtbar ist (nämlich jene, in deren Richtung die Normale zeigt). Stimmt das so?

Wenn ja, wie können Normale dann 'kollidieren'? Zitat Online-Hilfe:
Zitat:
Die Funktion COLLISIONNX liefert die X-Koordinate eines kollidierten Normals.
Was soll das heißen?

Welche Koordinaten hat so eine Normale? Den Mittelpunkt des Polygons?

Braucht man eine Normale noch zu anderen Zwecken? Welche?
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Vertex

BeitragSo, Feb 15, 2004 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Normale ist ein Vektor keine gedachte Linie, da sie nicht immer
eine Koordinate hat.
Beim Smoothshading wo jeder Vertex eine Normale hat, beitzt der
Vektor eine Position nämlich die X, Y und Z Koordinate des Vertex.
Bei der Kollision sieht das anders aus. Stell Dir vor Du hast 2 Kugeln.
Die eine(Kugel1) ist oben und die andere(Kugel2) ist unten (hat also einen
kleineren Y Wert als Kugel1)
Bewegst Du Kugel2 so lange nach oben bis sie mit Kugel1 kollidiert, so
ist der Kollisionsvektor (0,-1,0) da er durch die -1 nach unten zeigt.
Beim Hiddenfaceremovel wird ein Vektor auf Grund des Kreuzproduktes
der Vektoren Vertex0 - Vertex1 und Vertex0 - Vertex2 gebildet.
Er steht also senkrecht auf dem Triangle. Zeigt dieser dann in Richtung
des betrachters, wird das Triangle gerendert, andernfalls nicht.
mfg olli
vertex.dreamfall.at | GitHub

x-pressive

BeitragSo, Feb 15, 2004 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Bewegst Du Kugel2 so lange nach oben bis sie mit Kugel1 kollidiert, so
ist der Kollisionsvektor (0,-1,0) da er durch die -1 nach unten zeigt.


Was mich aber verwirrt: das kommt doch immer auf den Betrachtungswinkel an, oder nicht? Von Kugel2 aus gesehen, wäre der Kollisionsvektor doch dann 0,1,0 (also nach oben), von Kugel1 aus gesehen hingegen 0,-1,0 (nach unten) -oder? Woher weiß Blitz, welche RICHTUNG der Vektor hat?
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Vertex

BeitragSo, Feb 15, 2004 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

AppTitle "Kollisionsvektor - Example"
Graphics3D 640,480,32,2
SetBuffer BackBuffer()

Kugel1 = CreateSphere()
EntityType Kugel1,1
EntityRadius Kugel1,1.0
EntityColor Kugel1,255,255,0 ; Gelb
PositionEntity Kugel1,0,4,0  ; "Oben"

Kugel2 = CreateSphere()
EntityType Kugel2,2
EntityRadius Kugel2,1.0
EntityColor Kugel2,0,255,255 ; Türkis
PositionEntity Kugel2,0,-4,0 ; "Unten"

Kamera = CreateCamera()
PositionEntity Kamera,0,0,-10

Licht = CreateLight(1,Kamera)

While Not KeyDown(1)
   If KeyDown(200) Then MoveEntity Kugel2,0,0.1,0
   If KeyDown(208) Then MoveEntity Kugel2,0,-0.1,0
   
   Collisions 2,1,1,1 ; Zu überprüfendertyp = 2, Zieltyp = 1

   UpdateWorld : RenderWorld
   
   If CountCollisions(Kugel2) > 0 Then
      Text 0,00,"NX: " + CollisionNX#(Kugel2,1) ; Es kann nur eine Kollision statt-
      Text 0,10,"NY: " + CollisionNY#(Kugel2,1) ; finden, da nur Kugel1 zu überprüfen
      Text 0,20,"NZ: " + CollisionNZ#(Kugel2,1) ; ist
   Else
      Text 0,00,"Keine Kollision"
   EndIf
   
   Flip
Wend


Da Du bei CollisionNX, Y und Z das Entity angeben musst, weiss Blitz von
welchen Entity er den Vektor aus berechnen soll.
Übrigens ich habe mich oben etwas vertan. Auch bei der Kollision gibt es
eine definierte Position die man mit CollisionX, Y und Z heraus bekommt.
mfg olli
vertex.dreamfall.at | GitHub

x-pressive

BeitragSo, Feb 15, 2004 20:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, das Prinzip ist mir jetzt einigermaßen klar -aber ich weiß noch nicht genau, ob es mir bei meinem Problem weiterhelfen kann (ich vermute es nur).

Ich habe nämlich folgendes Problem: ich möchte dort, wo ein Schuss auf eine Wand trifft (die Schüsse fliegen langsam, also nicht per Linepick oder so), ein Einschussloch plazieren. Weil es davon aber sehr viele geben soll, möchte ich keine Sprites benutzen, da jedes Sprite ein Surface benötigt, und ich die Anzahl der Surfaces aus Performancegründen so niedrig wie möglich halten möchte.

Statt Sprites benutze ich also 'single surface quads', das heißt, ich habe anfangs ein leeres Mesh mit einem Surface, zu dem ich jedesmal, wenn ich ein Einschussloch brauche, ein Viereckiges Polygon (ein 'Quad') hinzufüge, das als Textur eben ein Einschussloch zeigt.

Soweit klappt das auch -das Problem ist aber, dieses Quad, bzw. dessen vier Vertices richtig zu plazieren. Die Vertices sollten sich der Oberfläche des getroffenen Objekts anpassen (die auch schräg, oder bei einem Terrain hügelig sein kann), wobei gleichzeitig die SICHTBARE Seite des Polygons/Quads vom Objekt WEGSCHAUEN müsste, da das Quad ja sonst für den Betrachter unsichtbar ist.

Ich weiß, das ist ein bisschen verzwickt Confused Wie könnte man das umsetzen?
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Vertex

BeitragSo, Feb 15, 2004 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Dafür brauchst Du soetwas kompliziertes nicht machen. Speichere die
Einschüssen in einen Type und lösche sie nach eine gewissen Zeit
(am besten langsam über EntityAlpha ausblenden lassen). So macht man
es
in Quake auch.
Also platzierst Du die Sprites an CollisionX, Y und Z und drehst sie um
VectorPitch und Yaw dessen Vektor Du aus CollisionNX, Y und Z bekommst.
Wobei ich bei kleinen Geschossen keinen Grund sehe, Pick zu benutzen.
mfg olli
vertex.dreamfall.at | GitHub

Markus2

BeitragSo, Feb 15, 2004 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Nimm einfach ein Quad Mesh (CopyEntity)
was du erstmal richtig ausrichtest
mit Align to Vector , dann PositionMesh wo es auftrifft und dann
zu deinem Master Quad Mesh hinzufügst und dann das Dummy Mesh
wieder löscht .

Mit anderen Worten , versuche es erstmal ohne deinem
gesamt Mesh wo du die Löcher drin sammelst .

x-pressive

BeitragSo, Feb 15, 2004 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Idee mit dem Dummy-Mesh ist eine gute Lösung (das mit dem langsamen Ausblenden funktioniert leider nur bei recht großen Levels, wo der Spieler das nicht so schnell merkt).

Das Ausrichten per AlignToVector würde schon mal das QuadMesh als Ganzes ausrichten, soweit ok. Dann gibt es aber noch dieses letzte Problem:

Die einzelnen Vertices des QuadMeshes müßte man noch irgendwie dazu kriegen, sich auf die Oberfläche des Zielobjekts zu 'kleben', damit das Quad sich quasi wie ein Handtuch auf das Zielmesh legt und nicht übersteht (z.B. bei einer hügeligen Stelle oder einem Mauervorsprung). Wie könnte man das hinkriegen? Durch EntityPick() vielleicht? Aber wie gebe ich die Richtung an, in die jeder Punkt gePicked werden soll?
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Vertex

BeitragMo, Feb 16, 2004 0:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau Dir mal UT04 Demo an, die Einschusslöscher verschwinden nach ca. 4 Sekunden.
Andere Möglichkeit wäre die Einschusslöscher direkt in die Textur einzeichnen
zu lassen, ne Art Tatoostudio, aber wie man dan wieder die Texelkoordinaten
berechnet, ist ne andere Frage, zumal die Textur ja nicht gekachelt sein
darf.

Und wegen dem "Tucheffekt": Das geht nur via LinePick. 4 mal müsstest
Du dann die virtuelle Linie an den Vertices positionieren, und anhand des
Kollisionsvektors ausrichten. Mit PickedX, Y und Z richtest Du dann den
jeweiligen Vektor aus. Da Linepick aber nicht gerade schnell ist, würde
ich das nur bei deformierten Flächen anwenden. Also bei Wänden macht
das ja keinen sinn, da das Mesh sowiso durch AlignToVector sich an die
Wand anpasst. Solche kleinen Grafikfehler kann man bei Shootern wo es
schnell zugeht verzeihen. Quake3 kümmert sich auch nicht um das Culling
von den Einschusslöschern, sie stehen da auch machmal über.
mfg olli
vertex.dreamfall.at | GitHub

x-pressive

BeitragMo, Feb 16, 2004 0:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Olli, das hilft mir sehr weiter -ich probiere das bis morgen. Eine Frage vielleicht noch: wie kann ich die Koordinaten der einzelnen Punkte im Dummy-Mesh dann denn Vertices in meinem Quad-Mesh übergeben (also quasi Punkt-Koordinaten von einem Mesh in ein anderes transferieren, wobei ja beide Meshes verschiedene Koordinaten haben können)? Geht das in der Reihenfolge:

1.VertexX/Y/Z im Dummy-Mesh abfragen
2.Jede dieser Koordinaten mit TFormPoint() global umrechnen
3.Und dann diese Koordinaten den Punkten im entgültigen Mesh zuordnen (und eventuell noch mal in Objekt-Koordinaten des neuen Meshes umrechnen)?

Ist recht aufwendig -oder wäre das schon wieder komplizierter, als nötig?
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Markus2

BeitragMo, Feb 16, 2004 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
AddMesh source_mesh,dest_mesh

x-pressive

BeitragMo, Feb 16, 2004 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Diesen Befehl kannte ich noch gar nicht -toll Smile Wenn ich ein Mesh zu einem anderen hinzufüge, wird aber nicht im Zielmesh extra eine neue Surface gebildet, oder? Ich meine, woher weiß Blitz, zu welcher Surface er die neuen Polygone hinzufügen soll, wenn ein Mesh z.B. mehrere Surfaces hat?
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Vertex

BeitragMo, Feb 16, 2004 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann man ganz leicht testen mit:
Code: [AUSKLAPPEN]

Graphics3D 640,480,32,2

Primary   = CreateCube()
Secondary = CreateCube()

DebugLog "Surfaces: " + CountSurfaces(Primary)
AddMesh Secondary, Primary
DebugLog "Surfaces: " + CountSurfaces(Primary)


Du siehst Blitz legt im Primarymesh kein zusätzliches Surface an somit
auch kein zusötzlichen Brush.
mfg olli
vertex.dreamfall.at | GitHub

x-pressive

BeitragMo, Feb 16, 2004 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Vertex hat Folgendes geschrieben:
Und wegen dem "Tucheffekt": Das geht nur via LinePick. 4 mal müsstest
Du dann die virtuelle Linie an den Vertices positionieren, und anhand des
Kollisionsvektors ausrichten. Mit PickedX, Y und Z richtest Du dann den
jeweiligen Vektor aus.


Vom Prinzip klar, aber ich finde nicht die entsprechenden Kommandos. Wie kann ich die 'virtuelle Pick-Linie' an einer Koordinate positionieren und dann EntityPick() mitteilen, in welche RICHTUNG es picken soll? Der Befehl empfängt ja nur zwei Parameter: EntityID und Reichweite. Wie aber bestimme ich 1.) den Startpunkt und 2.) die Richtung des Pickens? (sorry, wenn ich nerve, aber ich hantiere eben erst seit 'nem Monat mit B3D und die Online-Hilfe verdient diesen Namen leider kaum, da kaum ersichtlich ist, welche Befehle zusammengehören) Confused

Nachtrag: Ah, du meintest sicher LinePick() -hab's gerade gefunden...
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Vertex

BeitragMo, Feb 16, 2004 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast jetzt den Vektor CollisionNX,Y und Z in den Variablen NX#, NY#
und NZ# gespeichert.
Dann müssen die jeweiligen Vertexkoordinaten in Weltkoordinaten
umgerechnet werden via TFormPoint. Also in der Art
; Lokale Koordinaten
VX# = VertexX#(Surface, VertexID)
VY# = VertexY#(Surface, VertexID)
VZ# = VertexZ#(Surface, VertexID)
; Umrechnen in Weltkoordinaten
TFormPoint VX#,VY#,VZ#,Schusslochmesh,0
; Und die Koordinaten noch den Variablen zuweisen
VX# = TFormedX#()
VY# = TFormedY#()
VZ# = TFormedZ#()

Nun kannst Du die Werte an LinePick übergeben:
Entity = LinePick(VX#,VY#,VZ#,NX#*10.0,NY#*10.0,NZ#*10.0)
Die 10.0 steht für die Länge der virtuellen Linie die auf Pick geprüft
werden soll.
VertexCoord Surface, VertexID, PickedX#(), PickedY#(), PickedZ#()
Damit positionierst Du die Vertices neu.

Nun just ruckeling Smile
mfg olli
vertex.dreamfall.at | GitHub

x-pressive

BeitragMo, Feb 16, 2004 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Argh! Es ist zum Haareraufen Shocked -es klappt einfach nicht. Ich gehe so vor:

1. Ein Dummy-Mesh erstellen, darin ein Quad-Polygon in der Standardgrösse 1x1 und an den Koordinaten 0,0,0 erstellen (die Vertices DIREKT an der Spriteposition zu erstellen, gelingt seltsamerweise nicht).

2. Das DummyMesh setze ich nun mit PositionEntity an die Position des Schuss-Sprites, das gerade mit dem Terrain kollidiert ist.

3. Das Dummy-Mesh mit AlignToVector nach dem Einschlagswinkel/-Richtung ausrichten.

(Bis hierhin klappt das sogar!)

4. Jetzt alle Vertices des Dummy-Meshes durchlaufen und in Schussrichtung bzw. Einschlagsrichtung picken. (Klappt nicht -jetzt verschwinden die Vertices im Nirwana)

5. Das Dummy-Mesh in das Hauptmesh kopieren, in dem alle Quads sitzen. Dummy löschen.

Hier der Code meiner Funktion bisher. Jedesmal, wenn ein Sprite-Geschoss irgendwo einschlägt, rufe ich diese Funktion auf, um dort ein Schussloch zu setzen. Die übergebenen Parameter sind das Sprite-Handle und die Größe des Schusslochs (Breite und Höhe):

Code: [AUSKLAPPEN]

Function CreateDecal%(Sprite%, scaleX#=1, scaleY#=1)
   
   ;DUMMY MESH ERZEUGEN
   DummyMesh = CreateMesh()
   DummySurf = CreateSurface(DummyMesh)
   
   ;POLYGON IN DUMMY-MESH ERZEUGEN
   v1% = AddVertex  (DummySurf,-1, 1,0)
   v2% = AddVertex  (DummySurf, 1, 1,0)
   v3% = AddVertex  (DummySurf,-1,-1,0)
   v4% = AddVertex  (DummySurf, 1,-1,0)
   t1% = AddTriangle(DummySurf,v1,v2,v3)
   t2% = AddTriangle(DummySurf,v2,v4,v3)

   ;DUMMY MESH SKALIEREN
   ScaleEntity     DummyMesh,scaleX,scaleY,1

   ;DUMMY MESH AN POSITION VON SPRITE SETZEN
   x# = EntityX(Sprite)
   y# = EntityY(Sprite)
   z# = EntityZ(Sprite)
   PositionEntity  DummyMesh,x,y,z
   
   ;DUMMY MESH NACH EINSCHLAGRICHTUNG AUSRICHTEN
   AlignToVector   DummyMesh,x,y,z,3
   
   ;JEDEN PUNKT DES DUMMY MESHES IN SCHUSSRICHTUNG
   ;WEITERVERFOLGEN, BIS EIN OBJEKT IM WEG IST:
   ;(AM BESTEN VORHER NOCH EIN STÜCK ZURÜCKSETZEN)
   nx# = CollisionNX (Sprite,1)
   ny# = CollisionNY (Sprite,1)
   nz# = CollisionNZ (Sprite,1)
   For i = 0 To CountVertices(DummySurf)-1
      vx# = VertexX(DummySurf,i)
      vy# = VertexX(DummySurf,i)
      vz# = VertexZ(DummySurf,i)

      TFormPoint vx,vy,vz,DummyMesh,0
      vx=TFormedX() : vy=TFormedY() : vz=TFormedZ()
      
      LinePick(vx,vy,vz,nx*100.0,ny*100.0,nz*100.0)
      
      TFormPoint PickedX(),PickedY(),PickedZ(),0,DummyMesh
      vx=TFormedX() : vy=TFormedY() : vz=TFormedZ()
      
      VertexCoords DummySurf,i,vx,vy,vz
   Next

   ;JETZT DIE PUNKTE DES DUMMY MESHES IN DAS MESH
   ;KOPIEREN, IN DEM ALLE QUADS SITZEN
   AddMesh(DummyMesh,QuadMesh)
   FreeEntity DummyMesh

End Function
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Markus2

BeitragDi, Feb 17, 2004 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
x-pressive hat Folgendes geschrieben:

... Das DummyMesh setze ich nun mit PositionEntity an die Position des Schuss-Sprites


Ich meinte PositionMesh !
Dabei werden die Vertices(Eckpunkte) verschoben .
Bei PositionEntity verschiebst du nur den Ursprung und der
ist ja bei deinem Sammelquadmesh immer 0,0,0
Bei AddMesh werden die Punkte also dran gehangen aber immer
von der Objekt Achse , darum solltest du die Punkte verschieben
wo sie in Wirklichkeit stehen .

Also erst Dummymesh ausrichten , dann Mesh verschieben und
dann zu dem Sammelquadmesh hinzufügen .

x-pressive

BeitragDi, Feb 17, 2004 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
PositionMesh macht es leider noch schlimmer. Das alleine funktioniert zwar, allerdings nur ohne Ausrichten. Wenn ich dann noch (vorher oder nachher) versuche, das Dummy Mesh mit AlignToVector() am Kollisionswinkel des Sprites auszurichten, erscheint das Quad an den seltsamsten Stellen.

Bei obigem Code klappt ja das Erstellen und Ausrichten eines Quads an der richtigen Position schon mal. Nur das Picken und 'heften' der Quad-Vertices an die Oberfläche des getroffenen Objekts haut nicht hin. Das Problem sind sicher all die verschiedenen Koordinatensysteme, zwischen denen man hin- und herhüpfen muß. Irgendwo gibt es da einen Murks. Ich habe schon alle möglichen Kombinationen ausprobiert, aber es ist immer das selbe: das Erstellen und Verschieben/Ausrichten des Quads an die Sprite-Position klappt (allerdings nur so wie in obigen Code), aber das Picken bzw. korrekte Versetzen der Quad-Vertices an die gepickten Koordinaten klappt nicht. Mein Kopf dampft inzwischen, wie ein Teekessel... Confused

Hier mal ein Screenshot -nachdem die Kanone also einen Schuss abgefuert hat und dieser irgendwo z.B. das Terrain getroffen hat, sollte dort ein Einschussloch sein. Das Erstellen eines Quads an der Stelle, auch im richtigen Winkel, funktioniert mit obigem Code (siehe Bild). Jetzt müsste man nur noch folgendes schaffen:

1. Das Quad ein bisschen in die Richtung des Schusses ZURÜCKsetzen, damit keiner der Vertices im Zielobjekt verschwindet.

2. Dann mit jedem der Vertices wieder ein Stück VORsetzen, um den jeweiligen Punkt auf das Objekt zu 'heften' (mit LinePick?!)

3. Die vier Vertices dann in das Master Mesh kopieren.

user posted image

Kann es sein, das in obigem Code vielleicht einfach nur in die falsche Richtung gepickt wird?
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Markus2

BeitragDi, Feb 17, 2004 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
mach das erstmal mit CameraPick und
PickedNX NY NZ und PickedX Y Z ,
vieleicht haste auch nur dein Quadmesh falsch erstellt und wird
desshalb falsch ausgerichtet .

Dazu kannste auch nach Renderworld eine 3D Linie zeichnen .

Die Ausrichtung immer vor dem verschieben der Vertices an
die richtige Stelle !

NormalShowAll kannste nach RenderWorld aufrufen ,
in der Funk. ist die länge der Normale auf 50 was bei mir 50 cm sind !

Das habe ich mal gemacht um die Normalen zu sehen .

Code: [AUSKLAPPEN]


;###################################################################################################

.Normals

Type NormalType
 Field x#
 Field y#
 Field z#
 Field nx#
 Field ny#
 Field nz#
End Type

Global Normal.NormalType

;###################################################################################################


;###################################################################################################

Function NormalNew(x#,y#,z#,nx#,ny#,nz#)

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

 ;begrenzen auf xx , wenn mehr dann die ersten löschen

 Local c

 For Normal.NormalType =Each NormalType
  c=c+1
  If c=100 Then
   Delete First NormalType
   Exit
  EndIf
 Next

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

 Normal.NormalType =New NormalType

 Normal\x=x
 Normal\y=y
 Normal\z=z

 Normal\nx=nx
 Normal\ny=ny
 Normal\nz=nz

End Function

;###################################################################################################

Function NormalShowAll()

 Color 255,255,0

 For Normal.NormalType =Each NormalType
  NormalShow Normal,50
 Next

End Function

;###################################################################################################

Function NormalShow(N.NormalType,l#)

 ;MR 06.10.2003

 ;cam ist Global und das Handle der Camera

 Local x1,y1
 Local x2,y2

 CameraProject cam,n\x,n\y,n\z
 x1=ProjectedX()
 y1=ProjectedY()

 CameraProject cam,n\x+n\nx*l,n\y+n\ny*l,n\z+n\nz*l
 x2=ProjectedX()
 y2=ProjectedY()

 Rect x1-2,y1-2,4,4

 mLineClip x1,y1,x2,y2

End Function

;###################################################################################################

Function mLineClip(x1,y1,x2,y2)

 ;Wegen CameraProjected XYZ zu XY nur Linien malen die auch im Screen sind !

 If x1=>0 And y1=>0 And x2=>0 And y2=>0 Then

 If x1<GraphicsWidth() And y1<GraphicsHeight() And x2<GraphicsWidth() And y2<GraphicsHeight() Then
 
  Line x1,y1,x2,y2

 EndIf

 EndIf
 
End Function

Shodan

BeitragMi, Feb 18, 2004 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
zu deinem Problem mit PositionMesh ist zu sagen, das du das DummyMesh ebenfalls mit RotateMesh ausrichten must, nicht mit AlignToVector, sonst hast du dasselbe Problem wie zw. PositionEntity und PositionMesh
Also:
-Kollisionsposition un Ausrichtung ermitteln
-DummyMesh mit RotateMesh ausrichten
-dann mit PositionMesh positionieren
-zu QuadMesh hinzufügen

zu deinem anderen Prob hab leider auch keine Lösung. Bei mir hab ich Sprites verwendet, die allmählich ausgeblendet werden. Confused

ich hoffe ich war hilfreich

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group