346
Off Topic / Re: Raspberry Pi
« on: 2012-Feb-29 »
TBH why spoil a funky piece of hardware by infecting it with a Microsoft product
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Thats fun. I flippin love it.
Couple of things I thought of. Try drawing the screen with ALPHAMODE 1.0 to see if you like the effect better than the default mode. I wonder if you might also get a performance boost by replacing the DRAWRECT command with a series of POLYVECTOR sprites.


// --------------------------------- //
// Project: dotobject
// Start: Wednesday, February 29, 2012
// IDE Version: 10.244
// FREE-VERSION:
// Need Premium for Features:
// 3D Graphics
// Network Commands
// INLINE C/C+++ code
// SETCURRENTDIR("Media") // go to media files
GLOBAL dobj[] AS dotobject, scx, scy, alphaloop, alphastep, ikey$
GETSCREENSIZE scx, scy
TYPE point
x
y
z
ENDTYPE
TYPE dotobject
xrot
yrot
zrot
objectpoints[] AS point
FUNCTION createball: pointcount
LOCAL theta, phi, loop
DIM self.objectpoints[pointcount]
FOREACH loop IN self.objectpoints[]
theta = RND (180)-90
phi = RND (359)
loop.x = (COS(theta) * 10) * (COS(phi) * 10)
loop.y = (COS(theta) * 10) * (SIN(phi) * 10)
loop.z = SIN(theta) * 100
NEXT
ENDFUNCTION
FUNCTION createcube: pointcount
LOCAL loop, across, down, side
DIM self.objectpoints[pointcount]
FOREACH loop IN self.objectpoints[]
side = RND (5)
across = RND (120)
down = RND (120)
SELECT side
CASE 0 // Front face
loop.x = across-60
loop.y = down-60
loop.z = 60
CASE 1 // Back face
loop.x = across-60
loop.y = down-60
loop.z = -60
CASE 2 // Left face
loop.x = -60
loop.y = down-60
loop.z = across-60
CASE 3 // Right face
loop.x = 60
loop.y = down-60
loop.z = across-60
CASE 4 // Top face
loop.x = across-60
loop.y = 60
loop.z = down-60
CASE 5 // Bottom Face
loop.x = across-60
loop.y = -60
loop.z = down-60
ENDSELECT
NEXT
ENDFUNCTION
FUNCTION drawobject: sx,sy,sz,posx=scx/2,posy=scy/2,scale=1
LOCAL tmpx, tmpy, tmpz, px, loop, persp, x%, y%, colour%
persp = 400
FOREACH loop IN self.objectpoints[]
tmpy = ((loop.y * COS(self.xrot)) - (loop.z * SIN(self.xrot)))
tmpz = ((loop.y * SIN(self.xrot)) + (loop.z * COS(self.xrot)))
tmpx = ((loop.x * COS(self.yrot)) - (tmpz * SIN(self.yrot)))
tmpz = ((loop.x * SIN(self.yrot)) + (tmpz * COS(self.yrot)))
px = tmpx
tmpx = ((tmpx * COS(self.zrot)) - (tmpy * SIN(self.zrot)))
tmpy = ((px * SIN(self.zrot)) + (tmpy * COS(self.zrot)))
x = ((scale*512) * (tmpx) / (persp - (tmpz))) + (posx)
y = (posy) - ((scale*512) * tmpy) / (persp - (tmpz))
colour = (tmpz+100) * 1.2
DRAWRECT x,y,2,2,RGB(colour,colour,colour)
NEXT
INC self.xrot , sx
INC self.yrot , sy
INC self.zrot , sz
ENDFUNCTION
FUNCTION killobject:
DIM self.objectpoints[0]
ENDFUNCTION
ENDTYPE
REDIM dobj[2]
dobj[0].createball(1000)
dobj[1].createcube(500)
alphaloop = -1
alphastep = 0.01
WHILE TRUE
ALPHAMODE alphaloop
dobj[0].drawobject(1,0.75,0.5,400,400,.25)
dobj[1].drawobject(0.5,0.75,1,250,150,1)
SHOWSCREEN
ikey$=INKEY$()
IF ikey$ = "0" THEN dobj[0].killobject()
IF ikey$ = "1" THEN dobj[1].killobject()
IF alphaloop > 1.0 THEN alphastep = -0.01
IF alphaloop < -1.0 THEN alphastep = 0.01
INC alphaloop, alphastep
WEND


