Polygon-Position von Objekten

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

TwentyEight28

Betreff: Polygon-Position von Objekten

BeitragMo, März 23, 2009 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallöchen an alle. Hab mal wieder ein Problem. Kann ich mir die Werte von den Ecktpunkten (x,y,z - Position) von irgendwelchen der Funktion zugewiesenen Objekten ausspucken lassen ? Und wenn ja kann ich die dann auch ansteuern ? Bisher bekomm ich nur den Mittelpunkt oder bei nem Quader über Pythagoras (is mir grad eingefallen) die Eckpunkte...

Grüße

The_Nici

BeitragMo, März 23, 2009 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Alle surfaces durchgehen, dann alle triangles durchgehen und dann die jeweils 3 Vertices pro Triangle rausfinden und auf die VertexX, VertexY und VertexZ anwenden, und danach die werte zur position des Objekts dazuzählen.
MfG

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, März 23, 2009 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit CountVertices und den ganzen Ableger davon (siehe unten aus der Hilfe), sollte es sich alle machen lassen. Zur nachträglichen Manipulationen kann man auch VertexCoords benutzen.

Eine Übersicht über alle relevanten Sachen: https://www.blitzforum.de/help/?subcat=75
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

TwentyEight28

BeitragMo, März 23, 2009 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank... schreibe wieder nen Code dazu und stell ihn hierrein wenn irgendwas sein sollte ^^ . Aber danke erstmal Smile
 

TwentyEight28

BeitragMo, März 23, 2009 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Gleich mal ne logische Frage. Wie kommts das B3D jeden Vertex 2 mal zählt ? Liegt das daran das zwei aneinanderliegende Triangles jeweils 2 gleiche von 4 Punkten haben ? Ist meine einzig logische Erklärung...

grüße

Edit:

Achso, wie kann ich eigentlich die ausgegeben Vertex Punkte speichern ? hab da ja ne For schleife mit i drin.. es müssten jetzt im Prinzip automatisch die x,y,z werte in Reihenfolge gespeichert werden... am besten mit Index weil ich die dann vergleichen will..
  • Zuletzt bearbeitet von TwentyEight28 am Mo, März 23, 2009 19:53, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, März 23, 2009 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Jeder Vertex hat auch eine Texturkoordinate (UV-Mapping). Wenn nun ein Objekt im Verlauf seiner Form eine Textur überzogen bekommt, dann ist es sehr unpracktisch, jedem Triangle eigene Vertices zu vergeben. Man sollte also mit allem sparsam umgehen. Das hilft nicht nur der Performance, sondern auch Fehler bei der Darstellung zu vermeiden. Man muß also bereits beim erstellen (modelln) von Objekten darauf achten.

Ansonsten kann ich dir da kaum weiter helfen. Sonst gib uns mal etwas Code, welches zu analysieren ist.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

TwentyEight28

BeitragMo, März 23, 2009 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
hier ein Code... war ehrlich gesagt zu faul den ganzen Rest raus zu löschen hier gehts nur um den Cube als Player und seine Koordinaten..

achso ich wollte die gleichen Vertices sowieso dann zusammenfassen... alles andere wäre total überzogen und sinnbefreit..

Code: [AUSKLAPPEN]

Graphics3D  800,600,32,2


SetBuffer BackBuffer()
timer = CreateTimer(50)

;PLAYER

cube=CreateCube()
MoveEntity cube,3,3,10
camera=CreateCamera()
camera_pivot=CreatePivot(cube)
PositionEntity camera_pivot,0,0,-15
surface = GetSurface(cube, 1)
vertex = CountVertices(surface)

While Not KeyHit(1)

cam_x#=EntityX(camera)
cam_y#=EntityY(camera)
cam_z#=EntityZ(camera)
cube_x#=EntityX(cube)
cube_y#=EntityY(cube)
cube_z#=EntityZ(cube)
piv_x#=EntityX(camera_pivot,1)
piv_y#=EntityY(camera_pivot,1)
piv_z#=EntityZ(camera_pivot,1)
move_x#=(piv_x#-cam_x#)*camera_damping#
move_y#=(piv_y#-cam_y#)*camera_damping#
move_z#=(piv_z#-cam_z#)*camera_damping#
   
