Mesh wird nicht angezeigt / 2d in 3d wie am besten?

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

mas93

Betreff: Mesh wird nicht angezeigt / 2d in 3d wie am besten?

BeitragFr, Okt 26, 2007 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute,

Ich will gerade ein 2d spiel in 3d machen(wegen transparenz und noch vielem mehr)
Wie soll ich das am besten machen?

Sprites??
Meshs erstellen?

Ich habs mal so versucht, es wird aber nix angezeigt:

Code: [AUSKLAPPEN]

AppTitle"Jump n Beam"

Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

Global mh
Global auswahl

Type wall
Field x
Field y
Field brush
Field mesh
Field surface
Field tex
Field v0,v1,v2,v00,v11,v22
End Type

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



Repeat
Cls

mh=MouseHit(1)
If auswahl=0 And mh=1 Then createwall()


drawall()
UpdateWorld
RenderWorld
Flip
Until KeyHit(1)
End



Function drawall()
  For w.wall=Each wall
    PositionEntity w\mesh,w\x,w\y,0
  Next
End Function

Function createwall()
  w.wall=New wall
  w\brush=CreateBrush()
  w\mesh=CreateMesh()
  w\surface=CreateSurface(w\mesh,w\brush)
  w\v0=AddVertex(w\surface,0,0,0)
  w\v1=AddVertex(w\surface,0,-4,0)
  w\v2=AddVertex(w\surface,2,-4,0)
 AddTriangle(w\surface,w\v1,w\v0,w\v2)
 UpdateNormals w\mesh
  w\v00=AddVertex(w\surface,2,0,0)
  w\v11=AddVertex(w\surface,0,0,0)
  w\v22=AddVertex(w\surface,2,-4,0)
 AddTriangle(w\surface,w\v11,w\v00,w\v22)
 UpdateNormals w\mesh

 w\x=MouseX()
 w\y=MouseY()
 w\tex=LoadTexture("Wand.png",2)
 EntityTexture w\mesh,w\tex
End Function


Wäre nett wenn ihr mir weiterhelfen könntet und ein paar tipps geben könntet.

mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

NightPhoenix

BeitragFr, Okt 26, 2007 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
PositionEntity cam,0,0,-1

...
Code: [AUSKLAPPEN]
  w\v0=AddVertex(w\surface,0,0,0)
  w\v1=AddVertex(w\surface,0,-4,0)
  w\v2=AddVertex(w\surface,2,-4,0)


vielleicht weil die kamera im Objekt steckt? ^^
Koordinaten der Vertexes überschreiten die Z-Koord. (=-1) der Kamera


weiß nicht obs darin liegt aber denkbar wärs ^^

Eingeproggt

BeitragFr, Okt 26, 2007 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß nicht, wie gut du in 3D bist. Wenn du nicht zumindest ein Halbgott bist, würd ich Draw3D nehmen. Spart dir eine Menge Zeit, uns eine Menge Nerven und die Ergebnisse sind aller Wahrscheinlichkeit nach besser.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

Dreamora

BeitragFr, Okt 26, 2007 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Single Surface System oder etwas ähnliches wäre am besten. (heisst mit CreateMesh, CreateSurface etc)
Mit Sprites hast du keine Chance.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

mas93

BeitragFr, Okt 26, 2007 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
aber Draw3d ist doch nicht für Spiele geeignet, oder?
Da man keine kollisionen usw testen kann...

was mein ihr?


mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

darth

BeitragFr, Okt 26, 2007 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich hab mein trubadur auf spritebasis gebaut (natürlich mit ss erweitert...)
keinerlei probleme.
kollision hab ich mir selber geschrieben (ist ja 2d, also mit rectsoverlap).

mit draw3d kenn ich mich nicht direkt aus...
Diese Signatur ist leer.
 

BIG BUG

BeitragSa, Okt 27, 2007 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest auf jeden Fall Draw3D probieren. Auf Kollisionen testen geht auch mit den anderen Lösungen nicht direkt, hier musst Du selbst was schreiben.
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)
 

Dreamora

BeitragSa, Okt 27, 2007 13:02
Antworten mit Zitat
Benutzer-Profile anzeigen
mit Draw3D sollte es eigentlich machbar sein und sonst, wenn du bereit bist dafür auch ein wenig zu bezahlen, mit SpriteCandy
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

mas93

BeitragMi, Okt 31, 2007 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, Ich habe jetzt daas Problem gefunden.
Ich habe es ja an Mousex() und Mousey() positioniert.

Da ich ja in 3d bin ist 900,500 leider nicht wie in 2d, sonder sehr weit aus dem Bildschirm raus^^
Wie bekomme ich jetzt die 2d koordinaten in 3d koordinaten?
Also ich brauche nur x und y.

Wie kann man das Umrechnen, oder gibts da nen Befehl?


mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]
 