// --------------------------------- //
// Project: dotball
// Start: Tuesday, February 28, 2012
// IDE Version: 10.244
// FREE-VERSION:
// Need Premium for Features:
// 3D Graphics
// Network Commands
// INLINE C/C+++ code
// SETCURRENTDIR("Media") // go to media files
GLOBAL DB AS dotball, DC AS dotcube, scx, scy
GETSCREENSIZE scx, scy
TYPE point
x
y
z
ENDTYPE
TYPE dotball
xrot
yrot
zrot
ballpoints[] AS point
FUNCTION createball: pointcount
LOCAL theta, phi, loop
DIM self.ballpoints[pointcount]
FOREACH loop IN self.ballpoints[]
theta = RND (180)-90
phi = RND (359)
loop.x = (COS(theta) * 10) * (COS(phi) * 10)
loop.y = (COS(theta) * 10) * (SIN(phi) * 10)
loop.z = SIN(theta) * 100
NEXT
ENDFUNCTION
FUNCTION drawball: sx,sy,sz,posx=scx/2,posy=scy/2,scale=1
LOCAL tmpx, tmpy, tmpz, px, loop, persp, x%, y%, colour%
persp = 400
FOREACH loop IN self.ballpoints[]
tmpy = ((loop.y * COS(self.xrot)) - (loop.z * SIN(self.xrot)))
tmpz = ((loop.y * SIN(self.xrot)) + (loop.z * COS(self.xrot)))
tmpx = ((loop.x * COS(self.yrot)) - (tmpz * SIN(self.yrot)))
tmpz = ((loop.x * SIN(self.yrot)) + (tmpz * COS(self.yrot)))
px = tmpx
tmpx = ((tmpx * COS(self.zrot)) - (tmpy * SIN(self.zrot)))
tmpy = ((px * SIN(self.zrot)) + (tmpy * COS(self.zrot)))
x = ((scale*512) * (tmpx) / (persp - (tmpz))) + (posx)
y = (posy) - ((scale*512) * tmpy) / (persp - (tmpz))
colour = (tmpz+100) * 1.2
DRAWRECT x,y,2,2,RGB(colour,colour,colour)
NEXT
INC self.xrot , sx
INC self.yrot , sy
INC self.zrot , sz
ENDFUNCTION
ENDTYPE
TYPE dotcube
xrot
yrot
zrot
cubepoints[] AS point
FUNCTION createcube: pointcount
LOCAL loop, across, down, side
DIM self.cubepoints[pointcount]
FOREACH loop IN self.cubepoints[]
side = RND (5)
across = RND (120)
down = RND (120)
SELECT side
CASE 0 // Front face
loop.x = across-60
loop.y = down-60
loop.z = 60
CASE 1 // Back face
loop.x = across-60
loop.y = down-60
loop.z = -60
CASE 2 // Left face
loop.x = -60
loop.y = down-60
loop.z = across-60
CASE 3 // Right face
loop.x = 60
loop.y = down-60
loop.z = across-60
CASE 4 // Top face
loop.x = across-60
loop.y = 60
loop.z = down-60
CASE 5 // Bottom Face
loop.x = across-60
loop.y = -60
loop.z = down-60
ENDSELECT
NEXT
ENDFUNCTION
FUNCTION drawcube: sx,sy,sz,posx=scx/2,posy=scy/2,scale=1
LOCAL tmpx, tmpy, tmpz, px, loop, persp, x%, y%, colour%
persp = 400
FOREACH loop IN self.cubepoints[]
tmpy = ((loop.y * COS(self.xrot)) - (loop.z * SIN(self.xrot)))
tmpz = ((loop.y * SIN(self.xrot)) + (loop.z * COS(self.xrot)))
tmpx = ((loop.x * COS(self.yrot)) - (tmpz * SIN(self.yrot)))
tmpz = ((loop.x * SIN(self.yrot)) + (tmpz * COS(self.yrot)))
px = tmpx
tmpx = ((tmpx * COS(self.zrot)) - (tmpy * SIN(self.zrot)))
tmpy = ((px * SIN(self.zrot)) + (tmpy * COS(self.zrot)))
x = ((scale*512) * (tmpx) / (persp - (tmpz))) + (posx)
y = (posy) - ((scale*512) * tmpy) / (persp - (tmpz))
colour = (tmpz+100) * 1.2
DRAWRECT x,y,2,2,RGB(colour,colour,colour)
NEXT
INC self.xrot , sx
INC self.yrot , sy
INC self.zrot , sz
ENDFUNCTION
ENDTYPE
DC.createcube(1000)
DB.createball(1000)
WHILE TRUE
DC.drawcube(0.5,0.75,1,250,150,1)
DB.drawball(1,0.75,0.5,400,400,0.5)
SHOWSCREEN
WEND
// --------------------------------- //
// Project: dotball
// Start: Tuesday, February 28, 2012
// IDE Version: 10.244
// FREE-VERSION:
// Need Premium for Features:
// 3D Graphics
// Network Commands
// INLINE C/C+++ code
// SETCURRENTDIR("Media") // go to media files
GLOBAL DB AS dotball, scx, scy
GETSCREENSIZE scx, scy
TYPE point
x
y
z
ENDTYPE
TYPE dotball
xrot
yrot
zrot
ballpoints[] AS point
FUNCTION createball: pointcount
LOCAL theta, phi, loop
DIM self.ballpoints[pointcount]
FOREACH loop IN self.ballpoints[]
theta = RND (180)-90
phi = RND (359)
loop.x = (COS(theta) * 10) * (COS(phi) * 10)
loop.y = (COS(theta) * 10) * (SIN(phi) * 10)
loop.z = SIN(theta) * 100
NEXT
ENDFUNCTION
FUNCTION drawball: sx,sy,sz,posx=scx/2,posy=scy/2
LOCAL tmpx, tmpy, tmpz, px, loop, persp, x%, y%, colour%
persp = 400
FOREACH loop IN self.ballpoints[]
tmpy = ((loop.y * COS(self.xrot)) - (loop.z * SIN(self.xrot)))
tmpz = ((loop.y * SIN(self.xrot)) + (loop.z * COS(self.xrot)))
tmpx = ((loop.x * COS(self.yrot)) - (tmpz * SIN(self.yrot)))
tmpz = ((loop.x * SIN(self.yrot)) + (tmpz * COS(self.yrot)))
px = tmpx
tmpx = ((tmpx * COS(self.zrot)) - (tmpy * SIN(self.zrot)))
tmpy = ((px * SIN(self.zrot)) + (tmpy * COS(self.zrot)))
x = (512 * (tmpx) / (persp - (tmpz))) + (posx)
y = (posy) - (512 * tmpy) / (persp - (tmpz))
colour = tmpz + 155
DRAWRECT x,y,2,2,RGB(colour,colour,colour)
NEXT
INC self.xrot , sx
INC self.yrot , sy
INC self.zrot , sz
ENDFUNCTION
ENDTYPE
DB.createball(500)
WHILE TRUE
DB.drawball(1,0.75,0.5,200,200)
SHOWSCREEN
WEND

