sich drehender 3D-Planet !ohne! 3D Engine

Probleme beim Erstellen von 3D-Modellen und Texturen, keine Ahnung womit man Musik macht? Dies ist dein Forum.
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Meiner Meinung nach dürfte ein Lupeneffekt auf einem Sprite einen halbwegs realistischen Planeten hinbekommen.

(Das dürfte inetwa das sein, was NTQ schon gesagt hat.)
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Jetzt komm ich

Beitrag von Xaby »

Ich bin ja ein Fan vom KC85, hatte selbst einen KC85/3, aber den besseren, nicht den aus Mühlhausen.

Hier: http://www.iee.et.tu-dresden.de/~kc-clu ... BRIK05.HTM

Also mit KC-Emu kann man einen KC85 emulieren. Die SSS und BAS-Dateien können einfach geöffnet werden und müssen nicht erst mit einer Kassette eingespielt werden :o

Das Programm, dass ich speziell meine ist GLOBUS.
Ich finds genial. Und da die heutigen Rechner nicht nur 1,7 MHz haben, sondern mehr als tausend mal so viel, dürfte es auch recht zügig gehen.
Keine Sprites, keine 3D-Engine und trotzdem genial.

:allright: :freak: Naja, aber eher Spielerei. Ansonsten bleiben dir noch Metaballs :lol:

Viel Erfolg mit deinem Vorhaben. Gruß, Folker
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

danke danke aber mein Planet ist schon fix und fertig :allright:

er ist balt bei DUNE 2077 zu sehen

habe es mit TransformSprite3D gamascht und die punkte mit meinem code von vorne errechnet

her schnell ne test-Demo haben will hier:
http://hometown.aol.de/Hmmpgutt/Kugel_Mond.exe
zum schluss ist dann die eine Kante weg und licht!
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Sebe
Beiträge: 585
Registriert: 11.09.2004 21:57
Wohnort: Europa
Kontaktdaten:

Beitrag von Sebe »

Nice! :allright:
Wie genau hast du das denn nun gemacht?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Sebe hat geschrieben:Nice! :allright:
Wie genau hast du das denn nun gemacht?
Also hier erst mal der Code

Kann sein das er bei dir/euch nicht mehr geht weil er mit 3.3 geschrieben ist oder das manche dinge überflüssig sind.

Das ist der Ansatz für die Kugel ich habe noch andere dinge hinzugefügt.
Wie schon gesagt, Licht, Effekte, ...

1. Bild laden und in kleine Quadrate teilen und diese als Sprite3D laden.
2. gleichmäßig die Punkte der Bild platzieren (360° um die Kugel und dann vom Äquator jeweils 90°) also ist es noch ein Rechteck.
3. Immer 4 Punkte für die Kugel berechnen und ein Sprite3D transformen.

Wenn ich dir die Formel da unten noch mal erläutern soll sag bescheid :allright:

Code: Alles auswählen

InitSprite()
InitSprite3D()
InitKeyboard()
OpenScreen(1024, 768, 32, "Kugel") 

Structure P
 Px.l
 Py.l
 x.f
 y.f
EndStructure
NewList P.P()
Procedure Punkt(Px, Py, x.f, y.f)
 AddElement(P())
 P()\Px = Px         ; X-Sprite (0..36)
 P()\Py = Py         ; Y-Sprite (0..18)
 P()\x = x           ; Winkel (   0 .. 3600 )
 P()\y = y           ; Höhe   (  -r ..   r )
EndProcedure

b.f = 3.14159265/180 ; Bogenmaß

Poly = 12  ; Anzahl der Polygone durch 96
r.l = 200  ; Radius der Kugel in Pixel

q.f = 36/Poly/4*10 ; Konstante für später

Sprite$ = "textur_mond.bmp"


