Powerbasic Museum 2020-B

IT-Consultant: Patrice Terrier => GDImage => The Cube => Topic started by: Patrice Terrier on June 21, 2009, 05:42:14 PM

Title: The Cube
Post by: Patrice Terrier on June 21, 2009, 05:42:14 PM
The Cube

The purpose of this GDImage 5.06+ project, is to provide an easy (and reliable) way to perform face detection on a 3D rotating cube, using the mouse to pickup a specific picture.

While "Picking" is the usual way of doing things in 3D's world. I have taken another approach because what i wanted to do was to select a specific face of the cube, and not the whole cube itself.

"Picking" is based on the depth detection of an object, but In the case of a rotating cube it could not be used, because very often two or three faces are just in front of the camera, meaning each of the face is exactly at the same distance from the camera.

The solution i have used to solve this problem is named "color detection" mode.
When i am in HitDetection mode, instead of mapping the textures on each face of the cube i am using a unique color for each of the face. Then i just have to check the color of the pixel located at the mouse coordinates to figure the real face that has been selected.

SUB DrawCube (BYVAL HitDetection AS LONG)
    IF HitDetection THEN CALL glColor4ub(0,0,1,255)
    CALL GL_DrawCubeFrontFace(mt(1).Texture)

    IF HitDetection THEN CALL glColor4ub(0,0,2,255)
    CALL GL_DrawCubeBackFace(mt(2).Texture)

    IF HitDetection THEN CALL glColor4ub(0,0,3,255)
    CALL GL_DrawCubeTopFace(mt(3).Texture)

    IF HitDetection THEN CALL glColor4ub(0,0,4,255)
    CALL GL_DrawCubeBottomFace(mt(4).Texture)

    IF HitDetection THEN CALL glColor4ub(0,0,5,255)
    CALL GL_DrawCubeRightFace(mt(5).Texture)

    IF HitDetection THEN CALL glColor4ub(0,0,6,255)
    CALL GL_DrawCubeLeftFace(mt(6).Texture)
END SUB


Screen shot:

(http://www.zapsolution.com/pictures/TheCube.jpg)


How to use "The Cube":


Suggestion:
This project could be a good candidate to create a true VISTA's widget to change the desktop wallpaper.


Note:
Because of the use of 3D, you must have a graphic card that is OpenGL 2.00+ compatible.
Title: Re: The Cube
Post by: Petr Schreiber on June 21, 2009, 09:07:50 PM
Very nice demo, very playful way to change the background bitmap.

It was also wise choice to make the picking color based, only problem could occur in 16 bit mode, but I guess nobody uses this setup any longer. Color picking is quite common in pro computer games.






Title: Re: The Cube
Post by: Patrice Terrier on June 21, 2009, 11:07:37 PM
Thank you Petr.

Note: I have written also a (standard) "picking" mode version, if interrested let me know, then i shall post the code here.

...
Title: The Cube (New CLONE version)
Post by: Patrice Terrier on June 23, 2009, 06:53:48 PM
The Cube project has been reworked a little...

I have added two more cubes (they are just clone from the main cube), you can move them around, however the image selection must still be done with the big one.

Clone is a very unique and powerful feature of GDImage, only two lines of code added to the GDImageCreateSprite procedure:


'   // For the fun we add two clones
   CALL ZD_CloneObject(%IDS_3DOBJECT, %IDS_CLONE2, rc.nRight - %GL_SizeX, 0): ZD_SetObjectScale(%IDS_CLONE2, 0.5): ZD_SetObjectAnchorMode(%IDS_CLONE2, %ANCHOR_CENTER)
   CALL ZD_CloneObject(%IDS_3DOBJECT, %IDS_CLONE1, 0, 0): ZD_SetObjectAnchorMode(%IDS_CLONE1, %ANCHOR_CENTER)



Screen shot of the WinDev's version, however new PB's version looks the same.

(http://www.zapsolution.com/windev/TheCubeWD12.jpg)


The new zip file is attached to the first post of this thread.
Title: Re: The Cube
Post by: Patrice Terrier on August 08, 2011, 06:37:04 PM
The first post of this thread has been updated, to fix the ZIP file corruption caused by the "Server Collapse".

...