Dreamora

BeitragMi, Okt 31, 2007 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Dazu gibts einen Artikel wo man die "0 Ebene" platzieren muss bzw. die Kamera, damit eine 3D Einheit = 1 Pixel.

schau ins FAQ & Tutorial Board bzw. nutz board suche.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

mas93

BeitragMi, Okt 31, 2007 12:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Dreamora,
aber ich habe gerade alle 5 seiten des FAQ and Tutorials boards durchgeschaut aber nix gefunden.
Wenn du mir einen Suchbegriff nennen könntest würde ich gerne nochmals suchen.

Aber bei 0 Ebene usw hat er auch nix brauchbarers gefunden.



Wäre nett
mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Eingeproggt

BeitragMi, Okt 31, 2007 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch wenn ich von 3D wenig im Köpfchen hab, glaub ich mich zu erinnern, dass man die Kamera um die Hälfte der horizontalen Graphikauflösung verschieben muss (nach hinten)
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

mas93

BeitragMi, Okt 31, 2007 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
@Eingeproggt: Dann ist es zwar schon besser, stimmt aber immer noch nicht richtig.
Kennt hier keiner die Richtige methode?
Oder ist das so kompliziert?

mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Jo0oker

BeitragMi, Okt 31, 2007 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du die 2D Koordinaten in die 3D koordinaten haben willst, dann nimm am besten die Pick befehle......


lg Jo0oker
Tehadon, das kostenlose 3D RPG
www.tehadon.de
http://www.blitzforum.de/worklogs/14/
Das Abenteuer wird beginnen!
 

Dreamora

BeitragMi, Okt 31, 2007 14:27
Antworten mit Zitat
Benutzer-Profile anzeigen
mas93 hat Folgendes geschrieben:
@Eingeproggt: Dann ist es zwar schon besser, stimmt aber immer noch nicht richtig.
Kennt hier keiner die Richtige methode?
Oder ist das so kompliziert?

mfg
mas93


Ist nicht kompliziert und wurde von vertex und anderen mehrfach im forum erklärt.
Einfach danach suchen.
Dazu wirst du allerdings den erweiterten suchmodus nehmen müssen da du ja nach mehreren worten suchen willst.

Alternativ gibt es natürlich auch die simple variante: Ausprobieren Smile
Denn logischerweise muss es ein vielfaches / bruchteil der kamera auflösung sein.


Was funktioniert denn genau nicht?

(und könnte sein dass die kamera so weit weg sein muss wie die auflösungsbreite beträgt)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

mas93

BeitragMi, Okt 31, 2007 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, ich hab mir jetzt mal die pickbefehle angeschaut, aber es will noch nicht richtig.
manchmal wird das objekt weiter rechts manchmal weiter links oder oben angezeigt.

Irgendwas stimmt mit der berechnung noch nicht.
Könnt ihr mir da weiterhelfen?

Code: [AUSKLAPPEN]

AppTitle"Jump n Beam"

Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

Global mh
Global auswahl
Global back=CreateCube()
ScaleEntity back,500,500,-200
EntityColor back,0,0,0
EntityPickMode back,2

Type wall
   Field x#
   Field y#
   Field brush
   Field mesh
   Field surface
   Field tex
   Field v0,v1,v2,v3
End Type

cam=CreateCamera()
PositionEntity cam,0,0,(-768/2)



Repeat
   mh=MouseHit(1)
   entity=CameraPick(cam,MouseX(),MouseY())
   
   
   
   ;HideEntity back
   
   If auswahl=0 And mh=1 Then
      w.wall=New wall
      w\mesh=CreateMesh()
      w\brush=CreateBrush()
      w\surface=CreateSurface(w\mesh,w\brush)
      w\v0=AddVertex(w\surface,-1,+3,0, 0,0)
      w\v1=AddVertex(w\surface,+1,+3,0, 1,0)
      w\v2=AddVertex(w\surface,+1,-3,0, 1,1)
      w\v3=AddVertex(w\surface,-1,-3,0, 0,1)
      AddTriangle(w\surface,w\v0,w\v1,w\v2)
      AddTriangle(w\surface,w\v2,w\v3,w\v0)
      UpdateNormals w\mesh
      EntityFX w\mesh,17
      EntityBlend w\mesh,3
      w\tex=LoadTexture("wand.png",2)
      EntityTexture w\mesh,w\tex
      ScaleEntity w\mesh,10,10,1
      
      ;die koordinaten berechnen
      w\x=PickedX()
      w\y=PickedY()
   EndIf
   
drawall()
   UpdateWorld
   RenderWorld
   
   ;Cls
   Text 20,80,Mx
   Text 20,40,"Pickedx: "+PickedX()+"      Pickedy: "+PickedY()+"       Entity: "+entity
   For w.wall=Each wall
      Text 20,20,w\mesh
   Next
   Flip
