Highmap + Skybox : Fragen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

ToeB

Betreff: Highmap + Skybox : Fragen

BeitragFr, Aug 14, 2009 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich wollt jetzt nicht Fragen wie das geht Wink

Aber ich wollte mal wissen, es gibt ja in machen Strategiespielen die Kreise auf dem Boden um die ausgewählten spieler. Die Passen sich immer automatisch dem boden der Highmap an (also so also ob das auf die Map gemalt worden währe...). Das wollt ich auch mal versuchen, mit einem Sprite, aber das kann natürlich net klappen, denn das Sprite müsste ich ja verbiegen... Wisst ihr wie man das macht ?

Zur SkyBox. Ich wollte zwei Skyboxen machen. Eine sichtbare und eine unsichtbare. Warum ? Die Sichtbare soll hinter der unsichtbaren sein bzw. sich mit dem Spieler bewegen. Also hat man einen schönen himmel. die unsichbare soll als Map-grenze dienen. Mit Kollision also. Nur damit man weiß, wie weit man fahren soll, habe ich mir überlegt (bzw. aus anderen Spielen genommen), das , wenn der Spieler in die nähe einer der 4 wände kommt, das dann so ein Gitternetz an der Playerposition auftaucht. (ist schwer zu erklären, villeicht find ich ja auch einen screen). Also ist es iwie möglich eine Texture nur an einer stelle anzeigen zu lassen ? Ich wollte das so machen, das ein Kreis gezeigt wird, und zwar immer an der Playerposition, wenn man die Position bis zu wand zieht, dann an der Stelle. Dieser Kreis soll je nach abstand unterschiedlich groß sein, aber er soll nicht einfach nur gescalt werden, sondern die Gitternetzgröße auf der Textur soll gleichbleiben, nur der kreis soll größer werden (am besten auch mit verschwimmung). Man muss da warscheinlich eine Texture drauflegen, die weiß ist und in einem Kreis frabverlauf auf schwarz übergeht. Weiß dann transparent machen (png) und dann einfach als zweiten Texture layer über die Texture legen. Aber wie kann ich das Schaffen das die Texture nicht gekachelt wird ?

Ich hoffe ihr versteht mich Laughing

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!
 

Krischan

BeitragFr, Aug 14, 2009 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das mit den "Sprites" würde ich so machen:

AlignToVector mesh,NX,NY,NZ,2,0.1

Wobei NX/Y/Z das jeweilige Vertexnormal des Terrains an der Position ist (kann man z.B. mit einem 90° Linepick nach unten herausfinden). Mein Zwerg aus Blitztiles klebt damit zumindest wie eine Klette am Terrain, auch wenn es mal 90° nach unten geht Smile

Hier die "Pickbelow" Funktion die ich dafür verwende (die NX/Y/Z sind global):

Code: [AUSKLAPPEN]
Function BT_PickBelow#(entity%,range#=10000,glob=False)
   
   Local height#
   
   Local x#=EntityX(entity%,glob)
   Local y#=EntityY(entity%,glob)
   Local z#=EntityZ(entity%,glob)
   
   LinePick(x,y+range,z,0,-range*2,0)

   height=PickedY()
   
   BT_NX#=PickedNX()
   BT_NY#=PickedNY()
   BT_NZ#=PickedNZ()
   
   Return height
   
End Function


Die andere Frage hab ich nicht kapiert Shocked
  • Zuletzt bearbeitet von Krischan am Fr, Aug 14, 2009 17:22, insgesamt einmal bearbeitet

Megamag

BeitragFr, Aug 14, 2009 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube, ich weiß, was du meinst. Du meinst unsichtbare Wände, und sobald der Spieler diesen Wänden nahe kommt, soll dort sozusagen ein Kreis mit einem Gitternetz erscheinen, oder? Vielleicht könnte man da ein Sprite mit Alpha-Mask verwenden. Ich weiß aber nicht, wie das geht oder wie das aussieht... Sad

Tankbuster

BeitragFr, Aug 14, 2009 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Könntest du das zweite bitte nochmal erklären, ich verstehe es auchnicht so ganz.

Ich verstehe nur, dass du irgendeine Textur auf eine bestimmte Stelle der unsichtbaren Wand anzeigen lassen willst. Dafür würde ich aber ein Sprite nehmen, das ist komfortabler und schneller Wink
Twitter
Download Jewel Snake!
Windows|Android

ToeB

BeitragFr, Aug 14, 2009 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
@Krischan : Nee so meinte ich das nicht. Ich wollte z.B. eine Gelben kresi um den Spieler malen lassen, und dieser Kreis soll so auf dem Boden liegen, als ob er darauf gemalt worden sein (also kein durchgängiger kreis nur ans Terrain "gedreht").

