Auf textur malen (brushes?) - Lichteffekte realisieren
Übersicht

![]() |
Lord_VaderBetreff: Auf textur malen (brushes?) - Lichteffekte realisieren |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
haha, geil endlich nen mechwarrior freak ![]() Bin gerade dabei ein Aufbauspiel im zu Porgrammiern welches im BattleTech unisversum spielt ![]() Sorry das ich nich helfen konnte MfG Zhang |
||
![]() |
Vincent |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() A propos, stell mal lightmap_res auf 32-64 dann gehts und sieht noch ok aus fürn BB game! |
||
OJay |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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! ![]() |
||
![]() |
Lord_Vader |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mhh nun. Das ist schonmal schlecht :\ Aber dann stehts auf Blitzbase nicht so ganz richtig erklärt. Naja zumindest weiss ichs jez ![]() Hat noch jemand ne Ahnung wie ich das machen könnte mit den Schatten? DarkCorner meint das BB terrain is nicht so tauglich ![]() ![]() |
||
Darren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group