Until KeyHit(1)
End



Function drawall()
   For w.wall=Each wall
      PositionEntity w\mesh,w\x,w\y,0,1
   Next
End Function


mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

darth

BeitragMi, Okt 31, 2007 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
... so schwer ist das doch nicht
vergiss pick wenn du auf 2d machen willst!

Code: [AUSKLAPPEN]
graphics3d 800,600,0,2
setbuffer backbuffer()

cam=createcamera()
 positionentity cam,0,0,-400 ;halbe bildschirmbreite (wurde gesagt!)

cube=createcube()

while not keyhit(1)
updateworld : renderworld

x3d=mousex()-400 ;mousex()-graphicswidth()/2
y3d=300-mousey() ;graphicsheight()/2-mousey()

positionentity cube,x3d,y3d,0

flip 0 : cls
wend : end

fertig.
Diese Signatur ist leer.

mas93

BeitragDo, Nov 01, 2007 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Darth Gamer,
Dass mit den mauskoordinaten abzeihen hab ich vergessen.


Ich habe aber ein neues Problem.
Ich will ja striche erstellen.

Mit linkem mausklick wird der Startpunkt gesetzt und mit dem rechten der Endpunkt.

Soo, das funktioniert auch, jedoch sind die Striche immer unterschiedlich breit.
Das war mir auch klar, da es an dem code liegt.
Könnt ihr mir sagen, wie ich das verbessern kann?

So sieht es aus:
user posted image

Code: [AUSKLAPPEN]

AppTitle"Jump n Beam"

Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

Global mh
Global auswahl
Global active
Global x3d,y3d

Type wall
   Field x#
   Field y#
   Field x1#
   Field y1#
   Field brush
   Field mesh
   Field surface
   Field tex
   Field v0,v1,v2,v3
End Type

Global cam=CreateCamera()
PositionEntity cam,0,0,-512



Repeat
   
   x3d=MouseX()-512 ;mousex()-graphicswidth()/2
   y3d=384-MouseY() ;graphicsheight()/2-mousey()
   
   
   
   
   If MouseHit(2) And active=1 Then
      w.wall=Last wall
      w\x1=x3d
      w\y1=y3d
      
      w\mesh=CreateMesh()
      w\brush=CreateBrush()
      w\surface=CreateSurface(w\mesh,w\brush)
      w\v0=AddVertex(w\surface,w\x-3,w\y,0, 0,0)
      w\v1=AddVertex(w\surface,w\x+3,w\y,0, 1,0)
      w\v2=AddVertex(w\surface,w\x1-3,w\y1,0, 1,1)
      w\v3=AddVertex(w\surface,w\x1+3,w\y1,0, 0,1)
      AddTriangle(w\surface,w\v0,w\v1,w\v3)
      AddTriangle(w\surface,w\v2,w\v3,w\v0)
      UpdateNormals w\mesh
      EntityFX w\mesh,17
      EntityBlend w\mesh,3
      ;w\tex=LoadTexture("wand.png",2)
      ;EntityTexture w\mesh,w\tex
      active=0
   EndIf
   
   
   If MouseHit(1) And active=0 Then
      w.wall=New wall
       w\x=x3d
       w\y=y3d
      active=1
   EndIf
   
   
   UpdateWorld
   RenderWorld
   
   tooltip()
   
   Flip
   Cls
Until KeyHit(1)
End

Function tooltip()
   If active=0 Then Color 0,255,0
   Text 8,20,"Linke Maustaste drücken um Startpunkt zu setzen"
   Color 255,255,255
   If active=1 Then Color 0,255,0
   Text 8,40,"Rechte Maustaste drücken um Endpunkt zu setzen"
   Color 255,255,255
   Rect 5,12,382,48,0
End Function


P.S.:Der code ist so umgeschrieben, dass ihr ihn ohne ressourcen ausführen könnt.

Wäre nett wenn ihr mir helfen könntet.


mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

darth

BeitragDo, Nov 01, 2007 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
relativ logisch warum das so aussieht...
du wählst deine 4 punkte immer gleich, also immer horizontal +-3, natürlich ist dann, wenn gedreht ist das auch +-3, und das gibt dann eben die schiefen dinger die du da hast.
um das zu ändern müsstest du den vektor von punkt A zu B bilden (anfang und ende deiner planken da), und die normale dazu finden, diese normalisieren, und danach *gewünschte breite, dann A+-vektor (x UND y!)
dann hast du schön gleichbreite planken.
Diese Signatur ist leer.

mas93

BeitragDo, Nov 01, 2007 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
danke darth gamer für deine Antwort,aber ich verstehe nicht ganz wie du das meinst?
Wie soll ich den vektor nehmen und die normale finden?

Wie meinst du das?


mfg
mas93
www.lpbase.de
Meine Linkin Park Fanseite[Noch im Aufbau]

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group