@Megamag : Genauso meine ich es. Ja ich hatte mir auch schon überlegt, eine Gitternetz Texture auf dei S"SkyBox" zu legen, die aber bis zum erscheinen des kreises unsichtbar zu halten (muss ich für jede seite einzeln machen). Dann nur noch ein Sprite wie beschrieben auf die Position malen und je nach abstand scallieren. muss mal gucken ob ichs hinbekomme Wink

@tankbuster : Sorry ich hab mein bestes getan , kann auch nicht besser formolieren Wink

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!

Nicdel

BeitragFr, Aug 14, 2009 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
als ob er darauf gemalt worden sein


Dann mal ihn doch auf die Textur.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

ToeB

BeitragFr, Aug 14, 2009 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
???

Das blöde daran ist, wenn die Texture gekachelt ist, wird gleich mehr als einmal gemalt, und ich müsste für sagen wir mal 100 einheiten alle aufd den Buffer malen (ist ja nicht so das es ein Kreis wie Oval ist, sondern er soll z.b. transparent sein, dicke umrandung und ausgefüllt , sprich ich will ein Image anzeigen lassen, vill. auch ein dreick welches sich in die richtung der Figur mitdreht). Außerdem muss ich die Texture gleich zweimal abspeichern, einaml das was angezigt wird und einmal das was ich über das gemalte drüber malen soll.


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!
 

Meik

Betreff: Re: Highmap + Skybox : Fragen

BeitragFr, Aug 14, 2009 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
ToeB hat Folgendes geschrieben:
Also ich wollt jetzt nicht Fragen wie das geht Wink

Aber ich wollte mal wissen, es gibt ja in machen Strategiespielen die Kreise auf dem Boden um die ausgewählten spieler. Die Passen sich immer automatisch dem boden der Highmap an (also so also ob das auf die Map gemalt worden währe...). Das wollt ich auch mal versuchen, mit einem Sprite, aber das kann natürlich net klappen, denn das Sprite müsste ich ja verbiegen... Wisst ihr wie man das macht ?

Also ich denke er meint sowas in der art:
http://i64.photobucket.com/alb..._1_0_2.jpg
Der "Kreis" passt sich halt den Boden an.

ToeB hat Folgendes geschrieben:
Zur SkyBox. Ich wollte zwei Skyboxen machen. Eine sichtbare und eine unsichtbare. Warum ? Die Sichtbare soll hinter der unsichtbaren sein bzw. sich mit dem Spieler bewegen. Also hat man einen schönen himmel. die unsichbare soll als Map-grenze dienen. Mit Kollision also. Nur damit man weiß, wie weit man fahren soll, habe ich mir überlegt (bzw. aus anderen Spielen genommen), das , wenn der Spieler in die nähe einer der 4 wände kommt, das dann so ein Gitternetz an der Playerposition auftaucht. (ist schwer zu erklären, villeicht find ich ja auch einen screen). Also ist es iwie möglich eine Texture nur an einer stelle anzeigen zu lassen ? Ich wollte das so machen, das ein Kreis gezeigt wird, und zwar immer an der Playerposition, wenn man die Position bis zu wand zieht, dann an der Stelle. Dieser Kreis soll je nach abstand unterschiedlich groß sein, aber er soll nicht einfach nur gescalt werden, sondern die Gitternetzgröße auf der Textur soll gleichbleiben, nur der kreis soll größer werden (am besten auch mit verschwimmung). Man muss da warscheinlich eine Texture drauflegen, die weiß ist und in einem Kreis frabverlauf auf schwarz übergeht. Weiß dann transparent machen (png) und dann einfach als zweiten Texture layer über die Texture legen. Aber wie kann ich das Schaffen das die Texture nicht gekachelt wird ?

Ich hoffe ihr versteht mich Laughing

mfg ToeB

Zum zweiten meint er glaube ich sowas wie im Spiel DGX9142 von Mr.Keks.
https://www.blitzforum.de/gallery/953/

Wie man sowas jetzt aber umsetzt weiss ich leider nicht Smile

ToeB

BeitragFr, Aug 14, 2009 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke !

Aber das zweite hast auch du leider falsch verstanden Wink

Ich erklärs jetzt nicht nochmal, steht ja oben Wink

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!

Megamag

BeitragFr, Aug 14, 2009 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich habe mal schnell eine schlechte Skizze gemacht, damit man sich hier vorstellen kann, wie ToeB das Zweite meint:
user posted image
(Ich hoffe, ich liege richtig und habe nicht auch falsch gedacht)

Der_Schläfer

BeitragFr, Aug 14, 2009 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics3D 1280,1024,32,1

c=CreateCamera()


SetBuffer BackBuffer()

