Qudrate sollen immer gleich groß sein.

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Matthias

Betreff: Qudrate sollen immer gleich groß sein.

BeitragDo, Apr 05, 2007 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay. Ich habe da mal wieder ein schwieriges Problem und hoffe nun auf Hilfe.
Also ich versuche gerade eine art Vertexeditor für Meshes zu machen. So das mann jeden Vertexpunkt verschieben kann.
Dazu müssen die Vertexpunkte angezeigt werden. Dazu mache ich an jeder Vertexposition ein Quadrat. Nun möchte ich aber das sich die Quadrate zur Kamera ausrichten so wie Sprites es können. Nur die sind ja leider sowas von langsam das sie unnütze sind.


Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2

CameraRollV=CreatePivot()
CameraRollH=CreatePivot(CameraRollV)
Camera=CreateCamera(CameraRollH)
CameraClsColor Camera,0,0,255
PositionEntity Camera,0,0,-10
Lischt=CreateLight()

Plane=CreatePlane():EntityColor Plane,100,255,100
PositionEntity Plane,0,-1,0

Wurfel=CreateCube():EntityColor Wurfel,200,0,0
QuelSurf=GetSurface(Wurfel,1):Max3DPunkte=CountVertices(QuelSurf)-1


PunktMesh=CreateMesh():surf=CreateSurface(PunktMesh)
EntityFX PunktMesh,17

SetBuffer BackBuffer()
Repeat
If KeyDown(203) TurnEntity CameraRollV,0,-1,0
If KeyDown(205) TurnEntity CameraRollV,0,1,0
If KeyDown(200) TurnEntity CameraRollH,1,0,0
If KeyDown(208) TurnEntity CameraRollH,-1,0,0

Gosub Zeige3DPunkte
RenderWorld



Flip

Until KeyDown(1)=1
End





.Zeige3DPunkte
ClearSurface Surf


G#=.1;"Quadratgröße"

For I=0 To Max3DPunkte
X#=VertexX(QuelSurf,I):Y#=VertexY(QuelSurf,I)
Z#=VertexZ(QuelSurf,I)
V0=AddVertex(surf,X-G,Y+G,Z)
V1=AddVertex(surf,X+G,Y+G,Z)
V2=AddVertex(surf,X+G,Y-G,Z)
V3=AddVertex(surf,X-G,Y-G,Z)
AddTriangle surf,V1,V0,V2
AddTriangle surf,V2,V0,V3
Next

Return
  • Zuletzt bearbeitet von Matthias am Do, Apr 05, 2007 19:30, insgesamt 2-mal bearbeitet

The_Nici

BeitragDo, Apr 05, 2007 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Soviel ich weiss können sich Objekte mit Pointentity zu nem anderen Entity drehen.
 

Matthias

BeitragDo, Apr 05, 2007 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Da hast du recht. Das problem ist nur das es keine Objeckte/Entitys sind sondernt einzelne Quadrate die aus 4VertexPunkten und 2Triangles bestehen und in einem einzigen Surface vorkommen.

Christoph

BeitragDo, Apr 05, 2007 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß, dass es auch eine Rechenvariante gibt, aber der einfachheit halber hab ich es, als ich so etwas zur Kamera drehen wollte, so gemacht:

1. Einen Punkt erstellen
2. Den Punkt dorthin setzen, wo die Mitte des "Sprites" (setze ich deshalb in Klammern, weil es eigentlich kein "richtiger" Sprite ist) sein soll.
3. Punkt zur Kamera drehen (ql:pointentity)
4. Mit Moveentity den Punkt verschieben, dann die Vertices auf die entsprechende Position stellen.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Apr 05, 2007 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht hilft dir das hier https://www.blitzforum.de/foru...mp;start=0 Es werden Quads erstellt, die immer zur Mitte (kann auch was anderes sein) zeigen.

Interessant dafür ist:
Code: [AUSKLAPPEN]
  ;Hilfs-Positionen
  ssb_p0=CreatePivot()
  ssb_p1=CreatePivot(ssb_p0)
  ssb_p2=CreatePivot(ssb_p0)
  ssb_p3=CreatePivot(ssb_p0)
  ssb_p4=CreatePivot(ssb_p0)

  ;Hilfs-Formationen
  PositionEntity ssb_p1,0,+1,0
  PositionEntity ssb_p2,-1,0,0
  PositionEntity ssb_p3,0,-1,0
  PositionEntity ssb_p4,+1,0,0

