Mesh verändert sich auf Mausklick, wie geht das?

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Kevin

Betreff: Mesh verändert sich auf Mausklick, wie geht das?

BeitragMo, Dez 20, 2010 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich wollte mal wissen wie sich das Mesh (.3ds Datei) auf Mausklick verändert ich meine so dass ich eine Mauer hab und auf mausklick soll sich die mauer verändern. (Also die mauer soll bescriftet werden mit Graffity oder soetwas)

Xeres

Moderator

BeitragMo, Dez 20, 2010 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist recht wage formuliert: Irgendein Mausklick, oder ein Klick auf die Mauer? "Verändern" ist auch ziemlich allgemein - wenn es nichts spezielles ist, würd' ich dich an Tutorials & Beginners FAQ verweisen, da es dann eine recht elementare Fragestellung ist, die du dir sowieso am besten selbst erarbeitest, wenn du programmieren lernen möchtest.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Kevin

BeitragMo, Dez 20, 2010 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich mein natürlich nur auf die Mauer^^ grass mit Graffity...

ToeB

BeitragMo, Dez 20, 2010 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Also entweder du machst zwei modells uns lädst das andere wenn man klickt, oder du nimmst das alte und legst die Graffity Texture oben drauf..

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

Kevin

BeitragMo, Dez 20, 2010 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
das is so wie bei GTA.. ich meine wie bei Grafitti Studio ( http://www.vandalsquad.com/ ) dass man es mit der Maus selber zeichnen muss
 

Kevin

BeitragMi, Dez 22, 2010 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt nochmal verständlicher:
Also ich Programmiere ein Spiel, in dem Spiel hat man eine Virtuelle Stadt
und man soll in der Stadt Grafittis selber Zeichnen können.
Es sollte nicht so wie in GTA San Andreas sein.

Ich hoffe mir kann Jemand helfen.

Eingeproggt

BeitragMi, Dez 22, 2010 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Finde ich zwar immer noch nicht sooo toll beschrieben, aber wenn meine Phantasie da was halbwegs Richtiges hinein interpretiert, dann empfehle ich dir, in den B3D-Samples Ordner zu schauen:
samples\birdie\texpaint
könnte sein was du suchst.

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

ToeB

BeitragMi, Dez 22, 2010 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/help/?cat=8

und speziell z.B.

https://www.blitzforum.de/help/SetTexel3D


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

Kevin

BeitragMi, Dez 22, 2010 21:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit dem Sample gehts.... aber bei mehreren Objekten in einer .3ds Datei skinnen die sich alle Gleich!

er Läd meine Textur nicht, und ich kann die Farbe nicht Ändern (also das gesprayte)


Bitte um Hilfe
  • Zuletzt bearbeitet von Kevin am Mi, Dez 22, 2010 21:29, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragMi, Dez 22, 2010 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Was soll man dir ohne Code denn sagen?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Kevin

BeitragMi, Dez 22, 2010 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics3D 1024,768
HWMultiTex True

HidePointer
SetBuffer BackBuffer()
lit=CreateLight()
LightColor lit,0,0,0
PositionEntity lit,0,0,-2

cam=CreateCamera()
CameraRange cam,.1,1000
PositionEntity cam,0,0,-3


bloodtex=CreateTexture(100,100)

model=LoadMesh("Testt.3ds")
EntityTexture model,bloodtex,0,1
TextureBlend bloodtex,3
EntityPickMode model,2
;

spr=CreateSprite()
EntityTexture spr,bloodtex,0,1
PositionEntity spr,4,4,4

Global ent
Global tria
Global surf
Global sx0#,sx1#,sx2#,sxp#
Global sy0#,sy1#,sy2#,syp#
Global un0#,vn0#
Global un1#,vn1#

Global u0#,v0#
Global u1#,v1#
Global u2#,v2#
While Not KeyDown(1)
Include "Kamera.bb"
   EntityTexture spr,bloodtex
   xm=MouseX()
   ym=MouseY()
   If MouseDown(1) Then
      Check_Hit(cam,xm,ym,bloodtex)
   End If
   TurnEntity model,0,.1,0
   UpdateWorld
   RenderWorld


   Line xm-4,ym,xm+4,ym
   Line xm,ym-4,xm,ym+4

   Line sx0,sy0,sx1,sy1
   Line sx1,sy1,sx2,sy2
   Line sx2,sy2,sx0,sy0

   Plot sxp,syp


   Flip
Wend

FreeEntity lit
FreeEntity cam
EndGraphics
End

Function Check_Hit(cam,x,y,tex)
   ent=CameraPick(cam,x,y)
   surf=PickedSurface()
   tria=PickedTriangle()
   If ent<>0 Then
      u0#=VertexU(surf,TriangleVertex(surf,tria,0))
      u1#=VertexU(surf,TriangleVertex(surf,tria,1))-u0
      u2#=VertexU(surf,TriangleVertex(surf,tria,2))-u0
      
      v0#=VertexV(surf,TriangleVertex(surf,tria,0))
      v1#=VertexV(surf,TriangleVertex(surf,tria,1))-v0
      v2#=VertexV(surf,TriangleVertex(surf,tria,2))-v0

      x0#=VertexX(surf,TriangleVertex(surf,tria,0))
      x1#=VertexX(surf,TriangleVertex(surf,tria,1))
      x2#=VertexX(surf,TriangleVertex(surf,tria,2))
      
      y0#=VertexY(surf,TriangleVertex(surf,tria,0))
      y1#=VertexY(surf,TriangleVertex(surf,tria,1))
      y2#=VertexY(surf,TriangleVertex(surf,tria,2))
      
      z0#=VertexZ(surf,TriangleVertex(surf,tria,0))
      z1#=VertexZ(surf,TriangleVertex(surf,tria,1))
      z2#=VertexZ(surf,TriangleVertex(surf,tria,2))


      TFormPoint x0,y0,z0,ent,0
      CameraProject cam,TFormedX(),TFormedY(),TFormedZ()
      sx0#=ProjectedX()
      sy0#=ProjectedY()
      
      TFormPoint x1,y1,z1,ent,0
      CameraProject cam,TFormedX(),TFormedY(),TFormedZ()
      sx1#=ProjectedX()-sx0
      sy1#=ProjectedY()-sy0

      TFormPoint x2,y2,z2,ent,0
      CameraProject cam,TFormedX(),TFormedY(),TFormedZ()
      sx2#=ProjectedX()-sx0
      sy2#=ProjectedY()-sy0

      CameraProject cam,PickedX(),PickedY(),PickedZ()
      sxp#=ProjectedX()-sx0
      syp#=ProjectedY()-sy0

      sx0=0
      sy0=0

      us1#=u1/sx1
      vs1#=v1/sy1
      us2#=u2/sx2
      vs2#=v2/sy2
   
      un0#=((sxp*us1))
      vn0#=((syp*vs1))
      un1#=((sxp*us2))
      vn1#=((syp*vs2))
      
      If un0=0 Or vn0=0 Then
         Paint_Blood(tex,(u0+un1)*TextureWidth(tex),(v0+vn1)*TextureHeight(tex))
      Else
         paint_Blood(tex,(u0+un0)*TextureWidth(tex),(v0+vn0)*TextureHeight(tex))
      End If
   End If
   
End Function

Function Paint_Blood(tex,x,y)
   SetBuffer TextureBuffer(tex)

   Color 255,0,0
   s#=4
   Oval x-s/2,y-s/2,s,s
   Color 255,255,255

   SetBuffer BackBuffer()
End Function

NightPhoenix

BeitragMi, Dez 22, 2010 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne auf deinen Code einzugehen....

Kevin hat Folgendes geschrieben:
Mit dem Sample gehts.... aber bei mehreren Objekten in einer .3ds Datei skinnen die sich alle Gleich!
Das ist ganz normal, in deiner 3ds Datei befinden sich schließlich mehrere Objekte also werden beim Befehl "Texturiere 3ds-Mesh" auch alle Objekte in der 3ds texturiert. Du musst schon die Objekte einzeln laden, ODER betreffende Childs (ca. "Unterobjekte", siehe FindChild) des 3ds Objektes einzeln ansprechen. Child-Zuweisungen sind vermutlich nur sinnvoll auf .b3d Objekte anzuwenden, da 3ds (glaube ich) keine Childs exportiert.

Kevin hat Folgendes geschrieben:
er Läd meine Textur nicht, und ich kann die Farbe nicht Ändern (also das gesprayte)
Die Frabe einer Textur kann man auch nicht ändern. Nur die Farbe der Vertex eines 3d Modells. Also entweder du lädst verschiedenfarbige Texturen oder du greifst auf den Texturbuffer zu und überschreibst die Pixel mit anderen Farbwerten.

Ist vermutlich aber alles zu kompliziert, da du noch mit B3D anfängst. Also alles in allem ein schwieriges Thema für dich.
 

Kevin

BeitragMi, Dez 22, 2010 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich meine Dass die Farbe aus der Spraydose anders werden soll!


Und ich wollte noch wissen wie Dass Grafitti bei neustart des Spiels erhalten bleibt. Und auf einer bestimmten Taste soll alles wieder im Ursprung sein.



MfG

Kevin

NightPhoenix

BeitragMi, Dez 22, 2010 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst das "Graffiti" in eine Textur malen.
Aber ganz ehrlich das ist nicht mal ansatzweise für dein Wissensstand geeignet. Man erlernt nicht Programmierung in B3D bzw. das Verständnis für 3D Prozesse wenn man mit dem Kopf durch die Wand rennt.

Fang doch klein an Wink
 

Kevin

BeitragMi, Dez 22, 2010 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
ja aber ich habe scho neinige gute programme gebastelt, aber bei dem hier bin ich echt Ratlos

Xeres

Moderator

BeitragMi, Dez 22, 2010 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Um das um zu setzen kann man a) Für jedes Objekt eine neue Textur erstellen, in die direkt gemalt wird: Langsam, Speicherintensiv, schwer um zu setzen oder b) Sprites/Quads Decals benutzen die auf die Dauer Speicherintensiv sind, und nicht sehr viel einfacher zu programmieren sind.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