If LoadSprite(0, Sprite$)  ; das Bild muss 540 * 270 sein
 DisplaySprite(0, 0, 0)
 For x = 0 To Poly*4
  For y = 0 To Poly*2
   GrabSprite(4000, x*540/Poly/4, y*270/Poly/2, 270/Poly/2, 270/Poly/2, #PB_Sprite_Texture)
   SaveSprite(4000, "C:\Quadrat_Kugel.bmp")
   If LoadSprite(x*100+y, "C:\Quadrat_Kugel.bmp", #PB_Sprite_Texture)
    CreateSprite3D(x*100+y, x*100+y)
   Else
    End
   EndIf
  Next y
 Next x
 DeleteFile("C:\Quadrat_Kugel.bmp")
Else
 End
EndIf


; Erstellen der Punkte auf der Kugel
For x = 0 To Poly*4 :
 For y = -Poly To Poly
  Punkt(x, y+Poly, x*36/Poly/4*10, y*36/Poly/4*10)
 Next y
Next x


Repeat

 Kreis = Kreis + 1 ; rotation
 If Kreis >= 3600 : Kreis = Kreis - 3600 : EndIf

 ClearScreen(0,0,0)

 Start3D()
  ResetList(P())
  While NextElement(P())
   If P()\Px < Poly*4 :
    ; Berechung der 4 Punkte für TransformSprite3D
    x1 = 512+Sin((P()\x+Kreis  )*b)*Sqr(Pow(r,2)-Pow(Sin((P()\y  )*b)*r,2))
    x2 = 512+Sin((P()\x+Kreis+q)*b)*Sqr(Pow(r,2)-Pow(Sin((P()\y  )*b)*r,2))
    x3 = 512+Sin((P()\x+Kreis+q)*b)*Sqr(Pow(r,2)-Pow(Sin((P()\y+q)*b)*r,2))
    x4 = 512+Sin((P()\x+Kreis  )*b)*Sqr(Pow(r,2)-Pow(Sin((P()\y+q)*b)*r,2))
    y1 = 384+Sin((P()\y  )*b)*r
    y2 = 384+Sin((P()\y  )*b)*r
    y3 = 384+Sin((P()\y+q)*b)*r
    y4 = 384+Sin((P()\y+q)*b)*r
    TransformSprite3D(P()\Px*100+P()\Py, x1, y1, x2, y2, x3, y3, x4, y4)
    DisplaySprite3D(P()\Px*100+P()\Py, 0, 0, 255)
   EndIf
  Wend
 Stop3D()

 FlipBuffers()          
 ExamineKeyboard() 

Until KeyboardPushed(#PB_Key_Escape)

CloseScreen()

End
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Sebe
Beiträge: 585
Registriert: 11.09.2004 21:57
Wohnort: Europa
Kontaktdaten:

Beitrag von Sebe »

Danke, man lernt nie aus :mrgreen:
KTX82
Beiträge: 95
Registriert: 31.08.2004 00:11
Wohnort: Mannheim
Kontaktdaten:

Beitrag von KTX82 »

Da ich mich mit 3D-Formeln kein millimeter auskenne und demnach im Code nichts erkennen kann meine Frage: wird nur das gerendert, was auch sichtbar ist, oder auch der Hintere Teil der Kugel? Es ruckelt nämlich zwischenzeitlich etwas. Und den Kanten der Kugel (logisch *g*) nach zu urteilen sind es nicht mal all zu viele Sprites die hier zum Einsatz kommen müssen.
Pharmacie populaire www.viagrasansordonnancefr.com aide aux malades
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

KTX82 hat geschrieben:Da ich mich mit 3D-Formeln kein millimeter auskenne und demnach im Code nichts erkennen kann meine Frage: wird nur das gerendert, was auch sichtbar ist, oder auch der Hintere Teil der Kugel? Es ruckelt nämlich zwischenzeitlich etwas. Und den Kanten der Kugel (logisch *g*) nach zu urteilen sind es nicht mal all zu viele Sprites die hier zum Einsatz kommen müssen.
was du noch reinmach kannst ist das er die hinteren winkel nicht durchrechet aner das nix angezeit wird macht TransformSprite3D() automatisch <)

PS : wenn du ein problem mit den Kanter der Sprites zueinander hat (weise striche), dann nimm einfach ein negativen Radis. :allright:
Es entsteht trotzdem noch ein Planet nur andersherum :lol:
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Was ich an dem Code nicht verstehe:
Wozu ist diese Zeile gut:

Code: Alles auswählen

SaveSprite(4000, "C:\Quadrat_Kugel.bmp")
und wieso nimmst du überhaupt eine SpriteID von 4000? Bisschen hoch
vielleicht... Achso, du kennst noch kein [c]#PB_Any[/c], oder?

Aber trotzdem ist das mit dem Speichern doch bestimmt ziemlich langsam. Geht das mit [c]ClipSprite()[/c] nicht?

Am Ende könnte man die Sprites und Sprite3Ds wieder freigeben.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

NicTheQuick hat geschrieben:Was ich an dem Code nicht verstehe:
Wozu ist diese Zeile gut:

Code: Alles auswählen

SaveSprite(4000, "C:\Quadrat_Kugel.bmp")
und wieso nimmst du überhaupt eine SpriteID von 4000? Bisschen hoch
vielleicht... Achso, du kennst noch kein [c]#PB_Any[/c], oder?

Aber trotzdem ist das mit dem Speichern doch bestimmt ziemlich langsam. Geht das mit [c]ClipSprite()[/c] nicht?

Am Ende könnte man die Sprites und Sprite3Ds wieder freigeben.
wollte ich ja auch eigendlich machen aber! wenn ich ein [c]ClipSprite()[/c] nehme und dann [c]CreateSprite3D()[/c] ausführe nimmt er das original :freak:
Und wenn ich bei [c]GrabSprite()[/c] sage das es ein #PB_Sprite_Texture werden muss nimmt er das nicht an :freak: und [c]CreateSprite3D()[/c] schlägt fehl deswegen Speicher ich einen bereich und lade diesen als Sprite3D.

Umständlich aber es geht :allright:

Ich denke das liegt am verBUGten 3.3 :roll:

Aber ich habe mich in 3.3 verliebt ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten