WireFrame Overlay

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

E. Urbach

ehemals "Basicprogger"

Betreff: WireFrame Overlay

BeitragSo, Dez 18, 2005 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Komme grad nicht weiter beim Erstellen eines WireFrame-Overlays.
Hab in der Suche nur die erweiterte 3D-Library von Vertex gefunden, sonst nix.
Meine Grundstruktur sieht so aus (den Code hab ich grad nich parat):
Code: [AUSKLAPPEN]

Function WireFrameOverlay( mesh, cam )
;Alle Surfaces
;Alle Tris
;Alle Vertices durchgehen

;Pitch-Rotation*

;Vektoren mit Rotationsmatrix für die X-Achse (Pitch-Rotation) multiplizieren
;1 0 0 0
;0 cos(a) sin(a) 0
;0 -sin(a) cos(a) 0
;0 0 0 1

;sonstige Sachen: Yaw,Roll Rotation, Translation, Skalierung
;Mit Line die Vertices verbinden

End Function


*(Hab ich jetzt einfach mal als Beispiel genommen)

Nun hat aber die Funktion EntityPitch(genauso wie EntityYaw und EntityRoll) leider die dumme Eigenschaft, dass sie nur Winkel von -90 bis 90 liefert und wenn sie dort angekommen ist, dann zählt sie einfach wieder zurück

Wahrscheinlich gibt es da eine ganz einfache Lösung, nur ich bin im Moment leider so durcheinander und komm einfach nicht drauf:
Wie erhalte ich den vollen (und korrekten) Winkel (0-359) von einem Mesh, ohne bei TurnEntity mitzählen zu müssen?
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
 

Dreamora

BeitragSo, Dez 18, 2005 23:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Am einfachsten zeichnest du das Model und zeichnest es danach im WireFrame Modus noch einmal darüber. Das sollte eigentlich funktionieren.
Wenn du kein "davor und dahinter" willst, kannst du einfach beim ClsMode das DepthBuffer Flag deaktivieren, dann wird das gesamte Model im WireFrame Modus angezeigt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

E. Urbach

ehemals "Basicprogger"

BeitragMo, Dez 19, 2005 15:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Antwort, diese Idee hatte ich auch schon und es hat alles wunderbar geklappt, das mit dem Überzeichnen,
aber mein Ziel war es, dies für ein einzelnes Mesh mit WireFrameOverlay zu zeichnen, was man ja
an der Funktion sehen kann:

Code: [AUSKLAPPEN]

Function WireFrameOverlay( mesh, cam )
;...
End Function


Edit:
Wollt ihr mir etwa mit den wenigen Antworten sagen, dass es ohne Mitzählen nicht möglich ist?!?
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
 

Dreamora

BeitragMo, Dez 19, 2005 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wo ist bei einzelnen Modellen genau das Problem?
Kannst ja einfach alle modelle beim 2. Rendergang hiden, die nicht im Wireframe gerendert werden sollen ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

E. Urbach

ehemals "Basicprogger"

BeitragMo, Dez 19, 2005 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke!
Wusste doch, dass doch eine einfache Lösung gäbe (dass ich darauf nicht selbst gekommen bin Confused ).
Der einzige Nachteil wäre, dass ich in jedem Schleifendurchgang alle Entitys hiden und wieder anzeigen müsste in Echtzeit, dazu müsste
ich die Entitys als Instanzen speichern.
Ist zwar nicht elegant gelöst, aber immerhin, es funktioniert!

Allerdings würde ich trotzdem gerne wissen, ob es komfortabler ginge, also mit einer Funktion.
Na ja, sieht jedenfalls nicht so aus...
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
 

Dreamora

BeitragMo, Dez 19, 2005 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
In Blitz3D leider nicht, da du das nicht nur für ein Objekt ändern kannst.
Wäre dies möglich, könntest du ein dublikat des objektes anlegen, dass du dann mit Wireframe zeichnen lässt, zusätzlich zum normalen model ...