// --------------------------------- //
// Project: dotball
// Start: Tuesday, February 28, 2012
// IDE Version: 10.244
// FREE-VERSION:
// Need Premium for Features:
// 3D Graphics
// Network Commands
// INLINE C/C+++ code
// SETCURRENTDIR("Media") // go to media files
GLOBAL DB AS dotball, scx, scy
GETSCREENSIZE scx, scy
TYPE point
x
y
z
ENDTYPE
TYPE dotball
xrot
yrot
zrot
ballpoints[] AS point
FUNCTION createball: pointcount
LOCAL theta, phi, loop
DIM self.ballpoints[pointcount]
FOREACH loop IN self.ballpoints[]
theta = RND (180)-90
phi = RND (359)
loop.x = (COS(theta) * 10) * (COS(phi) * 10)
loop.y = (COS(theta) * 10) * (SIN(phi) * 10)
loop.z = SIN(theta) * 100
NEXT
ENDFUNCTION
FUNCTION drawball: sx,sy,sz
LOCAL tmpx, tmpy, tmpz, px, loop, persp, x%, y%, colour%
persp = 400
FOREACH loop IN self.ballpoints[]
tmpy = ((loop.y * COS(self.xrot)) - (loop.z * SIN(self.xrot)))
tmpz = ((loop.y * SIN(self.xrot)) + (loop.z * COS(self.xrot)))
tmpx = ((loop.x * COS(self.yrot)) - (tmpz * SIN(self.yrot)))
tmpz = ((loop.x * SIN(self.yrot)) + (tmpz * COS(self.yrot)))
px = tmpx
tmpx = ((tmpx * COS(self.zrot)) - (tmpy * SIN(self.zrot)))
tmpy = ((px * SIN(self.zrot)) + (tmpy * COS(self.zrot)))
x = (512 * (tmpx) / (persp - (tmpz))) + (scx/2)
y = (scy/2) - (512 * tmpy) / (persp - (tmpz))
colour = tmpz + 155
DRAWRECT x,y,2,2,RGB(colour,colour,colour)
NEXT
INC self.xrot , sx
INC self.yrot , sy
INC self.zrot , sz
ENDFUNCTION
ENDTYPE
DB.createball(500)
WHILE TRUE
DB.drawball(1,0.75,0.5)
SHOWSCREEN
WEND
I don't get it, why do you call it 'GLB Results', where everything you do in that last snippet is straight C?
Ocean

) but I will get there.I've uploaded a video of your spiral thingy code with added polyvectors and trailbacks. Click here to see it.




