Surface kopieren

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Lastsamurai

Betreff: Surface kopieren

BeitragFr, Jun 08, 2007 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Hab jetzt lange gesucht und rumprobiert, dabei ist aber nichts brauchbares herausgekommen Confused

Mein Problem ist folgendes:

Ich lade ein Mesh und hole mir das Surface von diesem mit GetSurface. Alles kein Problem, aber nun will ich ein zweites Surface diesem Mesh hinzufügen, welches die Vertices und Triangles vom ersten übernimmt. Hab versucht die Punkte alle in Types mit den zugehörigen Koordinaten zu speichern und diese dann nochmal auszulesen und in dem neuen Surface zu speichern. Hat auch geklappt (habs überpfüft... die Vertices sitzen alle korrekt an ihrem Platz), nur klappt bei mir das verbinden danach nicht mehr, weil ich keine gerade Fläche habe sondern mein Mesh verformt ist.

Gibt es eine andere Möglichkeit um nen Surface zu "kopieren" ? Oder muss ich das so machen wie ich es angefangen habe und die Vertices irgendwie zu Triangles verbinden?

Danke schonmal Smile

MfG. LastSamurai

NightPhoenix

BeitragFr, Jun 08, 2007 23:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Was genau willst du damit dann erreichen? =) weiß nicht was das dir nützt ^^
Weiß nicht genau was du willst aber Meshes kopieren und zusammenfügen geht mit:
copymesh & addmesh
 

Lastsamurai

BeitragFr, Jun 08, 2007 23:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Du bringst mich gerade auf ne idee ^^ kann man das mesh einfach kopieren und dann zum ersten mit AddMesh zusammenfügen? hat man dann 2 surfaces auf 1 mesh?

Silver_Knee

BeitragSa, Jun 09, 2007 0:11
Antworten mit Zitat
Benutzer-Profile anzeigen
mesh1=loadmesh..,
mesh2=copymesh(mesh1)
addmesh mesh2,mesh1
freeentity mesh2

klar geht das aber was soll das bringen^^
 

Lastsamurai

BeitragSa, Jun 09, 2007 0:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hat schon nen Sinn keine lust den jetzt zu erklären werds morgen mal probieren ob das so klappt wie ich will ^^ thx 4 help

NightPhoenix

BeitragSa, Jun 09, 2007 0:15
Antworten mit Zitat
Benutzer-Profile anzeigen
also kopieren macht erstmal 2 surfaces, 2 meshs
addmesh fügt das eine Objekt dem anderen hinzu, wobei aber das hinzugefügte Mesh an seiner ursprünglichen Stelle erhalten bleibt. D.h. du müsstest es per FreeEntity nach dem Laden löschen. Nun hast du 2 Meshes mit gleicher textur auf einem Surface... also das Gegenteil von dem was du gerade sagtest ^^

Mehrere Surfaces lassen sich an Modellen in einigen 3D-Modellern einstellen (Glaube 3dsMax müsste das beherrschen) Anschließend kannste die Einzelteile (getrennte Objekte) mit FindChild und derem Namen in Blitz ansprechen.

Also was willst du denn nun mit zwei Surfaces erreichen? ^^


*edit*
da war wer schneller als mein müdes Hirn zu dieser Zeit ^^
Zitat:
Hat schon nen Sinn keine lust den jetzt zu erklären werds morgen mal probieren ob das so klappt wie ich will ^^ thx 4 help

Da plant wohl jemand ein Geheimprojekt? Bahnbrechendes? Very Happy

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jun 09, 2007 0:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics3D 800,600,0,2
SetBuffer BackBuffer()

MoveEntity CreateCamera(),0,0,-6
TurnEntity CreateLight(),30,-30,0

cube=CreateCube()
cube2=CreateCube()
PositionMesh cube2,2,2,0
AddMesh cube2,cube
FreeEntity cube2




While Not KeyHit(1)
 TurnEntity cube,0,1,0
 RenderWorld
 Text 20,20,CountSurfaces(cube)
 Flip
Wend
End
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Silver_Knee

BeitragSa, Jun 09, 2007 0:29
Antworten mit Zitat
Benutzer-Profile anzeigen
stimmt ja addmesh hat single-surface unterstützung... in dem fall irgendeine kleinigkeit in der brus des 2. entitys veränndern sowas wie Code: [AUSKLAPPEN]
b=Createbrush(250,250,250);anstatt 255,255,255
paintmesh mesh2,b
freebrush b

Lunatix

BeitragSa, Jun 09, 2007 0:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Wozu types.... einfach alle Triangles des meshes durchloopen und deren vertices verbinden. oder eben mit copymesh.
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

Silver_Knee

BeitragSa, Jun 09, 2007 0:40
Antworten mit Zitat
Benutzer-Profile anzeigen
genau wozu types???? wo siehst du hier types es war nie die rede von types

Lunatix

BeitragSa, Jun 09, 2007 0:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
...Hab versucht die Punkte alle in Types mit den zugehörigen ...


da ....
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

Silver_Knee

BeitragSa, Jun 09, 2007 1:02
Antworten mit Zitat
Benutzer-Profile anzeigen
achso....... daaa........ äääää....... da könnte man types verwenden wenn man die information für die nachwelt aufheben will wenn nicht kann man das noch in der selben for next schleife machen....