Man kann es allerdings "faken", wenn du eine textur machst, die an den Dreieckkanten einen streifen hat. Wenn du das nun etwas grösser anzeigen lässt als das originale und die teile dazwischen mittels masking verschwinden lässt, sieht es aus wie wireframe.

So arbeiten einige Editoren.
Allerdings nur sinnvoll für geometrische Grundformen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Ironstorm

Erstklassiger Contest-Veranstalter

BeitragDi, Dez 20, 2005 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
hab den Source gefunden:

BlitzBasic: [AUSKLAPPEN]

; Wireframe for Mixed Modes 3d n 2d
; David Bird. dave@birdie72.freeserve.co.uk
; Warning this is slow at high polys
;
Graphics3D 640,480
SetBuffer BackBuffer()

cam=CreateCamera()
PositionEntity cam,0,0,-4

mesh=CreateCylinder(10)
ScaleMesh mesh,1,2,1

light=CreateLight(2)
PositionEntity light,-4,4,-4
sphere=CreateSphere()
PositionEntity sphere,-1,0,2

While Not KeyDown(1)
TurnEntity mesh,1.2,1,0
UpdateWorld
RenderWorld
Draw_Wire_2D(mesh,cam)
Color 255,255,255
Flip
Wend

FreeEntity cam
EndGraphics
End

; Slow method to draw all polys in a mesh
; Wireframe
; (c)2001 David Bird
Function Draw_Wire_2D(mesh,cam,red=0,grn=0,blu=0)
Color red,grn,blu
If EntityInView(mesh,cam)=False Then Return
cnt=CountSurfaces(mesh)
For a=1 To cnt
surf=GetSurface(mesh,a)
For tri=0 To CountTriangles(surf)-1
TFormPoint VertexX(surf,TriangleVertex(surf,tri,0)),VertexY(surf,TriangleVertex(surf,tri,0)),VertexZ(surf,TriangleVertex(surf,tri,0)),mesh,0
CameraProject(cam,TFormedX(),TFormedY(),TFormedZ())
sx1=ProjectedX()
sy1=ProjectedY()
TFormPoint VertexX(surf,TriangleVertex(surf,tri,1)),VertexY(surf,TriangleVertex(surf,tri,1)),VertexZ(surf,TriangleVertex(surf,tri,1)),mesh,0
CameraProject(cam,TFormedX(),TFormedY(),TFormedZ())
sx2=ProjectedX()
sy2=ProjectedY()
TFormPoint VertexX(surf,TriangleVertex(surf,tri,2)),VertexY(surf,TriangleVertex(surf,tri,2)),VertexZ(surf,TriangleVertex(surf,tri,2)),mesh,0
CameraProject(cam,TFormedX(),TFormedY(),TFormedZ())
sx3=ProjectedX()
sy3=ProjectedY()
If Check_Cull_2D(sx1,sy1,sx2,sy2,sx3,sy3)<0
Line sx1,sy1,sx2,sy2
Line sx2,sy2,sx3,sy3
Line sx3,sy3,sx1,sy1
End If
Next
Next
End Function

;Check for cw poly
;returns <0 for clockwise
;(c)2001 David Bird
Function Check_Cull_2D(x1,y1,x2,y2,x3,y3)
Return (x1-x2)*(y3-y2)-(y1-y2)*(x3-x2)
End Function


Hoffe das ist das was du meinst.

MFG
Blitzmaker
..:: blackbird design : blackbird photography : Futuro Verde : X-Commander ::..
MacBook | Intel Core 2 Duo 2,1 GHz | 2048 MB RAM | 80 GB HDD | Mac OS X 10.6.2 (Snow Leopard) | Adobe CS4 Design Premium
 

E. Urbach

ehemals "Basicprogger"

BeitragDi, Dez 20, 2005 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
kann es zwar noch nicht ausprobieren (bin unter Linux) aber schonmal Danke an euch beide!
Dieses kleine Feature sollte ein Leveleditor/Modeller schon haben Smile

Edit:
habs gerade getestet, war genau das, was ich gesucht hab
was mich wundert ist, dass an keiner Stelle Sin oder Cos steht...
es ist auf jeden Fall genau das, was ich gesucht hab, nochmals Danke!
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group