Color 20,0,0
Rect 0,0,64,64
Color 255,0,0
Line 0,0,64,64
Line 64,0,0,64
tex=CreateTexture(64,64)
CopyRect 0,0,64,64,0,0,BackBuffer(),TextureBuffer(tex)

Local levelborderbox=createlevelborderbox(20,10,tex,20)

Repeat
   
   lookx#=lookx#-MouseXSpeed()*0.1
   looky#=looky#+MouseYSpeed()*0.1
   MoveMouse 100,100
   
   RotateEntity c,looky,lookx,0
   MoveEntity c,0,0,(KeyDown(17)-KeyDown(31))*0.4
   MoveEntity c,(-KeyDown(30)+KeyDown(32))*0.4,0,0
   
   RenderWorld
   Flip 1
   
   updatelevelborderbox(levelborderbox,c,8,12)
   
Until KeyHit(1)


;kiste machen mit soundso vielen unterteilungen, keine grosse sache, oder? :P (ohne deckel übrigens, und quadratisch, size ist die seitenlänge)

Function createlevelborderbox(size#,verts_per_side,texture,texture_repeat=1)
   Local m,s,y,x
   
   m=CreateMesh()
   b=CreateBrush()
   BrushTexture b,texture
   BrushFX b,1+2+32+16
   BrushBlend b,3

   s=CreateSurface(m,b)
   
   For q=0 To 3
      
      
      For x=0 To verts_per_side
         For y=0 To verts_per_side
            
            Select q
               Case 0
                  AddVertex s,-size*0.5+(1.*size/verts_per_side)*x,-size*0.5+(1.*size/verts_per_side)*y,-size*0.5,texture_repeat*1.*x/verts_per_side,texture_repeat*1.*y/verts_per_side
               Case 1
                  AddVertex s,-size*0.5+(1.*size/verts_per_side)*x,-size*0.5+(1.*size/verts_per_side)*y,+size*0.5,texture_repeat*1.*x/verts_per_side,texture_repeat*1.*y/verts_per_side
               Case 2
                  AddVertex s,-size*0.5,-size*0.5+(1.*size/verts_per_side)*y,+size*0.5-(1.*size/verts_per_side)*x,texture_repeat*1.*x/verts_per_side,texture_repeat*1.*y/verts_per_side
               Case 3
                  AddVertex s,+size*0.5,-size*0.5+(1.*size/verts_per_side)*y,+size*0.5-(1.*size/verts_per_side)*x,texture_repeat*1.*x/verts_per_side,texture_repeat*1.*y/verts_per_side
            End Select
            
            
            If x>0 And y>0 Then
                  AddTriangle s,q*(verts_per_side+1)^2+(verts_per_side+1)*x+y,q*(verts_per_side+1)^2+(verts_per_side+1)*(x-1)+y,q*(verts_per_side+1)^2+(verts_per_side+1)*x+y-1
                  AddTriangle s,q*(verts_per_side+1)^2+(verts_per_side+1)*(x-1)+y,q*(verts_per_side+1)^2+(verts_per_side+1)*(x-1)+y-1,q*(verts_per_side+1)^2+(verts_per_side+1)*x+y-1
            EndIf
         Next
      Next
   Next
   
   UpdateNormals m
   
   Return m
End Function

;alpha der vertices setzen, weiter entfernte bekommen kleinere alpha-werte

Function updatelevelborderbox(levelboderbox,playerentity,visibility_inner_radius#,visibility_outer_radius#)
   
   s=GetSurface(levelboderbox,1)
   For z=0 To CountVertices(s)-1
      distance_from_player#=Sqr((EntityX(playerentity)-VertexX(s,z))^2+(EntityY(playerentity)-VertexY(s,z))^2+(EntityZ(playerentity)-VertexZ(s,z))^2)
      
      alpha#=1-1.*((distance_from_player#)-visibility_inner_radius)/(visibility_outer_radius#-visibility_inner_radius)
   ;das ist jetzt ne formel welche bewirkt, dass die vertices sobald sie den inneren radius verlassen zu verblassen beginnen und ganz weg sind wenn sie den äusseren radius erreicht haben
   ;das ganze erfolgt linear, man könnte natürlich auch quadratisch ("plötzlicher") ausblenden oder so...
      
      VertexColor s,z,255,255,255,alpha#
   Next
End Function


sowas?

ToeB

BeitragSa, Aug 15, 2009 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
JAAA !!! Danke !!

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!

Der_Schläfer

BeitragSo, Aug 16, 2009 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
bitte, gern...
kucks dir gut an dass dus dann selber auch kannst, meshbarbeitung/vertexalpha in bb ist etwas cooles und kann für einen haufen effekte (wasser/lichtstrahlen/laser etc) verwendet werden =)

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group