NightPhoenix

BeitragMi, Dez 22, 2010 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja also wenn es dir unbedingt so viel bedeutet... ich würde es so machen:

- leere Textur via CreateTexture (benutz lieber LoadTexture und lade eine kompl schwarze Textur, ist kompatibler mit modernen Grafiktreibern) für ein Graffiti-Motiv erstellen. Jedes neue Motiv verlangt eine neue Textur und eine neue Variable. (Denk über Arrays oder Types nach)
- Graffiti kann über das zeichnen in den TextureBuffer (muss gesperrt/gelockt sein -> LockBuffer) und WritePixelFast vom Nutzer erstellt werden. Dabei werden an Mauskoordinaten äquivalent zu den Pixeln in der Graffititextur einzelne Pixel gezeichnet. Zeichne nur in Graustufenpixel (Grund kommt im nächsten Punkt)
- So gewonnene Textur auf ein quadratisches Mesh (Einseitiges Quadrat) legen (EntityTexture auf Ebene 0!)
- Dieses Mesh kann beliebig gefärbt werden EntityColor, so muss die Textur im Speicher nicht eingefärbt werden oder ähnliches Chaos. Textur ist und bleibt ein Graustufenbild. So wird sie durch das einfärben des Meshes mit gefärbt, da sie ein Graustufenbild ist auch im auf's Entity angewendeten Farbton.
- Ermitteln der Mausklick-Koordinaten in 3D (wo hat Mauszeiger auf Bildschirm geklickt -> berechnen der 3D Koord. an Mauer)
- Positionieren des quadr., eingefärbten Meshes mit Graustufen Textur auf ermittelten Koordinaten. Rotation des quadr. Meshes so dass es weg von Mauer zeigt (damit Graffiti gerade an Wand). Graffiti Mesh ein kleines bisschen weg von Wand bewegen damit es keine Z-Buffer Fehler gibt.

Aktion nochmals für ein neues Graffiti ausführen.
Ich denke du wirst auf massig Probleme treffen. Ich würde mich an deiner Stelle erstmal an was anderem versuchen oder dir dies für später aufheben. Smile
 

Kevin

BeitragDo, Dez 23, 2010 0:44
Antworten mit Zitat
Benutzer-Profile anzeigen
also das mit dem Zeichnen hab ich Jetzt so wie ich es haben wollte. aber das mit dem speichern, das ist für mich Unlösbar (zur zeit)

Megamag

BeitragDo, Dez 23, 2010 0:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Was willst du denn speichern?
Mein DeviantArt Profil
Gewinner des BAC #136
 

Kevin

BeitragDo, Dez 23, 2010 1:02
Antworten mit Zitat
Benutzer-Profile anzeigen
die Graffitis will ich beim nächsten spielstand da haben wo sie vor dem spielstart waren.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group