#include <stdio.h>
#include <time.h>
// put ordering functions here
//.....
const int g_n = 250;
float TestData[g_n][g_n][g_n];
inline void column_ordered()
{
for (int k=0; k<g_n; k++)
for (int j=0; j<g_n; j++)
for (int i=0; i<g_n; i++)
TestData[i][j][k] = 0.0f;
}
inline void row_ordered()
{
for (int i=0; i<g_n; i++)
for (int j=0; j<g_n; j++)
for (int k=0; k<g_n; k++)
TestData[i][j][k] = 0.0f;
}
inline clock_t GetTime() {
return clock();
}
int main()
{
float coltime;
float rowtime;
clock_t timeinit;
timeinit = GetTime();
column_ordered();
coltime = GetTime() - timeinit;
timeinit = GetTime();
row_ordered();
// clock_t
rowtime = GetTime() - timeinit;
printf("Columns time: %.3f tics\n", (double)coltime);
printf("Rows time: %.3f tics\n", (double)rowtime);
return 0;
}
const int g_n = 250;
float TestData[g_n][g_n][g_n];
inline void column_ordered()
{
for (int k=0; k<g_n; k++)
for (int j=0; j<g_n; j++)
for (int i=0; i<g_n; i++)
TestData[i][j][k] = 0.0f;
}
inline void row_ordered()
{
for (int i=0; i<g_n; i++)
for (int j=0; j<g_n; j++)
for (int k=0; k<g_n; k++)
TestData[i][j][k] = 0.0f;
}
In many languages row data are contiguous in memorybut as you can see mine were the opposite & column order was faster. How to convert the C++ into something I can compile & run in GCC or Visual C++ express that I have is beyond me at current as do not have that much knowledge of C++, just enough to pick some parts out
