Sternenhimmel
Übersicht

MosesBetreff: Sternenhimmel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
da ich mit ner skybox für diesen zweck recht unzufrieden war, hab ich mir gedacht, für jeden stern der sichtbar sein soll einfach nen nett texturiertes dreieck in nen mesh rein und in nem radius per zufall ins all klatschen, und das mesh dann mit der camera mitführen.... funktioniert soweit auch super, die dx7 beschränkung lässt mich zwar nicht sonderlich viele dreiecke in das mesh packen, aber grossartig mehr währen auch nicht nötig für mein vorhabe...
nun das problem: das erstellen des meshes dauert schweine lange, vermutlich liegt es daran, dass ich immer das mesh mit randomwerten drehe bevor ein neuer stern hinzukommt ... mir fehlt aber gerade der mathematische hirnschmalz um den einzelnen stern zum zentrum ausgerichtet randommmäßig gleich richtig an dem himmel zu bringen, wenn das ginge müsste er pro schleifendurchlauf nicht 3*(n+1) vertexe verdrehen sondern nur 3, würde nur einen bruchteil am an rechenaufwand zur jetzigen version brauchen: Code: [AUSKLAPPEN] Function CreateStars(image$, densety%, seed%, scale#) ;mesh, load texture & stuff stars_mesh = CreateMesh() stars_tex = LoadBrush(image$, 2, 8, 8) stars_face = CreateSurface(stars_mesh, stars_tex) BrushFX stars_tex, 13 ;set the seed SeedRnd seed ;limit densety to avoid mav cause of f*****g dx7 limits If densety > 21845 densety = 21845 ;build the stars For i = 1 To densety ;random select startextur from 8x8 -image imgu% = Rand(0,7) imgv% = Rand(0,7) ;build triangle <- sollte gleich richtig gestetzt werden vns1 = AddVertex(stars_face, -0.5, -0.4, scale, imgu-0.035, imgv+0.2 ) vns2 = AddVertex(stars_face, +0.5, -0.4, scale, imgu+0.965, imgv+0.2 ) vns3 = AddVertex(stars_face, +0.0, +0.4, scale, imgu+0.465, imgv+1 ) AddTriangle(stars_face, vns3, vns2, vns1) ;random rotation yaw# = Rnd(360) pitch# = Rnd(360) roll# = Rnd(360) RotateMesh stars_mesh, yaw, pitch, roll ; <- weil das ist zu laaannnngsaaaaammmmmm Next Return stars_mesh End Function hier noch ne funky 8x8 sternensammlung zum testen: ![]() densety 5000 ist noch angenehm aber 20000 suckt mächtig gewaltig, hoffe ihr seid da fitter als ich und könnt mir helfen ... |
||
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Da hab ich was für dich - hier ist meine eigene Starsphere-Lösung, basierend auf einer Idee von hectic. Eine Nebeltextur auf eine minimale Geosphere projiziert und als Cubetextur abfotografiert, diese mit Hintergrundsterntextur versehen und dazu eine kugelförmiges Single-Surface-Mesh mit Flare-Sternen, die sich sogar zu Clustern anhäufen lassen. Spiel einfach ein wenig mit herum. Ach und es läuft bei mir hier auf dem Notebook mit fast 1000 FPS auf 800x600!
Die Einbindung ist denkbar einfach: Include "starsphere.bb" cam=CreateCamera() StarBox=Initstarsphere(Cam,100,512,180.0,1.0,1.0,1.0,255,255,255) EntityOrder starbox,1 (erstellt eine Starbox mit Grösse 100, 512er Texturauflösung, um 180° gedreht, Nebelalpha=1, Hintergrundsternealpha=1, Flaresternealpha=1, Meshfarbe 255,255,255). und im Mainloop PositionEntity StarBox,EntityX(cam,1),EntityY(cam,1),EntityZ(cam,1) Download Source+Media (175KB): https://www.blitzforum.de/upload/file.php?id=4675 |
||
Moses |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
erstmal n dickes danke, sieht wirklich gut aus, aber das mit dem cube wollte ich eigendlich umgehen wegen dem fischaugen-effekt den man irgendwie nur mit camerazoom bekämpfen kann, der wiederum die cubetexturierung irgendwie verhunzt...
ansonsten werd ich jetz mal einfach meine fixsterne mittels 3 wild um das zentrum kreisenden und um ihre normale rotierenden pivots setzen ... dann hab ich nähmlich nen linearen aufwand amstatt das ganze mesh jedesmal zu rotieren ... geosphären-abschnitte sind übrigens ne fette idee um nebel wiederum mit ner seed anzuordnen, wobei für mein vorhaben das all realistischer daher kommen soll (keine kritik an eurer wirklich tollen nebeltextur), sprich ich damit eher sparsam umgehen möchte. mal sehen ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine ''Sky''box erzwingt kein Fischaugeneffekt. Wenn eine Skybox richtig erstellt worden ist, kann man nicht mal bei genausten hinsehen die Nahtstellen erkennen. Selbst bei der Kameradrehung in dieser werden keine perspektivischen verzerrungen festzustellen sein. Nur so zur Info....
Eine Skybox ist also die Textursparenste und somit die recourcenschonenste Art, eine Rundumsicht zu erstellen. Das einzige Problem mit einer Skybox, wenn damit Sterne angezeigt werden sollen, ist die tatsache, dass die Quelltextur eine sehr große Auflösung haben sollte, damit die Sterne nicht zu groß erscheinen. Das Problem hat allerdings eine sogenannte Skysphere noch viel mehr, da diese gerade im Zentrum oben und unten einen sehr großen Datenverschleiß hat. Um das Texturproblem in den Griff zu bekommen, habe ich eben die StarSphere ins Codearchiv gestellt. Diese sollte zumindest die Texturgröße so weit minimieren. Krischan hat die Sache perfektioniert indem er eine Mischung aus beidem gemacht hat. - Eine Skybox um Nebel und andere charakterristik darstellen zu können. - Eine Ein-Quad-Pro-Stern-Technik um den Auflösungsverlust zu minimieren. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Moses |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ka eventuell hab ich mich falsch ausgedrückt, obem in dem bild ist der von mir ungewollte effekt deutlich zu sehen:
am rand des bildes wirken die sterne deutlich grösser und leuchtender als in der mitte, kein problem der spheren und boxen eher der camera einstellung... kann man sehr weit reduzieren, indem man zb camerazoom auf 2 stellt, nur wenn ich das mit dem gepostetem source mache ... hauts mit der nebeltextur irgendwie nichtmehr hin :/ |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
@krischan
habe es mir gerade mal angeschaut, bekomme aber einen Fehler angezeigt demo.bb EntityOrder starbox,1 -> Entity is not a model or camera ohne sehe ich keinen Nebel, aber es läuft zumindest |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
skey-z hat Folgendes geschrieben: @krischan
habe es mir gerade mal angeschaut, bekomme aber einen Fehler angezeigt demo.bb EntityOrder starbox,1 -> Entity is not a model or camera ohne sehe ich keinen Nebel, aber es läuft zumindest Ja das ist mir auch schon aufgefallen, aber nur im Debug-Modus, sonst läufts. Irgendwie mag es BB nicht, wenn man einem Pivot ein Entityorder verpasst. Kannst ja testweise in der starsphere.bb in der Funktion InitStarsphere gleich oben Local pivot%=CreatePivot() in Local pivot%=CreateCube() oder so ändern, dann meckert es nicht mehr. Und wie hectic schon schrieb gibt es kaum eine schnellere Möglichkeit einen Sternenhimmel mit dieser Detailtreue darzustellen. Das Ganze benutzt nur minimal 7 Surfaces. Wenn man den Nebel und die Hintergrundsterne weglässt soger nur 1 Surface. Und man erkennt nicht, dass das Ausgangsmesh mal eine Kugel war (sogar eine Geosphere). Eine perfekte Illusion sozusagen... Hier noch ein Tip zum Abfotografieren der Nebeltextur: die horizontale/vertikale Auflösung darf die Texturgrösse (in meinem Beispiel: 512) nicht unterschreiten, sonst klappt das nicht. Das heisst umgekehrt: möchte man den Nebel mit 1024 abfotografieren geht das nur in höheren Auflösungen (oder man speichert die Textur als Datei vorab mit einer höheren Auflösung und lädt diese später nur ein anstatt sie realtime zu erzeugen). Oh da sehe ich noch eine Frage: Zitat: kann man sehr weit reduzieren, indem man zb camerazoom auf 2 stellt, nur wenn ich das mit dem gepostetem source mache ... hauts mit der nebeltextur irgendwie nichtmehr hin :/
Für das Abfotografieren benutze ich dieselbe Cam wie später, deshalb solltest Du den Camerazoom-Befehl erst NACH der Initialisierung verwenden, dann haut es wieder hin. |
||
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hier noch eine auf die Schnelle gebastelte einfachere Variante, die aber ähnlich performant ist und keine Skybox benutzt (die beiden Mediadateien geo6.3ds und nebel.jpg sind in der im ersten Post verlinkten Datei zu finden). Mit Space kann man die Fogsphere an/ausschalten um die reine Performance der Starsphere zu testen.
Hiermit ist es sogar möglich, hunderttausende Quads (=Sterne) auf ein Mesh zu packen, wobei für mich bei 20.000 die optische Schmerzgrenze erreicht ist (sonst sieht der Himmel zu vollgepackt aus). Läuft bei mir mit 700FPS mit Fogsphere und 950 ohne). Das Mesh kann man auch texturieren, macht aber bei so weit entfernten Sternen nur bedingt Sinn. Code: [AUSKLAPPEN] Graphics3D 800,600,32,2
SetBuffer BackBuffer() cam = CreateCamera() movespeed#=1 ; Starsphere erstellen starsphere=InitStarSphere(cam,20000,0.1,0.15,0.95,64,255,100,1) EntityBlend starsphere,3 ; Fogsphere erstellen fogsphere=LoadMesh("geo6.3ds") ScaleEntity fogsphere,100,100,100 fogtex=LoadTexture("nebel.jpg") EntityTexture fogsphere,fogtex EntityAlpha fogsphere,0.3 FlipMesh fogsphere EntityFX fogsphere,1 EntityOrder fogsphere,1 MoveMouse GraphicsWidth()/2,GraphicsHeight()/2 ; Main loop While Not KeyHit(1) ; FPS FPS_C=FPS_C+1 If ms<MilliSecs() ms=MilliSecs()+1000 FPS=FPS_C FPS_C=0 EndIf ; Frame tweening Tween#=Float(MilliSecs()-FrameTime)/Float(20.0) : FrameTime=MilliSecs() ; Bewegung mxs#=MouseXSpeed() mys#=MouseYSpeed() RotateEntity cam,EntityPitch(cam)+(mys#/5),EntityYaw(cam)-(mxs#/5),0 MoveMouse GraphicsWidth()/2,GraphicsHeight()/2 If KeyDown(200) Then MoveEntity cam,0,0,movespeed*tween If KeyDown(208) Then MoveEntity cam,0,0,-movespeed*tween If KeyDown(205) Then MoveEntity cam,movespeed*tween,0,0 If KeyDown(203) Then MoveEntity cam,-movespeed*tween,0,0 ; SPACE: Fogsphere zeigen/verstecken If KeyHit(57) Then fs=1-fs : If fs=1 Then HideEntity fogsphere Else ShowEntity fogsphere RenderWorld Text 0,0,FPS Text 0,15,TrisRendered() Flip 0 Wend End Function InitStarSphere(cam%,stars%,min#,max#,fix#,mincol%,maxcol%,range#,scale#=1.0) Local star%,mesh%,surf% Local i%,size#,h%,a# Local cx#,cy#,cz# ; einzelnes Sternenquad erstellen star=CreateQuad() ; Starsphere erstellen mesh = CreateMesh() surf = CreateSurface(mesh) EntityFX mesh,1+2+16 cx=EntityX(cam) cy=EntityX(cam) cz=EntityX(cam) ; alle Sterne erstellen For i=1 To stars If CountVertices(surf)>30000 Then surf=CreateSurface(mesh) ; Sterngrösse size=min*scale;Rnd(min*scale,max*scale) If Rnd(1)>fix Then size=max*scale;size=Rnd(min,max)*scale ScaleEntity star,size,size,size ; Starquad zurück auf Kameraposition PositionEntity star,cx,cy,cz ; Starquad zufällig drehen, von der Mitte wegbewegen und auf die Kamera zeigen TurnEntity star,Rnd(0,Rnd(180,360)),Rnd(0,Rnd(180,360)),Rnd(0,Rnd(180,360)) MoveEntity star,0,0,range*scale PointEntity star,cam ; Farbe h=Rand(mincol,maxcol) ; Starquad zur Starsphere hinzufügen AddToSurface(star,surf,mesh,h,h,h,1) Next Return mesh End Function ; Mesh mit allen Eigenschaften einer Surface hinzufügen Function AddToSurface(mesh, surf,singlesurfaceentity,r%,g%,b%,a#) Local vert%[2],vr%[2],vg%[2],vb%[2],va#[2] Local surface%,oldvert%,i%,i2%,s% surface = GetSurface(mesh,1) For i = 0 To CountTriangles(surface)-1 For i2 = 0 To 2 oldvert = TriangleVertex(surface,i,i2) vr[i2]=r vg[i2]=g vb[i2]=b va[i2]=a TFormPoint VertexX(surface,oldvert),VertexY(surface,oldvert),VertexZ(surface,oldvert), mesh,singlesurfaceentity vert[i2] = AddVertex(surf,TFormedX(),TFormedY(),TFormedZ(),VertexU(surface,oldvert),VertexV(surface,oldvert)) VertexColor surf,vert[i2],r,g,b,a Next AddTriangle(surf,vert[0],vert[1],vert[2]) Next End Function ; Quad erstellen Function CreateQuad(r%=255,g%=255,b%=255,a#=1.0,fx%=0) Local mesh%,surf%,v1%,v2%,v3%,v4% mesh=CreateMesh() surf=CreateSurface(mesh) v1=AddVertex(surf,-1,1,0,1,0) v2=AddVertex(surf,1,1,0,0,0) v3=AddVertex(surf,-1,-1,0,1,1) v4=AddVertex(surf,1,-1,0,0,1) VertexColor surf,v1,r,g,b,a VertexColor surf,v3,r,g,b,a VertexColor surf,v2,r,g,b,a VertexColor surf,v4,r,g,b,a AddTriangle(surf,0,1,2) AddTriangle(surf,3,2,1) EntityFX mesh,fx Return mesh End Function |
||
vanjolo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Woah Krischan,
ich bin begeistert. Was ich nicht ganz verstehe ist der Punkt mit dem Abfotografieren. Eine Skybox z.B. mit Terragen erstellen ist mir geläufig. Was meinst du aber mit abfotografieren? |
||
***************************
in Entwicklung: Tank Battles - Panzeraction Pacific Battles - Rundenstrategie abgeschlossenes Projekt: Harrier Assault |
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Terragen ist das Stichwort, da macht man das genauso. Ich "fotografiere" mit der Cam genau in der Mitte der Sphere alle sechs Richtungen (vorne,hinten,links,rechts,oben,unten) ab und erhalte somit die 6 Würfelseitentexturen, die ich später dem Würfel genauso zuweise. Aber eben nur noch 6 Surfaces, sieht aber genauso aus ![]() |
||
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Eine ''Sky''box erzwingt kein Fischaugeneffekt. Wenn eine Skybox richtig erstellt worden ist, kann man nicht mal bei genausten hinsehen die Nahtstellen erkennen. Selbst bei der Kameradrehung in dieser werden keine perspektivischen verzerrungen festzustellen sein. Nur so zur Info.... Naja, so ganz stimmt das nicht. Gerade bei konstanter Drehung ist schon zu erkennen, dass sich ein Sky-Box-Himmel verzerrt. Auch wenn man keine Seams erkennt, so lassen sich die Ecken doch erahnen. Da sieht eine SkySphere besser aus. Aber gerade wenn der Sky nur als Hintergrund dient kann man das Verzerren einer Sky-Box sicherlich vernachlässigen. Außerdem ist eine Skybox einfacher zu erstellen als eine gute Skysphere. @Krishan Sehr hübsche Demo ![]() Aber auch hier kann man bei gleichmäßiger Drehung der Kamera(mit z.B. Turnentity) die Box-Verzerrung des Nebels gut erkennen. |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Gut, dann eliminieren wir die Seams mittels einer optischen Täuschung und verbessern den zweiten Code noch ein wenig, so dass wir nun auch farbige Sterne haben. Im Prinzip besteht der Weltraum nun aus drei Layern, sieht noch besser aus, hat dafür aber nur noch 700-800FPS).
Layer 1: Flarelayer mit mittelgrossen Sternen bis zu Fixsternen (alle orange, gelb, blau weiss zu je 25%) Layer 2: Geosphere mit Nebeltextur Layer 3: Cube mit Hintergrundsternen Der "Trick" hierbei ist, dass ich über die Hintergrundsterntextur noch ganz dezent Softlight-Clouds geblendet habe, so dass es nun extrem schwierig wird, da überhaupt einen Seam zu erkennen. Es sieht nun auch nicht mehr so regelmässig aus. Da die Nebeltextur nun wieder auf einer (Geo-)Sphere ist gibt es hier wenn überhaupt noch an den Polen eine Störung, an der Stelle ist mein Weltall aber rabenschwarz ![]() Die Funktion starsphere=InitStarSphere(cam,10000,0.1,0.25,0.97,255,255,10,1) noch etwas erläutert (Reihenfolge der Optionen): - cam: Kamera-Entity - 10000: Anzahl Sterne - 0.1: minimale Sterngrösse - 0.25: maximale Sterngrösse - 0.97: Wahrscheinlichkeit von Fixsternen (0-1 z.B. 0.97 = 3%, 0.5 = 50%, 1.0 = 0%) - 255: minimale Helligkeit von weissen Sternen - 255: maximale Helligkeit von weissen Sternen - 10: Range (also der Radius der Starsphere) - 1: Skalierung Preisfrage: wo treffen auf diesem Bild 5 Wires auf einen Vertex? Download (125KB): https://www.blitzforum.de/upload/file.php?id=4700 In der Demo gibt es folgende Tastenkombinationen: SPACE = Nebel an/aus W = Wireframe an/aus D = Drehung an/aus Steuerung über Pfeiltasten / Maus |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
BIG BUG
Das erahnen der Nachstellen kommt, wenn man zu kleine Texturauflösungen benutzt. Bzw. folgendes. Da wo eine Skyphere einfach unschärfer wird, erwartet man bei einer Skybox einfach höhere Auflösungsdichte. Demnach müsste man beim abfotografieren der Teilbilder zu den Ecken hin die Textur unschärfer machen, damit die höhere Texeldichte in der Endszene kompensiert wird. - - - Skybox Vorteile: - Eine einfache Skybox ist einfach und schnell zu erstellen - Benötigt maximal nur 12 Triangles - Vollumrumsicht möglich Nachteile: - Benötigt im schlechtestem Fall 6 Surfaces - Will man eine perfekte Skybox, so wird der Erstellungsaufwand ungleich größer. - - - Skysphere Vorteile: - Eine einfache Skysphere benötigt nur ein Surface - Vollumrumsicht möglich Nachteile: - Im Zentrum oben und unten wird eine unmenge Texelverschleiß durchzogen - In beiden Zentren werden trotz hoher Texeldichte keine hochen Darstelungsqualitäten möglich - Benötigt eine unmenge an Triangles - - - Skyshell Vorteile: - Benötigt nur ein Surface - Benötigt maximal 10 Triangles - Kaum Texelverschleiß vorhanden Nachteile: - Keine Vollumrumsicht möglich - - - (Super)Ikosaeder Vorteile: - Maximal 20 Triangles (Ikosaeder) oder 60 Triangles (Super-Ikosaeder) benötigt - Kaum Pixelverschleiß oder Verzerrungen vorhanden - Ein Surface benötigt - Vollumrumsicht möglich Nachteile: - Das erstellen der Textur wird zur tourtur und selbst bei größer Geduld kaum zu schafen |
||
Moses |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hier nochmal die optimierte noob-lösung von mir (mesh wird nicht mehr gedreht für jeden stern):
Code: [AUSKLAPPEN] Function CreateStars(image$, densety%, seed%, scale#, oder%=1, parent=0) ;dummy-pivots sm=CreatePivot() s1=CreatePivot(sm) s2=CreatePivot(sm) s3=CreatePivot(sm) MoveEntity s1, -0.5, -0.4, scale MoveEntity s2, +0.5, -0.4, scale MoveEntity s3, +0.0, +0.4, scale ;mesh, load texture & stuff stars_mesh = CreateMesh() stars_tex = LoadBrush(image$, 2, 8, 8) stars_face = CreateSurface(stars_mesh, stars_tex) BrushFX stars_tex, 13 ;set the seed SeedRnd seed ;limit densety to avoid mav cause of fucking dx7 limits If densety > 21845 densety = 21845 For i = 1 To densety ;random select random textur-part from 8x8-image imgu% = Rand(0,7) imgv% = Rand(0,7) ;random rotation of the dummy-pivots TurnEntity sm, Rnd(360), Rnd(360), Rnd(360) ;build triangle with help of the dummy pivots vns1 = AddVertex(stars_face, EntityX(s1,1), EntityY(s1,1), EntityZ(s1,1), imgu-0.035, imgv+0.2 ) vns2 = AddVertex(stars_face, EntityX(s2,1), EntityY(s2,1), EntityZ(s2,1), imgu+0.965, imgv+0.2 ) vns3 = AddVertex(stars_face, EntityX(s3,1), EntityY(s3,1), EntityZ(s3,1), imgu+0.465, imgv+1 ) AddTriangle(stars_face, vns3, vns2, vns1) Next ;delete dummy-pivots FreeEntity s3 FreeEntity s2 FreeEntity s1 FreeEntity sm ;stars should be always in the background EntityOrder stars_mesh, order ;set the parent If parent > 0 EntityParent stars_mesh, parent ;return the stars Return stars_mesh End Function vorteile: -minimal eine surface nötig -alle sternenpositionen werden mittels der des seedwertes berechnet -nur eine kleine textur mit sternen nötig(128pixel x128pixel mit 8x8(64) unterschiedlichen sternen reicht eigendlich völlig aus) -keine konstanten und variablen im maincode nötig, funktionsaufruf genügt (empfinde das als gut und richtig) nachteile: -nicht mehr als 21845 sterne möglich (wenn man mehr möchte, einfach mehr sterne mit unterschidlicher seed und order und/oder anderer textur an ein pivot hängen) -noch keine nebel anmerkung: scale sollte von der verwendeten bidschirmauflösung abhängen zb. breite/8 (geschmacksfrage) |
||
- Zuletzt bearbeitet von Moses am So, Feb 15, 2009 2:00, insgesamt 3-mal bearbeitet
Moses |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Meine erster versuch mit nebeln, sieht ganz gut aus denke ich:
![]() Code: [AUSKLAPPEN] Function CreateNebula(image$, dimx#, dimy#, yaw#, pitch#, roll#, scale#, oder%=1, parent=0) ;mesh, load texture & stuff nebula_mesh = CreateMesh() nebula_tex = LoadBrush(image$, 2, 1, 1) nebula_face = CreateSurface(nebula_mesh, nebula_tex) BrushFX nebula_tex, 13 ;build quad with help of dummy-pivots vnn1 = AddVertex(nebula_face, -dimx/2, -dimy/2, scale, 0, 0) vnn2 = AddVertex(nebula_face, +dimx/2, -dimy/2, scale, 1, 0) vnn3 = AddVertex(nebula_face, -dimx/2, +dimy/2, scale, 0, 1) vnn4 = AddVertex(nebula_face, +dimx/2, +dimy/2, scale, 1, 1) AddTriangle(nebula_face, vnn3, vnn2, vnn1) AddTriangle(nebula_face, vnn3, vnn4, vnn2) ;rotate nebula RotateMesh nebula_mesh, yaw, pitch, roll ;nebular should be always somewehre in the background but in front of the most stars EntityOrder nebula_mesh, order ;set the parent If parent > 0 EntityParent nebula_mesh, parent ;return the nebula Return nebula_mesh End Function ![]() ![]() vorteil: -jeder nebel frei positionierbar -jeder nebel wiederverwendbar nachtele: -jeder nebel braucht ein surface anmerkung: camerazoom ist auf 2 zu stellen... |
||
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Moses, ich war zwischenzeitlich auch fleissig. Ich habe mich an einer 4096x2048er Nebeltextur versucht, die doch recht realistisch geworden ist ![]() Das richtige "Ambiente" fehlte auch noch, und da nicht alle Grafikkarten 4096er Texturen unterstützen habe ich ein Funktion gebastelt, die ein Panoramaquad für 360° Texturen erstellt, wobei die Textur "übereinanderliegt" und später nur die UV-Koordinaten angepasst werden. Effektiv gibt das nun bei 2048x2048 die Qualität einer 4096er Textur. Zusammen mit der Sternfunktion sieht das Ergebnis so aus und läuft auch sehr schnell: Screenshot "Milkyway" Der Aufruf ist denkbar einfach: Milkyway=InitMilkyway(500,0.2,10,40,Cam,100,0,0,0,0,255,192,128,1,0,0,0,0) 500 = 500 Sterne 0.2 = Verteilung Fixsterne / normale Sterne (hier: 80% Fixsterne) 10 = Fixsterne im Winkel von 0° bis 10° gegen die Galaxieebene 40 = Normale Sterne im Winkel von 10° bis 40° gegen die Galaxieebene Cam = Kamera 100 = Skala Danach folgen jeweils die RGBA-Werte der unteren, mittleren und oberen Vertexreihe, die mit Filter 5 geblendet werden. Download Media+Source (512KB): https://www.blitzforum.de/upload/file.php?id=4740 In der Demo kann man mit SPACE zwischen zwei Beispielen hin- und herschalten, sowie mit W den Wireframe-Modus anzeigen lassen. Steuerung wie üblich mit Pfeiltasten und Maus. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group