(Echtzeit-)Raytracing-Engine
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
ein torus ist ein Polynom vierten grades...
irgendwo in der POV-Help stand die formel.. jedenfalls in der alten...
btw:
bei POV fand ich die difference{} funktion immer sehr praktisch für CSG.
sie subtrahiert die weiteren simple-shapes vom ersten.
irgendwo in der POV-Help stand die formel.. jedenfalls in der alten...
btw:
bei POV fand ich die difference{} funktion immer sehr praktisch für CSG.
sie subtrahiert die weiteren simple-shapes vom ersten.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Torus-Formel: http://www.povray.org/documentation/view/3.6.1/74/
ein torus in glbasic ( mit opengl als api)... sollte sich nicht allzuschwer nach PB konvertieren lassen
[/code]
Code: Alles auswählen
// ------------------------------------------------------------- //
// -=# CREATETORUS #=-
//
// By Samuel R. Buss
// http://math.ucsd.edu/~sbuss/MathCG
// ------------------------------------------------------------- //
FUNCTION CreateTorus: num, MinorRadius, MajorRadius, NumWraps, NumPerWrap, TextureWrapVert, TextureWrapHoriz
// Diese Variablen sind als LOCAL definiert:
// x, y,
// Draw the torus
LOCAL i, di, j, wrapFrac, wrapFracTex, phi, thetaFrac, thetaFracTex, theta
LOCAL x, y, z, r
X_OBJSTART num
FOR di=0 TO NumWraps-1
FOR j=0 TO NumPerWrap
FOR i=di+1 TO di STEP -1
wrapFrac = MOD(j, NumPerWrap)/NumPerWrap
wrapFracTex = j/NumPerWrap
phi = 360*wrapFrac
thetaFrac = (MOD(i, NumWraps)+wrapFracTex)/NumWraps
thetaFracTex = (i+wrapFracTex)/NumWraps
theta = 360*thetaFrac
r = MajorRadius + MinorRadius*COS(phi)
x = SIN(theta)*r
z = COS(theta)*r
y = MinorRadius*SIN(phi)
X_OBJADDVERTEX x,y,z, thetaFracTex*TextureWrapVert, wrapFracTex*TextureWrapHoriz, RGB(255, 255, 255)
NEXT
NEXT
X_OBJNEWGROUP
NEXT
X_OBJEND
ENDFUNCTION
Bildung kommt von Bildschirm und nicht von Buch, sonst hieße es ja Buchung.
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- 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
@Kaeru, Spirit, Creature:
Wäre schön, wenn es so einfach wäre, aber im Grunde müsste es so
aussehen:
Input: Torus(Mittelpunkt, Normale, Radius1, Radius2), Strahl(Start, Richtung)
Output: mindestens Schnittpunkt und die Normale am Schnittpunkt
@Kaeru:
CSG kommt auch noch rein. Zunächst aber wohl nur das Addieren und
Subtrahieren von Körpern. Irgendwelche komplexen Formen mit AND, OR,
XOR, NOT, usw. sind mir erstmal zu kompliziert.
@all:
Mir ist aufgefallen, dass ich im letzten Screenshot die Schatten nicht
angeschaltet hatte. Das war zu Testzwecken aus. Außerdem ist mir eben aufgefallen, dass die Glanz-Berechnung fehlerhaft war.
Deshalb hier ein neuer Screenshot:

Wäre schön, wenn es so einfach wäre, aber im Grunde müsste es so
aussehen:
Input: Torus(Mittelpunkt, Normale, Radius1, Radius2), Strahl(Start, Richtung)
Output: mindestens Schnittpunkt und die Normale am Schnittpunkt
@Kaeru:
CSG kommt auch noch rein. Zunächst aber wohl nur das Addieren und
Subtrahieren von Körpern. Irgendwelche komplexen Formen mit AND, OR,
XOR, NOT, usw. sind mir erstmal zu kompliziert.
@all:
Mir ist aufgefallen, dass ich im letzten Screenshot die Schatten nicht
angeschaltet hatte. Das war zu Testzwecken aus. Außerdem ist mir eben aufgefallen, dass die Glanz-Berechnung fehlerhaft war.
Deshalb hier ein neuer Screenshot:

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> Wäre schön, wenn es so einfach wäre, aber im Grunde müsste es so
aussehen:
ja sorry, aber der schnitt Strahl/Polynom muss ja für jede oberfläche ermittelt werden.
POV arbeitet halt mit Polynomen und hat die sonderfälle der simple-shapes extra definiert,
damit man im script eben nicht für jedes simple das polynom hinschreiben muss...
bei den polynomen stoße ich an die grenzen meiner fähigkeiten...
ich kann zwar nen Raytracer gut benutzen, aber proggen könnnt' ich keinen.
@screenshot
verd... das sieht ja schweinegeil aus...
wie ist eigentlich das interface... wird die engine mit nem script versorgt,
oder gibts vorab-erstell-routinen die nen Mem-bereich mit daten füllen?
aussehen:
ja sorry, aber der schnitt Strahl/Polynom muss ja für jede oberfläche ermittelt werden.
POV arbeitet halt mit Polynomen und hat die sonderfälle der simple-shapes extra definiert,
damit man im script eben nicht für jedes simple das polynom hinschreiben muss...
bei den polynomen stoße ich an die grenzen meiner fähigkeiten...
ich kann zwar nen Raytracer gut benutzen, aber proggen könnnt' ich keinen.
@screenshot
verd... das sieht ja schweinegeil aus...
wie ist eigentlich das interface... wird die engine mit nem script versorgt,
oder gibts vorab-erstell-routinen die nen Mem-bereich mit daten füllen?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- 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
Ja, okay, Polynome sind mir momentan noch zu hoch.
Wenn du eine Welt erstellen willst, sieht das so aus. Ich mach mal ein
Beispiel in Pseudo-Code:

Scripte gibt es noch keine, aber das ist ja einfach im Gegensatz zum Rest.Kaeru Gaman hat geschrieben:wie ist eigentlich das interface... wird die engine mit nem script versorgt,
oder gibts vorab-erstell-routinen die nen Mem-bereich mit daten füllen?
Wenn du eine Welt erstellen willst, sieht das so aus. Ich mach mal ein
Beispiel in Pseudo-Code:
Code: Alles auswählen
*RT.RT = RT_New()
*RT\BackgroundRGB(0, 0, 0) ;Hintergrundfarbe (wenn keine Objekt getroffen wird) [Standard]
*RT\AmbientLightRGB(0, 0, 0) ;Umgebungslicht [Standard]
*Object.RTObject = *RT\NewObject(#RT_Object_Sphere) ;Erstelle eine Kugel
*Object\Radius(2) ;Radius
*Object\PositionXYZ(0, 0, 10) ;Position des Mittelpunktes
*Object\ColorRGB(1, 0.5, 0.25) ;Farbe (r, g, b)
*Object\DirectLight(1.0) ;Direktes Licht [Standard]
*Object\Reflection(0.5) ;Verspiegelung
*Object\Transparency(0.25) ;Transparenz
*Object\Refraction(1.33) ;Wasser
*Light.RTLight = *RT\NewLight(#RT_Light_Point) ;Erstelle ein Punktlicht
*Light\PositionXYZ(0, 0, 0) ;Position [Standard]
*Light\Color(1, 1, 1) ;Farbe
*Cam.RTCam = *RT\NewCam(100, 100) ;Erstelle eine Kamera
*Cam\PositionXYZ(0, 0, 0) ;Position [Standard]
*Cam\AngleXYZ(0, 0, 0) ;Winkel (Blick auf die Kugel) [Standard]
*Cam\FOV(45) ;Objektivöffnungwinkel [Standard]
*Cam\Gamma(1) ;Gamma (praktisch für zu helle oder zu dunkle Bilder) [Standard]
*Cam\RecursionDepth(4) ;max. Rekursionen (für Transparenz und Verspiegelungen)
*Cam\PixelSize(1) ;Pixelgröße (1x1, 2x2, 3x3, 4x4, ...) [Standard]
;Rendern
*Cam\CalculateRays() ;Muss aufgerufen werden, wenn FOV und Winkel geändert wurden
StartDrawing(Output)
*Cam\Draw(0, 0) ;Rendert das Bild mit Plot zeilenweise
StopDrawing()
*RT\Free()
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- 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
Ich hatte gerade Lust ein paar Screenies zu machen.
Ein paar Kugeln mit zufälligem Glanz, verschiedenen Farben und
unterschiedlich starken Verspiegelungen

50 farbige Kugeln ohne Verspiegelung, aber mit Glanz und 4 Lichtquellen
oben (rot), links (blau), rechts (grün) und unten (gelb)

Das selbe nochmal mit Verspiegelungen

Und wieder, aber mit grauen Kugeln

Diesesmal 100 Kugeln und eine graue verspiegelte Ebene im
Hintergrund

Ein paar Kugeln mit zufälligem Glanz, verschiedenen Farben und
unterschiedlich starken Verspiegelungen

50 farbige Kugeln ohne Verspiegelung, aber mit Glanz und 4 Lichtquellen
oben (rot), links (blau), rechts (grün) und unten (gelb)

Das selbe nochmal mit Verspiegelungen

Und wieder, aber mit grauen Kugeln

Diesesmal 100 Kugeln und eine graue verspiegelte Ebene im
Hintergrund

- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Hi NTQ, wenn ich die schönen Bilder sehe, fällt mir gleich wieder die
ID zur CNC-Simulation ein
Aber leider habe ich ein Problem unter PB 4.02. Wenn ich die
RTEngine ins Purebasci - Userlibraryverzeichnis lade, sind auf einmal
Startdrawing(), WindowID() und noch einige anderen wichtigen Funktionen
auf einmal verschwunden. PB kennt diese auf einmal nicht mehr, obwohl es untern in der Statusleiste beim eingeben angezeigt wird. Woran kann das
liegen?
Denn wenn ich diese Lib wieder entferne ist alles wieder in Ordnung.
Grüße ..Falko
ID zur CNC-Simulation ein

Aber leider habe ich ein Problem unter PB 4.02. Wenn ich die
RTEngine ins Purebasci - Userlibraryverzeichnis lade, sind auf einmal
Startdrawing(), WindowID() und noch einige anderen wichtigen Funktionen
auf einmal verschwunden. PB kennt diese auf einmal nicht mehr, obwohl es untern in der Statusleiste beim eingeben angezeigt wird. Woran kann das
liegen?
Denn wenn ich diese Lib wieder entferne ist alles wieder in Ordnung.
Grüße ..Falko
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- 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