(Echtzeit-)Raytracing-Engine

Anwendungen, Tools, Userlibs und anderes nützliches.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Spirit
Beiträge: 174
Registriert: 13.04.2005 19:09

Beitrag von Spirit »

Benutzeravatar
Creature
Beiträge: 678
Registriert: 29.08.2004 00:55
Wohnort: Frankfurt/Main

Beitrag von Creature »

ein torus in glbasic ( mit opengl als api)... sollte sich nicht allzuschwer nach PB konvertieren lassen

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
[/code]
Bildung kommt von Bildschirm und nicht von Buch, sonst hieße es ja Buchung.
Benutzeravatar
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

Beitrag von NicTheQuick »

@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:
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> 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?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
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

Beitrag von NicTheQuick »

Ja, okay, Polynome sind mir momentan noch zu hoch. <)
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?
Scripte gibt es noch keine, aber das ist ja einfach im Gegensatz zum Rest.

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()
Benutzeravatar
Creature
Beiträge: 678
Registriert: 29.08.2004 00:55
Wohnort: Frankfurt/Main

Beitrag von Creature »

Kaeru Gaman hat geschrieben: @screenshot
verd... das sieht ja schweinegeil aus...
dem schließe ich mich an, gute arbeit, fettes kompliment :allright:
Bildung kommt von Bildschirm und nicht von Buch, sonst hieße es ja Buchung.
Benutzeravatar
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

Beitrag von NicTheQuick »

Ich hatte gerade Lust ein paar Screenies zu machen.

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

Bild

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

Bild

Das selbe nochmal mit Verspiegelungen
Bild

Und wieder, aber mit grauen Kugeln
Bild

Diesesmal 100 Kugeln und eine graue verspiegelte Ebene im
Hintergrund

Bild
Benutzeravatar
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:

Beitrag von Falko »

Hi NTQ, wenn ich die schönen Bilder sehe, fällt mir gleich wieder die
ID zur CNC-Simulation ein :allright:

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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
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

Beitrag von NicTheQuick »

@Falko:
Die Lib ist ja auch noch für PB V3.94. Eine neue Library gibt es bisher noch
nicht, weil noch zu viele Bugs enthalten sind, vor allem, was die
Berechnungen angeht.

Also musst du leider noch eine Weile warten. :|
Antworten