Function der Beleuchtung in Blitz3D
Übersicht

![]() |
FuchsiBetreff: Function der Beleuchtung in Blitz3D |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weiß jmand von euch welche Berechnungen hinter dem Beleuchtungssystem von Blitz3D steckt ?
Ich hatten nähmlich die Idee ein Licht zu Programmieren das wirklich nur die vom Licht sichtbaren Dinge beleuchtet. Ne schwierige Frage aber vielleicht weiß es jemand. Gruß Fuchsi ! |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. falsches Forum
2. verwende vor dem setzen des lichts "ambientlight 0, 0, 0", so sind die nicht beleuchteten Polygone schwarz 3. Schatten musst du dir jedoch selber erstellen, sonst werden auch verdeckte objekte beleuchtet |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
- Zuletzt bearbeitet von skey-z am Mo, Feb 06, 2006 19:42, insgesamt einmal bearbeitet
![]() |
YellowRiderEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
~VERSCHOBEN~ Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde. YellowRider |
||
![]() |
Fuchsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab extra nachgedacht in welches Forum aber da steht ja: Häufig gestellte Fragen und Tutorials zu Blitzbasic".
Wenn ich trotzdem falsch liege dann: ![]() Vielleicht hab ich mich aber nich klar ausgedrückt. Ich meine dass das Licht von Blitz3D ja praktisch durch die Objekte durchgeht. Nun versucht ich aber das das Licht eben nicht durch Objekte durchscheien kann. Trotzdem Danke Fuchsi. |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
wie schon gesagt, entweder eigene Schattenengine schreiben, oder eine (kostenlose) ausm Netz benutzen. | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
Fuchsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab ich a grad kostenlos gehöhrt ? ![]() In allen Threads die ich geslsen habe hat man mir gesagt , dass es keine kostenlose gibt. Kannste vielleicht nen Link posten ? Fuchsi ! |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Huhu,
um mal direkt auf Deine eigentliche Frage zu antworten, ohne irgendwas von wegen "Schattenengine" mit einzuwerfen. ![]() ![]() |
||
![]() |
Xaron |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für sowas wären Shader Klasse. Aber die gibt's ja leider nicht in DirectX7...
Gruß - Xaron |
||
Cerberus X - Monkey X Reloaded! |
Klaas |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
und um deine Frage wirklich zu beantworten.
Zitat: Weiß jmand von euch welche Berechnungen hinter dem Beleuchtungssystem von Blitz3D steckt ?
Blitz verwendet einfaches "Vertex Lighting" |
||
DreamoraBetreff: Re: Function der Beleuchtung in Blitz3D |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Fuchsi hat Folgendes geschrieben: Weiß jmand von euch welche Berechnungen hinter dem Beleuchtungssystem von Blitz3D steckt ?
Eigentlich garkeine, für Lichter werden DX Hardwarelichter verwendet, welche Vertices entsprechend ihrer Position und Normale "belichtet". |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Fuchsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stimmt schon, nur hab ich gemeint wie "Vertrex Lighting" functioniert, aber das hat Ava ja scon gut erklärt. ![]() Thx Fuchsi ! EDIT//: Muss nochmal fragen. Gibt es wirklich kostenlose Schattenengines ? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein, keine die Schatten deiner Objekte in Echtzeit werfen zumindest. Die Stencil Lib als auch Sswifts Schattensystem kosten Geld. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Black Spider |
![]() Antworten mit Zitat ![]() |
---|---|---|
hab da n code für dich, den du ganz gut gebrauchen könntest. (Hab ich kostenlos irgendwo gefunden):
(KA ob der Funzt, oder ob du den Fixen musst): Code: [AUSKLAPPEN] ;Simple SchattenDemo von Inarie
;www.projectblitz.de ;www.inarie.de Graphics3D 800,600,32,1 SetBuffer BackBuffer() ;kamera piv = CreatePivot() cam = CreateCamera(piv) MoveEntity cam,0,0,-10 PointEntity cam,piv ;heightmap... wird hier als texture und displacementzeugs genutzt heightmap = LoadTexture("heightmap.bmp") ;ein hübsches bodenmesh aus sucox code geklaut ;) mesh = CreateBoden(30,30) ScaleMesh mesh,.2,.2,.2 ; ein paar cylinder, die durch die luft fliegen cubes = CreateMesh() For i = 0 To 2 cube = CreateCylinder(3) ScaleMesh cube,.8,.8,.8 PositionMesh cube,Rnd(2,18)-10,.5,Rnd(2,18)-10 RotateMesh cube,Rand(-20,20),Rand(360),Rand(-20,20) AddMesh(cube, cubes) FreeEntity cube Next ScaleMesh mesh,8,8,8 ScaleMesh cubes,2,2,2 PositionEntity mesh,0,-10,0 meshbrushwhite = CreateBrush(255,255,255) BrushFX meshbrushwhite,1 meshbrush = CreateBrush(255,255,255) BrushTexture meshbrush,heightmap,0,1 cubebrushwhite = CreateBrush(255,255,255) BrushFX cubebrushwhite,1 cubebrush = CreateBrush(255,255,255) BrushTexture cubebrush,heightmap,0,1 ;licht und lichtkamera Global light = CreateLight(2) PositionEntity light,25,25,0 LightColor light,10,10,10 AmbientLight 10,10,10 lightcam = CreateCamera(light) HideEntity lightcam CameraFogMode lightcam,1 CameraFogRange lightcam,35,150 CameraClsColor lightcam,255,255,255 CameraViewport lightcam,0,0,512,512 PointEntity lightcam,cubes CameraViewport lightcam,0,0,512,512 CreateCube(lightcam); man will ja auch sehen, wo das licht ist ;) ;die zwei schattentexturen ;die texturen nutzen das zweite uvset! stex = CreateTexture(512,512,256) TextureBlend stex,2 TextureCoords stex,1 stex2 = CreateTexture(512,512,256) TextureBlend stex2,2 TextureCoords stex2,1 ;projektion ProjUV(lightcam,mesh,512,0) ProjUV(lightcam,cubes,512) ;displacement für hübsches terrain EntityDisplace(mesh,heightmap,10,-1) ;coole, schattenwerfende kugeln ;) kpiv = CreatePivot() Global kugel[5] For i = 0 To 5 t = Rand(0,3) Select t Case 0 kugel[i] = CreateSphere(8,kpiv) Case 1 kugel[i] = CreateCube(kpiv) Case 2 kugel[i] = CreateCone(7,1,kpiv) Case 3 kugel[i] = CreateCylinder(7,1,kpiv) End Select ScaleEntity kugel[i],Rnd(2,3),Rnd(2,3),Rnd(2,3) RotateEntity kugel[i],Rand(360),Rand(360),Rand(360) PositionEntity kugel[i],Rand(-30,30),Rand(-30,30),Rand(-30,30) Next ScaleEntity kpiv,.5,.5,.5 PositionEntity kpiv,0,5,0 ;mainloop While Not KeyHit(1) If KeyHit(57) Then wire = 1- wire:WireFrame wire ;umherwerfen der objekte TurnEntity kpiv,.15,.5,.05 TurnEntity cubes,.1,0,0 PointEntity light,cubes PointEntity lightcam,cubes MoveEntity light,-.2,0,0 ;projektion der schattenuvkoordinaten ProjUV(lightcam,cubes,512) ProjUV(lightcam,mesh,512) ;anmalen der entities in der farbe, die ihr schatten haben soll PaintSpheres(100,100,100,1) PaintEntity mesh,meshbrushwhite PaintEntity cubes,cubebrushwhite ;schatten für die cubes rendern RenderShadow(lightcam,cam,stex) ;da die cubes schatten auf das terrain werfen sollen, müssen sie jetzt auch angemalt werden EntityColor cubes,100,100,100 EntityFX cubes,1 ;rendern der schatten auf dem terrain RenderShadow(lightcam,cam,stex2) ;alles in den farben anmalen, in denen es gerendert werden soll und schattentexturen draufpacken PaintEntity mesh,meshbrush PaintEntity cubes,cubebrush EntityTexture mesh,stex2,0,2 EntityTexture cubes,stex,0,2 PaintSpheres(255,255,255,0,heightmap) ;rendern RenderWorld If KeyHit(2) Then FlushKeys : WaitKey() ;kamerasteuerung TurnEntity piv,KeyDown(200)-KeyDown(208),KeyDown(205)-KeyDown(203),0 MoveEntity cam,0,0,KeyDown(30)-KeyDown(44) RotateEntity piv,EntityPitch(piv),EntityYaw(piv),0 Text 0,0,Util_Fps() ;Text 0,20,TrisRendered() Flip 0 ; flip0, damit man die tatsächlichen fps sieht Wend End Function ProjUV(cam,mesh,width#,set=1) ; diese funktion passt die vertexkoordinaten an die projektion der kamera an RotateEntity cam,EntityPitch(cam),EntityYaw(cam),0 For s = 1 To CountSurfaces(mesh) sur = GetSurface(mesh,s) For ve = 1 To CountVertices(sur)-1 x# = VertexX(sur,ve) y# = VertexY(sur,ve) z# = VertexZ(sur,ve) TFormPoint x#,y#,z#,mesh,0 x# = TFormedX#() y# = TFormedY#() z# = TFormedZ#() CameraProject(cam,x#,y#,z#) u# = ProjectedX#()/width# v# = ProjectedY#()/width# VertexTexCoords sur,ve,u#,v#,0,set Next Next End Function Function PaintSpheres(r,g,b,fx,tex=0) ; färbt die ganzen kugeln ein (hätt' ich die doch bloß mit addmesh zusammengefügt! ;)) For i = 0 To 15 TurnEntity kugel[i],.2,.1,0 EntityColor kugel[i],r,g,b EntityFX kugel[i],fx If tex Then EntityTexture kugel[i],tex Next EntityColor kugel[5],120,0,0 EntityAlpha kugel[5],.5 End Function Function RenderShadow(cam,hcam,tex) ; rendert die schattentextur ShowEntity cam HideEntity hcam size = TextureWidth(tex) CameraViewport cam,0,0,size,size UpdateWorld RenderWorld CopyRect 0,0,size,size,0,0,BackBuffer(),TextureBuffer(tex) HideEntity cam ShowEntity hcam End Function Function CreateBoden(xstep = 20, zStep = 20) ; erstellt einen wunderschönen suco-x boden ;) Local final_mesh = CreateMesh() Local final_surface = CreateSurface(final_mesh) Local vertex[5] For x = 0 To xstep-1 For z = 0 To zStep-1 vertex[0] = AddVertex(final_surface,x-xstep/2,0,z-zStep/2,0,0) vertex[1] = AddVertex(final_surface,x-xstep/2,0,z-zStep/2-1,0,1) vertex[2] = AddVertex(final_surface,x-xstep/2+1,0,z-zStep/2-1,1,1) vertex[3] = AddVertex(final_surface,x-xstep/2,0,z-zStep/2,0,0) vertex[4] = AddVertex(final_surface,x-xstep/2+1,0,z-zStep/2,1,0) vertex[5] = AddVertex(final_surface,x-xstep/2+1,0,z-zStep/2-1,1,1) AddTriangle(final_surface, vertex[2], vertex[1], vertex[3]) AddTriangle(final_surface, vertex[3], vertex[4], vertex[5]) Next Next UpdateNormals(final_mesh) Return final_mesh End Function Function EntityDisplace(mesh,tex,scale#=1,diff#=0,updanormals=1) ; verschiebt vertices anhand ihrer uv in normalrichtung twidth = TextureWidth(tex)-1 ; wird weithin displacementmapping genannt ;) theight = TextureHeight(tex)-1 LockBuffer TextureBuffer(tex) For s = 1 To CountSurfaces(mesh) sur = GetSurface(mesh,s) For ver = 0 To CountVertices(sur)-1 c = ReadPixelFast(VertexU(sur,ver)*twidth,VertexV(sur,ver)*theight,TextureBuffer(tex)) move# = Float#((c And $FF0000)/$10000)/255.00+diff# nx# = VertexX(sur,ver)+(VertexNX(sur,ver))*move*scale# ny# = VertexY(sur,ver)+(VertexNY(sur,ver))*move*scale# nz# = VertexZ(sur,ver)+(VertexNZ(sur,ver))*move*scale# VertexCoords sur,ver,nx,ny,nz Next Next UnlockBuffer TextureBuffer(tex) If updanormals Then UpdateNormals mesh End Function Global fps_frames,fps_ms=MilliSecs(),fps_anzeige# ; zeigt nur die fps an Function Util_Fps() fps_frames=fps_frames+1 If MilliSecs()-fps_ms >= 1000 Then fps_anzeige=fps_frames fps_frames=0 fps_ms=MilliSecs() EndIf Return fps_anzeige End Function recht simpel, aber nützlich.[/syntax] |
||
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif |
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi.
Wenn dir statische Lichtquellen reichen, würde ich dir lightmaps empfehlen. Da werden die Beleuchtungen und Schatten vorher berechnet und es werden lightmaps erstellt, die dann einfach über die Entitys drüber gelegt werden können. Lightmapper findest du z.B. auf BlitzBasic.com (YAL wäre zu empfehlen.) Mfg TheProgrammer |
||
aktuelles Projekt: The last day of human being |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Black Spider hat Folgendes geschrieben: Hab ich kostenlos irgendwo gefunden
Black Spider hat Folgendes geschrieben: ...^^ Achja, es geht! Aber is nicht das schnellste... Hab auch "irgendwo" was gefunden, und das war glaub ich schneller. Wenn ichs finde sach ich Bescheid^^ MfG |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group