Auf textur malen (brushes?) - Lichteffekte realisieren

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Lord_Vader

Betreff: Auf textur malen (brushes?) - Lichteffekte realisieren

BeitragDi, Jan 11, 2005 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leude,

ich stehe vor einem problem. Ich bin dabei nen Mechwarrior clone zu machen und bin auf ein kleines problem gestoßen. Ich habe vor ein licht zu machen (EDIT: Realtime beweglich). Da vertexshader bestimmt scheiße aussieht (wenn man mal guckt das die beim terrain schlecht verteilt sind) will ich auf die lightmap malen (wie bei Half-Life 1 mit der taschenlampe). Jez weiss ich net genau wie ich das machen soll. Ich weiss net richtig wie brushes funktionieren und wills damit probieren. Allerdings stellt sich die frage wie ich malen soll, denn wenn ich einen brush bewegen will gibtsn fehler!

Code: [AUSKLAPPEN]

texa=CreateTexture(256,256)
EntityTexture terr1,texa

brush=createbrush(130,130,130)
BrushTexture brush,texa
PaintEntity terr1,brush


Bei dem code gibt er kein fehler aus, nur wenn ich BRUSH verschieben will. Wie geht das eigentlich? mit PaintMesh und dem anderen gehts auch net. Ich will auf ein terrain malen (nicht nur).

Wie mache ich das am besten?

MfG Lord_Vader
 

ZhangHe2

BeitragDi, Jan 11, 2005 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
haha, geil endlich nen mechwarrior freak Smile
Bin gerade dabei ein Aufbauspiel im zu Porgrammiern welches im BattleTech unisversum spielt Wink

Sorry das ich nich helfen konnte

MfG Zhang

Vincent

BeitragDi, Jan 11, 2005 23:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo !

also um schatten zu realisieren musst du immer wenn du die lightmap aktualisierst eine neue lightmap erzeugen ... das heisst: du müsstest jedesmal den lichtkegel neu berechnen ... in BB kann es durchaus möglich sein, dass man eine ebene mit "realtimeshadows" (alle 100 frames aktualisiert ... oder so) versehen kann. aber alles andere als eine ebene wird nicht funktionieren (ein terrain könnte man im groben als ebene ansehen, wenn man die entsprechenden höhenunterschiede innerhalb des geländes speziel berücksichtigt in der schattenberechnung)

die schatten auf einer ebene könntest du so machen, dass du das terrain höhe mal breite mit nem pivot abfährst ( in schritten der lightmapauflösung geteilt durch terrainbreite bzw. länge) , und vorher ein weiteren pivot an der lichtquelle erzeugst ... dann testest du immer, ob die camera den pivot sieht ... um ne tschenlampe zu machen müsstest du dann den rand der taschenlampe formen, damit das licht sozusagen geblockt wird, und schatten entstehen ...

ich schreib mal schnell ein beispiel dazu ..

