GLBasic Benutzerhandbuch

Main sections

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 Example
cube = 0
sphere=1
CreateCube(cube, 3, RGB(255,255,0))
CreateSphere(sphere, 2, 8, RGB(0,255,0))

// Sphere: x,y,z (R=2)
x = 2
y = 2
z = -2
WHILE 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
    SHOWSCREEN
WEND



// ------------------------------------------------------------- //
// -=# SPHERE #=-
// ------------------------------------------------------------- //
FUNCTION CreateSphere: num, r, n, col
LOCAL 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_OBJEND
ENDFUNCTION // 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_OBJEND

ENDFUNCTION // sz

See also...