NightPhoenix

BeitragSa, Jun 09, 2007 12:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Da das in selbe Thema herein passt (wegen AddMesh) poste ich das mal hier rein. Das Problem liegt aber nicht bei AddMesh, sondern beim PositionMesh was ich wegen addmesh anwenden muss.

Wieso also werden alle Pflanzen richtig positioniert, wenn ich PositionEntity anwende und bei PositionMesh aber keine einzige Pflanze zu sehen ist (wahrscheinlich durch FreeEntity wenn y kleiner 5)
Funktionieren die beiden von den Einheiten her etwa komplett anders? Ich weiß nur dass das Bezugssystem bei PositionEntity und PositionMesh anders ist.


Code mit PositionEntity
Code: [AUSKLAPPEN]
Dim tree(anzahl)

For i=0 To anzahl
   tree(i)=LoadMesh("xxx.censored^^")
   EntityTexture tree(i),palmtex
   ScaleEntity tree(i),0.15,Rnd(0.12,0.18),0.15
   x#=Rnd(20,190)
   z#=Rnd(10,190)
   PositionEntity tree(i),x#,TerrainY(isle,x#,0,z#),z#
      
   RotateEntity tree(i),0,Rnd(0,360),0
   If EntityY(tree(i))<5 Then
      FreeEntity tree(i)
   EndIf
   fore_counter=fore_counter+1
   If fore_counter=400 Then
      UpdateWorld
      RenderWorld
      fore_counter=0
      Text 0,200,(100*i/anzahl)+"% der Palmen geladen"
      Flip
   EndIf
Next




Code mit PositionMesh
Code: [AUSKLAPPEN]
Dim tree(anzahl)

For i=0 To anzahl
   tree(i)=LoadMesh("xxx.censored^^")
   EntityTexture tree(i),palmtex
   ScaleMesh tree(i),0.15,Rnd(0.12,0.18),0.15
   x#=Rnd(20,190)
   z#=Rnd(10,190)
   PositionMesh tree(i),x#,TerrainY(isle,x#,0,z#),z#
      
   RotateMesh tree(i),0,Rnd(0,360),0
   If EntityY(tree(i))<5 Then
      FreeEntity tree(i)
   EndIf
   fore_counter=fore_counter+1
   If fore_counter=400 Then
      UpdateWorld
      RenderWorld
      fore_counter=0
      Text 0,200,(100*i/anzahl)+"% der Palmen geladen"
      Flip
   EndIf
Next
 

Lastsamurai

BeitragSa, Jun 09, 2007 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Junkprogger hat Folgendes geschrieben:
Wozu types.... einfach alle Triangles des meshes durchloopen und deren vertices verbinden. oder eben mit copymesh.


lol bin ich dumm... habs jetzt danke euch Very Happy hab das immer andersrum versucht... also alle vertices durchloopen und versucht die zu verbinden, was ja nicht geklappt hat, da er viele triangles ausgelassen hat aber so geht es jetzt.

Achja und ich hab das in Types gemacht, weil ich die Vertices und Triangles später noch brauche.


MfG. LastSamurai

Silver_Knee

BeitragSa, Jun 09, 2007 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Positionentity setzt das entity irgendwo hin und das bleibt dor egal wie oft man diesen befehl wiederholt
positionmesh verändert die koordinaten der vertices selbst und so ist das was du nach dem ersten mal siehst eine neue mesh die wenn du den befehl wiederholst wieder verändert wird das selbe gild für rotateMesh:

du hast die pflanzen mesh verändert und drehst sie danach um den zentrumspunkt ..... ich versuchs mal zu zeigen:
Ausgangsmesh (0=Mesh zentrum=DrehPunkt=koordinatenpunkt(Entityx/y/z) usw)
Code: [AUSKLAPPEN]
PMESH
M   S
E 0 E
S   M
HSEMP

-> Nach positionentity:
Code: [AUSKLAPPEN]
    PMESH
    M   S
    E 0 E
    S   M
    HSEMP



nach Positionmesh:
Code: [AUSKLAPPEN]
    PMESH
    M   S
  0 E   E
    S   M
    HSEMP

drehst du danach mit rotatemesh drehst du um den null punkt bei positionentity hat es den gewünschten effekt doch bei PositionMesh drehst du das ding wie einen planeten um die sonne und dabei irgendwo hin....
mine empfehlung:

Erst scale
dann Rotate
und dann position

in dieser reihenfolge ist alles in butter

NightPhoenix

BeitragSa, Jun 09, 2007 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Einen schöneren AHA Effekt gibt es nicht Smile ich danke dir für die Erklärung funzt alles prima, gab letztendlich nur noch probleme mit "wenn y-koord. kleiner 5 dann löschen" If EntityY(tree(i))<5 Then FreeEntity tree(i)
Da ja alle Objektkoords jetzt bei 0 liegen ist ja jedes Objekt unter 5 Rolling Eyes ich depp ^^

hab das jetzt mit:
Code: [AUSKLAPPEN]
If TerrainY(isle,x#,0,z#)<5 Then
FreeEntity tree(i)
EndIf

gelöst


danke dir nochmals FTC Smile

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group