Und später bei der Anwendung:
Code: [AUSKLAPPEN]
   PositionEntity ssb_p0,X,Y,Z
   PointEntity ssb_p0,camera

Es lassen sich dann alle Vertexpositionen anhand der Pivotpositionen vergeben.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Matthias

BeitragDo, Apr 05, 2007 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für deinen Tipp. Habe aber gerade ebend eine Superlösung gefunden. Die ist einfach nur genjal und sau schnell.
https://www.blitzforum.de/foru...ausrichten

Drozdem vielen dank.
 

Matthias

BeitragDo, Apr 05, 2007 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
So nun richten sich endlich die Quatrate zur Camera aus, und schon tut sich das näste Problem auf. Und zwar will ich gerne das die Quadrate immer gleich groß sind egal ob ich ran oder weg Zoome. Hat da jemand vieleicht eine Idee wie mann das anstellen kann?
Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2
CameraRollV=CreatePivot()
CameraRollH=CreatePivot(CameraRollV)
Camera=CreateCamera(CameraRollH)
CameraClsColor Camera,0,0,255
PositionEntity Camera,0,0,-10
Lischt=CreateLight()

Plane=CreatePlane():EntityColor Plane,100,255,100
PositionEntity Plane,0,-1,0

Wurfel=CreateCube():EntityColor Wurfel,200,0,0
QuelSurf=GetSurface(Wurfel,1):Max3DPunkte=CountVertices(QuelSurf)-1


PunktMesh=CreateMesh():surf=CreateSurface(PunktMesh)
EntityFX PunktMesh,17
AppTitle "Q/A=Zoomen"

SetBuffer BackBuffer()
Repeat
If KeyDown(203) TurnEntity CameraRollV,0,-1,0
If KeyDown(205) TurnEntity CameraRollV,0,1,0
If KeyDown(200) TurnEntity CameraRollH,1,0,0
If KeyDown(208) TurnEntity CameraRollH,-1,0,0
If KeyDown(16) MoveEntity Camera,0,0,.1
If KeyDown(30) MoveEntity Camera,0,0,-.1
Gosub Zeige3DPunkte
RenderWorld



Flip

Until KeyDown(1)=1
End





.Zeige3DPunkte
ClearSurface Surf


Gr#=.1;"Quadratgröße"

For I=0 To Max3DPunkte
X#=VertexX(QuelSurf,I):Y#=VertexY(QuelSurf,I)
Z#=VertexZ(QuelSurf,I)
;---Von Mr.Keks

TFormVector Gr#,-Gr#,0,camera,0
        vx1# = TFormedX#()
        vy1# = TFormedY#()
        vz1# = TFormedZ#()
        TFormVector -Gr#,-Gr#,0,camera,0
        vx2# = TFormedX#()
        vy2# = TFormedY#()
        vz2# = TFormedZ#()
        TFormVector Gr#,Gr#,0,camera,0
        vx3# = TFormedX#()
        vy3# = TFormedY#()
        vz3# = TFormedZ#()
        TFormVector -Gr#,Gr#,0,camera,0
        vx4# = TFormedX#()
        vy4# = TFormedY#()
        vz4# = TFormedZ#()
       
       
         
        v1 = AddVertex(surf,x#+vx1#,y#+vy1#,z#+vz1#,1,1)
        v2 = AddVertex(surf,x#+vx2#,y#+vy2#,z#+vz2#,0,1)
        v3 = AddVertex(surf,x#+vx3#,y#+vy3#,z#+vz3#,1,0)
        v4 = AddVertex(surf,x#+vx4#,y#+vy4#,z#+vz4#,0,0)
        AddTriangle(surf,v1,v2,v3)
        AddTriangle(surf,v2,v4,v3)
Next
Return

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Apr 05, 2007 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Position ermitteln und ql:Rect benutzen

oder

(doppelte Entfernung = doppelt so groß skallieren (siehe dazu ql:EntityDistance))
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