mxs=MouseXSpeed()
mys=MouseYSpeed()
 
TurnEntity cube,mys/5,-mxs/5,0
RotateEntity cube,EntityPitch(cube),EntityYaw(cube),0
   
TranslateEntity camera,move_x#,move_y#,move_z#
AlignToVector camera,cube_x#-cam_x#,cube_y#-cam_y#,cube_z#-cam_z#,3,camera_damping#
RotateEntity camera,EntityPitch(camera),EntityYaw(camera),0

If KeyDown(205) MoveEntity cube,0.05,0,0
If KeyDown(203) MoveEntity cube,-0.05,0,0
If KeyDown(200) MoveEntity cube,0,0,0.05
If KeyDown(208) MoveEntity cube,0,0,-0.05

   UpdateWorld()
   RenderWorld()
   For i = 0 To vertex - 1
      Text 000, i * 15, "Vertex " + i
      Text 100, i * 15, (VertexX#(surface, i) + EntityX(cube))
      Text 200, i * 15, (VertexY#(surface, i) + EntityY(cube))
      Text 300, i * 15, (VertexZ#(surface, i) + EntityZ(cube))
    
Next


   WaitTimer timer
   Flip 0



Wend
End



so hab nur das wesentliche drin

mfg

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, März 23, 2009 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso, da brauch ich auch kein Code mehr. Denn CreateCube erstellt tatsächlich für jede Fläche eigene Vertices. Das liegt daran, dass ein so erstellter Cube unter Blitz auch für viele andere Dinge benötigt wird, wo einzelne Vertices zu den Ecken zwingend sind. Außerdem ermöglicht es, dass ein Cube dann vom Licht auch realistisch angeleuchtet werden kann. Ansonsten wäre die Beleuchtung wie bei einer Kugel, die aber 6 Flächen als Fomr hat. Ich dachte, du hättest jetzt schon Modelle geladen etc... Sorry. Da war ich wohl zu Voreilig.
  • Zuletzt bearbeitet von hectic am Mo, März 23, 2009 20:57, insgesamt einmal bearbeitet
 

TwentyEight28

BeitragMo, März 23, 2009 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
naja ich dachte der is aufgebaut wien 3d Model aus 3ds Max... Weil meine Max Version noch nich da is dachte ich das ichs mit dem cube ding mal Test Weise mache... Weil bei Max hab ich nich 24 Polygone für nen läppischen Quader sondern (Trommelwirbel) 8 ... Deshalb die Frage ob ich die gleichen nicht einfach zusammenfassen kann... Dann Verhält sich das ja wie in Max (weil max wie gesagt noch nich da... )

wie mach ich das dann mit dem speichern der vertices ? weil i ja fortlaufend is kann ich schlecht x=i ,y=i un so machen da kommt murrrks raus..

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, März 23, 2009 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst dir mit ein paar Befehlen alles selbst zusammen stellen. Das sind dann Sachen wie CreateMesh, CreateSurface, AddVertex, AddTriangle etc... Da kannst du mit ein paar Codezeilen dir dein eigenen Würfel mit 8 Vertices zusammen basteln. Allerdings hat jeder Vertice dann seine eigene Vertexnormale, was das Beleuchten eines Würfels unmöglich macht, da er wie eine Kugel beleuchtet wird und dann auch so aussieht aber 8 Ecken hat.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
  • Zuletzt bearbeitet von hectic am Mo, März 23, 2009 20:57, insgesamt einmal bearbeitet
 

TwentyEight28

BeitragMo, März 23, 2009 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay das is mir echt zuviel... ich bau doch keine Objecte mit add Vertex und co ... Exclamation Wenn ich also einen Würfel aus 3ds Max in B3D lade kann b3d den würfel nicht beleuchten ?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, März 23, 2009 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Also. Blitz3D ''beleuchtet'' jedes Objekt anhand der Vertexnormale. Das sind Richtungen in die jeder Vertex zeigt. Bei einem Würfel sind sie idealer Weise 90° zu jeder einzelnen Fläche. Der Winkel jedes Vertices dann im Bezug zu Lichtquelle bestimmt dann die Helligkeit jedes Vertices wo dann im laufe des Triangles ein Überlauf zu jedem anderem Vertices verläuft. Wenn du nun ein Würfel aus 8 Vertices erstellst, kannst endweder nur jeweils eine Fläche deren Vertexausrichtung bestimmen, womit jede anliegende Fläche dann mit der gleichen Helligkeit zum Verlauf des nächsten Vertices geht. Soll heissen, die Kanten werden nicht beleuchtend abgetrennt, sondern gehen ineinander über. Der ideale Würfel aus 8 Vertices, zeigen dann die Vertices gleichberechtigt 90+45° zu jeder Fläche und zeigen genau weg aus der Würfelmitte. Das idealste Ergebnis ist dann also, dass ein Würfel wie eine Kugel aussieht, aber 6 Flächen (8 Ecken) hat. Um ein Würfel also richtig zu beleuchten, benötigst du also 24 Vertices. Für jede Fläche seine eigenen Vertices.

Und so schwer ist es nun auch nicht. Hier ein Code:

Code: [AUSKLAPPEN]
Graphics3D 800,600,0,2
SetBuffer BackBuffer()

Local Camera=CreateCamera()
Local Light=CreateLight()
PositionEntity Camera,0,0,-5
RotateEntity Light,60,-60,0
AmbientLight 32,32,32

Local Mesh=CreateMesh()
Local Face=CreateSurface(Mesh)

Local V0=AddVertex(Face,-1,-1,-1)
Local V1=AddVertex(Face,-1,-1,+1)
Local V2=AddVertex(Face,-1,+1,-1)
Local V3=AddVertex(Face,-1,+1,+1)
Local V4=AddVertex(Face,+1,-1,-1)
Local V5=AddVertex(Face,+1,-1,+1)
Local V6=AddVertex(Face,+1,+1,-1)
Local V7=AddVertex(Face,+1,+1,+1)

AddTriangle(Face,V2,V6,V4)
AddTriangle(Face,V4,V0,V2)
AddTriangle(Face,V6,V7,V5)
AddTriangle(Face,V5,V4,V6)
AddTriangle(Face,V7,V3,V1)
AddTriangle(Face,V1,V5,V7)
AddTriangle(Face,V3,V2,V0)
AddTriangle(Face,V0,V1,V3)
AddTriangle(Face,V3,V7,V6)
AddTriangle(Face,V6,V2,V3)
AddTriangle(Face,V0,V4,V5)
AddTriangle(Face,V5,V1,V0)

UpdateNormals Mesh

Local Sphere=CreateSphere(12)

PositionEntity Mesh,-2,0,0
PositionEntity Sphere,+2,0,0

Local MXS

;EntityFX Mesh,4



While Not KeyHit(1)
   MXS=MouseXSpeed()
   TurnEntity Mesh,.3,.1,MXS
   TurnEntity Sphere,.3,.1,MXS
   RenderWorld
   Flip
Wend
End


Edit1: LEUTE, ich schreib die ganze Zeit ''beläuchtet'' was man aber mit ''e'' schreibt. Klärt mich mal auf, wenn wem was auffält. Und ich wunder mich schon die ganze Zeit, das da was nicht richtig sein kann. Jetzt gehts an korrigieren. Wink
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

TwentyEight28

BeitragMo, März 23, 2009 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja schwer vielleicht nicht aber einfach wahnsinnig aufwendig da ich die Objekte in 3dsMax erstelle... Die Frage ist ob ich die Modelle aus 3dsmax normal beleuchten kann. Das heist bekomm ich wenn ich in Max einen Quader mache auch 24 Vertices (also keine Probleme mit beleuchtung) oder bekomm ich 8 ? Und wenn ich 8 bekomme müsst ich dann den Würfel in max selbst aus kleinen Dreiecken erstellen ? (Splitten geht auch ja.. )

danke aber schonmal Wink

grüße

Chester

BeitragMo, März 23, 2009 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ein kleines Beispiel, welches den Unterschied zwischen 8 und 24 Vertices in der Beleuchtung gut demonstiert(Halte Linke Maustaste gedrückt für flache Schattierung, da ist es sehr deutlich):


Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2

SetBuffer BackBuffer()

PositionEntity CreateCamera(), 0,0,-7
PositionEntity CreateLight(), 0,0,-20

a=CreateCube()
b=CreateOctCube()

PositionEntity a, -3,0,0 : PositionEntity b, 3,0,0
EntityColor a,100,200,100 : EntityColor b,100,200,100

Repeat
   TurnEntity a,1,0,0:TurnEntity b,1,0,0
   
   EntityFX a, MouseDown(1)*4
   EntityFX b, MouseDown(1)*4
   RenderWorld()
   Flip
Until KeyHit(1)



Function CreateOctCube(x=-1,y=-1,z=-1,b=2,h=2,t=2)
   mesh = CreateMesh()
   surface = CreateSurface(mesh)    
   
   vlo=AddVertex(surface,x,y,z)
   vro=AddVertex(surface,x+b,y,z)
   vru=AddVertex(surface,x+b,y+h,z)
   
   AddTriangle(surface,vlo,vro,vru)
   vlu=AddVertex(surface,x,y+h,z)
   
   AddTriangle(surface,vlo,vru,vlu)
   hlo=AddVertex(surface,x,y,z+t)
   
   AddTriangle(surface,hlo,vro,vlo)
   hro=AddVertex(surface,x+b,y,z+t)
   
   AddTriangle(surface,hlo,hro,vro)
   hlu=AddVertex(surface,x,y+h,z+t)
   
   AddTriangle(surface,vlo,hlu,hlo)
   AddTriangle(surface,vlo,vlu,hlu)
   hru=AddVertex(surface,x+b,y+h,z+t)
   
   AddTriangle(surface,hlo,hlu,hro)
   AddTriangle(surface,hlu,hru,hro)
   AddTriangle(surface,vro,hro,hru)
   AddTriangle(surface,vro,hru,vru)
   AddTriangle(surface,vlu,hru,hlu)
   AddTriangle(surface,vlu,vru,hru)
   UpdateNormals mesh
   
   FlipMesh mesh
   Return mesh
End Function


Edit: Sorry, hab die letzten 2 Beiträge verpasst...
 

TwentyEight28

BeitragMo, März 23, 2009 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Nix sorry sehr gut gemacht ^^ . Da sieht man was ihr meint. Im Grunde erstellt man ja mit den 8 Vertex keine wirklichen Triangle sondern gerade Flächen... es kommen keine einzelnen Dreiecke herraus wie es sein soll sondern ein Quader mit ner Diagonale...

Danke für die Erläuterungen jetzt fehlt nur noch die Sache mit 3dsMax..

Grüße david

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, März 23, 2009 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Verstehe es aber nicht falsch, dass du nun alle deine Objekte mit separaten Triangles erstellst. Dieser Effekt das die Beleuchtung übergeht ist durchaus erwünscht, und ermöglicht überhaupt erst relativ realistisch aussehende gewölbte Körperformen. Erst dann, wenn tatsächlich Kanten sichtbar gemacht werden sollen, muß eben an jeweiliger Stelle das andockende Triangle mit eigenen Vertices ankommen (wie beispielsweise bei einem Würfel). Sonst nicht.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

TwentyEight28

BeitragMo, März 23, 2009 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Nee ich versteh das schon nicht falsch ich weis aber immernoch nicht ob ich dann in 3ds_max auch mit Triangles arbeiten muss oder nicht ^^ .

Das is eigentlich mein Hauptproblem im Moment. Aber danke xD

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group