11-18-2024, 05:07 PM
Hello!
It's not qb64, but it started from here. A few years ago, Forum member Bplus shared a raytracing code with us. I will paste this here. I really liked this and tried to find the points in the program where the camera view can be adjusted and a real-time 3d world can be walked around. I managed to do it here in qb64, but unfortunately the processing is slow and I stopped. For a few months, I have been studying the b4a developer, in which you can write for Android in the basic language.
I only want to show this now because it started with these few lines of code. If I didn't come across the code then, I might not have written this program either.
The program runs beautifully on an Android device, and you can perceive the depths in 3D with cheap VR glasses available for phones.
Thank you Bplus in retrospect!
APK (installer to android)
https://drive.google.com/file/d/15qqP9Y_...sp=sharing
It's not qb64, but it started from here. A few years ago, Forum member Bplus shared a raytracing code with us. I will paste this here. I really liked this and tried to find the points in the program where the camera view can be adjusted and a real-time 3d world can be walked around. I managed to do it here in qb64, but unfortunately the processing is slow and I stopped. For a few months, I have been studying the b4a developer, in which you can write for Android in the basic language.
I only want to show this now because it started with these few lines of code. If I didn't come across the code then, I might not have written this program either.
The program runs beautifully on an Android device, and you can perceive the depths in 3D with cheap VR glasses available for phones.
Thank you Bplus in retrospect!

Code: (Select All)
_TITLE "RayTrace" 'b+ trans from JB to QB64 2022-02-26 CONST scrw = 1024, scrh = 680 SCREEN _NEWIMAGE(scrw, scrh, 32) _SCREENMOVE 150, 40 READ spheres DIM c(spheres, 3), r(spheres), q(spheres), cl(4) AS _UNSIGNED LONG w = scrw / 2 h = scrh / 2 s = 0 cl(1) = _RGB32(120, 65, 45) ' shaddow cl(2) = _RGB32(0, 0, 100) cl(3) = _RGB32(255, 255, 0) cl(4) = _RGB32(0, 0, 200) FOR k = 1 TO spheres READ a, b, c, d c(k, 1) = a c(k, 2) = b c(k, 3) = c r = d r(k) = r q(k) = r * r NEXT k FOR i = 1 TO scrh FOR j = 0 TO scrw - 1 x = 0.3: y = -0.5: z = 0: ba = 3 dx = j - w: dy = h - i: dz = (scrh / 480) * 600 dd = dx * dx + dy * dy + dz * dz DO n = (y >= 0 OR dy <= 0) '* -1 <<< Makes $1000 for knowing where to tap the hammer IF n = 0 THEN s = (y / dy) * -1 FOR k = 1 TO spheres px = c(k, 1) - x: py = c(k, 2) - y: pz = c(k, 3) - z pp = px * px + py * py + pz * pz sc = px * dx + py * dy + pz * dz IF sc > 0 THEN bb = sc * sc / dd aa = q(k) - pp + bb IF aa > 0 THEN sc = (SQR(bb) - SQR(aa)) / SQR(dd) IF sc < s OR n < 0 THEN n = k: s = sc END IF END IF NEXT k IF n < 0 THEN PSET (j, scrh - i), _RGB32(128 * (scrh - i) / scrh + 128 * (dy * dy / dd), 128 * (scrh - i) / scrh + 128 * (dy * dy / dd), 200 + 55 * (dy * dy / dd)) EXIT DO ELSE dx = dx * s: dy = dy * s: dz = dz * s: dd = dd * s * s x = x + dx: y = y + dy: z = z + dz IF n <> 0 THEN nx = x - c(n, 1): ny = y - c(n, 2): nz = z - c(n, 3) nn = nx * nx + ny * ny + nz * nz l = 2 * (dx * nx + dy * ny + dz * nz) / nn dx = dx - nx * l: dy = dy - ny * l: dz = dz - nz * l ELSE FOR k = 1 TO spheres u = c(k, 1) - x v = c(k, 3) - z IF u * u + v * v <= q(k) THEN ba = 1: EXIT FOR NEXT k IF (x - INT(x) > .5) = (z - INT(z) > .5) THEN PSET (j, scrh - i), cl(ba) ELSE PSET (j, scrh - i), cl(ba + 1) END IF EXIT DO END IF END IF LOOP NEXT j NEXT i SLEEP DATA 6 DATA -0.3,-0.8,3,0.6 DATA 0.9,-1.4,3.5,0.35 DATA 0.7,-0.45,2.5,0.4 DATA -0.5,-0.3,1.5,0.15 DATA 1.0,-0.2,1.5,0.1 DATA -0.1,-0.2,1.25,0.2
APK (installer to android)
https://drive.google.com/file/d/15qqP9Y_...sp=sharing