mh ... nach langer testreihe hab ich festgestellt, dass es doch nicht möglich ist das system in ein realtimespiel einzubinden ;(

ich hab mal ein EXTREM unüberichtlich und EXTREM unoptimiertes programm gerschrieben ... mit dem hab ich so optimierungen getestet, aber keine richtig wirksame gefunden ... wenn nur ein obkekt drinne ist, funktioniert alles super .. aber ab mehr als einem is schluss ...

Code: [AUSKLAPPEN]

Graphics3D 1024,768,16,2

Global lightmap_res = 128 , terrain_size = 128 , terrain_scale = 10, Wire = 0

Dim feld( lightmap_res , lightmap_res)
SeedRnd MilliSecs()

camera=CreateCamera()
PositionEntity camera , 0 , 800 , 0
CameraRange camera , 1 , 50000
TurnEntity camera,140,0,0

terrain = CreateTerrain(terrain_size)
ScaleEntity terrain , terrain_scale , 1 , terrain_scale
PositionEntity terrain , -terrain_scale*terrain_size/2 , 0 , - terrain_scale*terrain_size/2
lightmap = CreateTexture(lightmap_res , lightmap_res)
ScaleTexture lightmap , terrain_size , terrain_size
RotateTexture lightmap,270

c = terrain_scale * terrain_size / 2 ;lightmap_res
d = (terrain_scale * terrain_size) / lightmap_res

EntityTexture terrain , lightmap
lightmap_pivot = CreatePivot()

Dim objekte(2)
For i=0 To 2
   b= Rand(0,3)
   If b=0 objekte(i) = CreateCube()
   If b=1 objekte(i) = CreateSphere()
   If b=2 objekte(i) = CreateCone()
   If b=3 objekte(i) = CreateCylinder()
   EntityColor objekte(i) , Rand(0,255) , Rand(0,255) , Rand(0,255)
   ScaleEntity objekte(i) , Rand(30,50) , Rand(30,50) , Rand(30,50)
   PositionEntity objekte(i) , Rand(-terrain_size/4*terrain_scale,terrain_size/4*terrain_scale) , Rand(0,300 ), Rand(-terrain_size/4*terrain_scale,terrain_size/4*terrain_scale)
   EntityPickMode objekte(i),2,1
Next

Global licht = CreateSphere()
EntityColor licht , 255 , 255 , 0
ScaleEntity licht , 10 , 10 , 10
PositionEntity licht , 300 , 800 , 400
vertexlicht = CreateLight(2,licht)
PositionEntity vertexlicht , 300 , 800 , 400

While Not KeyDown(1)
   zeit=MilliSecs()-zeitstart
   If zeit>1000 fps=fpscounter fpscounter=0 zeitstart=MilliSecs()
   fpscounter=fpscounter+1

   Xdreh=EntityPitch(camera)+MouseYSpeed()/5
   Ydreh=EntityYaw(camera)-MouseXSpeed()/5
   MoveMouse 400,300
   If Xdreh>80 Xdreh=80
   If Xdreh<-80 Xdreh=-80
   If KeyDown(17) MoveEntity camera,0,0,4
   If KeyDown(30) MoveEntity camera,-3,0,0       
   If KeyDown(32) MoveEntity camera,3,0,0    
   If KeyDown(31) MoveEntity camera,0,0,-3
   RotateEntity camera,Xdreh,Ydreh,0

   If KeyHit( 2 ) Then wire = 1 - wire WireFrame wire
   
   ;berechnen
   For i = 0 To 2
      For a = 0 To lightmap_res
         PositionEntity lightmap_pivot , c - b * d  , 0 , c - a * d
         feld(a,b) = EntityVisible(lightmap_pivot , licht )
      Next
      
      If b = lightmap_res
         b = 0
      Else
         b = b +1
      EndIf
   Next   
   
   ;malen
   If counter < 0
      SetBuffer TextureBuffer(lightmap)
      Color 255,255,255
      Rect 0,0,lightmap_res,lightmap_res
      LockBuffer TextureBuffer(lightmap)
      For k = 0 To lightmap_res-1
         For a = 0 To lightmap_res-1
            If feld(a,k) = 0 WritePixelFast a,k,$000000
         Next
      Next         
      UnlockBuffer TextureBuffer(lightmap)
      SetBuffer FrontBuffer()
      counter = lightmap_res / 10
   EndIf
   counter = counter -1
   
   
   For i = 0 To 2
      TurnEntity objekte(i) , Rand(0,10) / 10.0 , Rand(0,10) / 10.0 , Rand(0,10) / 10.0
   Next
      
   RenderWorld()
   Color 255,255,255
   Text 1,1,"frames: "+fps
   Text 1,15,"Bewegen -> WASD+Maus"
   Text 1,30,"Wireframe -> [1]"
   Text 1,45,"Grafikspeicher: "+AvailVidMem()/1024
   
Flip 1
wend
end
Gott ist nicht mit uns ... weil er mit Idioten keine Gnade kennt !

Lord_Vader

BeitragMi, Jan 12, 2005 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke das du dir sone arbeit gemacht hast!
Also ja es sieht aus als würde es so nicht gut gehen.
Also wenn dann müsste ich eh direkt in der 3D-Welt auf objekten malen können, denn ich muss terrain und beliebigpolyge objekte malen.

Ich frag mich ernsthaft wie ich das mit Brushes machen kann. DC weiss das mit sicherheit. Aber der hat anscheinend keine Zeit Smile Naja ich geh ihn nochmal fragen!

A propos, stell mal lightmap_res auf 32-64 dann gehts und sieht noch ok aus fürn BB game!
 

OJay

BeitragMi, Jan 12, 2005 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaube, hier verwechselt jemand Blitz3D-Brushes mit brushes, die man als pinsel übersetzt...

ein blitz3D-brush ist nichts anderes als ein container, mit dem man mehrere texturen übereinanderlegen, und derren blendmodes festlegen kann. das sind KEINE pinsel wie in paint! Wink

Lord_Vader

BeitragMi, Jan 12, 2005 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Mhh nun. Das ist schonmal schlecht :\ Aber dann stehts auf Blitzbase nicht so ganz richtig erklärt. Naja zumindest weiss ichs jez Smile

Hat noch jemand ne Ahnung wie ich das machen könnte mit den Schatten? DarkCorner meint das BB terrain is nicht so tauglich Smile Ich soll mir selbst eins machen (is wahrscheinlich auch besser so). Dann könnte ich auch vertexshading benutzen, da die vertexe immer gleich angeordnet sind. Allerdings wäre es anders schöner Smile
 

Darren

BeitragMi, Jan 12, 2005 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
also für eine ebene würde ich decals benutzen die zum boden entweder multipliziert oder addiert werden... wenn du es für jede ebene machen willt würde ich das decal bei jeden vertex des bodens unterteilen und den nächsten punkt im schatten oder licht kegel suchen usw....
MFG Darren

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group