# GLBasic Benutzerhandbuch

## X_COLLISIONSPHEREBOX

### X_COLLISIONSPHEREBOX cx#,cy#,cz#,R#, bx#,by#,bz#

Dieser Befehl prüft, ob ein Quader (AABB = Axis Aligned Bounding Box) mit den Abmessungen bx#, by#, bz# nach der Transformation der aktuellen Matrix (X_MOVEMENT, X_ROTATION, X_MULTMATRIX) mit einer Kugel (Mittelpunkt=cx#,cy#,cz#, Radius=R#) kollidiert.

`// X_COLLISIONSPHERE Examplecube = 0sphere=1CreateCube(cube, 3, RGB(255,255,0))CreateSphere(sphere, 2, 8, RGB(0,255,0))// Sphere: x,y,z (R=2)x = 2y = 2z = -2WHILE TRUE    INC phi, .5    X_MAKE3D 1,100,45    X_CAMERA -5,3,20, 0,0,0    X_MOVEMENT -1,-1,-2    X_ROTATION phi, 0,1,0    X_DRAWOBJ cube, 0    // R=2, BX,BY,BZ=3    col = X_COLLISIONSPHEREBOX(x,y,z,2, 3,3,3)        X_MOVEMENT x,y,z    X_DRAWOBJ sphere,0    X_MAKE2D    PRINT col, 0,0    SHOWSCREENWEND// ------------------------------------------------------------- //// -=# SPHERE #=-// ------------------------------------------------------------- //FUNCTION CreateSphere: num, r, n, colLOCAL i,j, theta1, theta2, theta3, pi    pi = ACOS(0)*2    IF r < 0 THEN r = -r    IF n < 4 THEN n = 4    X_AUTONORMALS 2 // smooth edges    X_OBJSTART num    FOR j=0 TO INTEGER(n/2) -1        theta1 = j * 2*pi / n - pi/2;        theta2 = (j + 1) * 2*pi / n - pi/2;        FOR i=0 TO n            theta3 = i * 2*pi / n;            X_OBJADDVERTEX    r*COS(theta2) * COS(theta3), r*SIN(theta2), _                            r*COS(theta2) * SIN(theta3), i/n, 2*(j+1)/n, col            X_OBJADDVERTEX    r*COS(theta1) * COS(theta3), r*SIN(theta1), _                            r*COS(theta1) * SIN(theta3), i/n, 2*j/n, col        NEXT        X_OBJNEWGROUP    NEXT    X_OBJENDENDFUNCTION // n// ------------------------------------------------------------- //// -=# CREATECUBE #=-// ------------------------------------------------------------- //FUNCTION CreateCube: num, sz, col    // Diese Variablen sind als LOCAL definiert:    // num, sz,    X_AUTONORMALS 1 // For a cube, hard edges    sz=sz/2    X_OBJSTART num        // Front Face        X_OBJADDVERTEX sz, -sz, sz, 1, 0, col        X_OBJADDVERTEX -sz, -sz, sz, 0, 0, col        X_OBJADDVERTEX sz, sz, sz, 1, 1, col        X_OBJADDVERTEX -sz, sz, sz, 0, 1, col        X_OBJNEWGROUP        // Back Face        X_OBJADDVERTEX -sz, sz, -sz, 1, 1, col        X_OBJADDVERTEX -sz, -sz, -sz, 1, 0, col        X_OBJADDVERTEX sz, sz, -sz, 0, 1, col        X_OBJADDVERTEX sz, -sz, -sz, 0, 0, col        X_OBJNEWGROUP        // Top Face        X_OBJADDVERTEX -sz, sz, sz, 0, 0, col        X_OBJADDVERTEX -sz, sz, -sz, 0, 1, col        X_OBJADDVERTEX sz, sz, sz, 1, 0, col        X_OBJADDVERTEX sz, sz, -sz, 1, 1, col        X_OBJNEWGROUP        // Bottom Face        X_OBJADDVERTEX sz, -sz, -sz, 0, 1, col        X_OBJADDVERTEX -sz, -sz, -sz, 1, 1, col        X_OBJADDVERTEX sz, -sz, sz, 0, 0, col        X_OBJADDVERTEX -sz, -sz, sz, 1, 0, col        X_OBJNEWGROUP        // Right face        X_OBJADDVERTEX sz, sz, -sz, 1, 1, col        X_OBJADDVERTEX sz, -sz, -sz, 1, 0, col        X_OBJADDVERTEX sz, sz, sz, 0, 1, col        X_OBJADDVERTEX sz, -sz, sz, 0, 0, col        X_OBJNEWGROUP        // Left Face        X_OBJADDVERTEX -sz, -sz, sz, 1, 0, col        X_OBJADDVERTEX -sz, -sz, -sz, 0, 0, col        X_OBJADDVERTEX -sz, sz, sz, 1, 1, col        X_OBJADDVERTEX -sz, sz, -sz, 0, 1, col        X_OBJNEWGROUP    X_OBJENDENDFUNCTION // sz`