{"id":4185,"date":"2012-04-25T00:00:37","date_gmt":"2012-04-24T22:00:37","guid":{"rendered":"http:\/\/blogs.wittwer.fr\/whiler\/?p=4185"},"modified":"2012-05-03T15:26:34","modified_gmt":"2012-05-03T13:26:34","slug":"wdices","status":"publish","type":"post","link":"https:\/\/blogs.wittwer.fr\/whiler\/2012\/04\/25\/wdices\/","title":{"rendered":"wDices"},"content":{"rendered":"<p>Afin de m&rsquo;entra\u00eener avec FireMonkey et la 3D, je me suis amus\u00e9 \u00e0 me cr\u00e9er ma propre petite application&#8230;<br \/>\nComme vous avez pu le voir, par exemple, dans l&rsquo;<a href=\"\/whiler\/2012\/04\/24\/rubiks-cube\/\" title=\"Rubik's Cude\">article pr\u00e9c\u00e9dent<\/a>, j&rsquo;avais d\u00e9j\u00e0 jou\u00e9 avec du code source d\u00e9velopp\u00e9 au d\u00e9part par d&rsquo;autres personnes.<\/p>\n<p>Cette <a href=\"https:\/\/www.whiler.com\/freewares\/#wDices\" title=\"Mes applications\" target=\"_blank\">application<\/a> ne sert pas \u00e0 grand chose&nbsp;: vous cliquez sur un gobelet&#8230; deux d\u00e9s en sortent&#8230; <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/wonder.gif\" alt=\":^)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p><center>\n<div class=\"youtube-embed\" itemprop=\"video\" itemscope itemtype=\"https:\/\/schema.org\/VideoObject\">\n\t<meta itemprop=\"url\" content=\"https:\/\/www.youtube.com\/v\/CJH5QTQYAIo\" \/>\n\t<meta itemprop=\"name\" content=\"wDices\" \/>\n\t<meta itemprop=\"description\" content=\"wDices\" \/>\n\t<meta itemprop=\"uploadDate\" content=\"2012-04-25T00:00:37+02:00\" \/>\n\t<meta itemprop=\"thumbnailUrl\" content=\"https:\/\/i.ytimg.com\/vi\/CJH5QTQYAIo\/default.jpg\" \/>\n\t<meta itemprop=\"embedUrl\" content=\"https:\/\/www.youtube.com\/embed\/CJH5QTQYAIo\" \/>\n\t<meta itemprop=\"height\" content=\"340\" \/>\n\t<meta itemprop=\"width\" content=\"560\" \/>\n\t<iframe loading=\"lazy\" style=\"border: 0;\" class=\"youtube-player\" width=\"560\" height=\"340\" src=\"https:\/\/www.youtube.com\/embed\/CJH5QTQYAIo\" allowfullscreen><\/iframe>\n<\/div>\n<\/center><\/p>\n<p>&nbsp;<br \/>\nPar contre, si vous d\u00e9veloppez en Delphi, vous pourrez regarder le code source publi\u00e9 ci-dessous&#8230; <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/wink.gif\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p><!--more--><\/p>\n<p>Pour r\u00e9aliser cette application, j&rsquo;ai commenc\u00e9 par cr\u00e9er une application FireMonkey 3D, \u00e0 laquelle j&rsquo;ai ajout\u00e9 une nouvelle unit\u00e9 pour faire le d\u00e9. Voici le code de cette unit\u00e9&nbsp;:<\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<br \/>101<br \/>102<br \/>103<br \/>104<br \/>105<br \/>106<br \/>107<br \/>108<br \/>109<br \/>110<br \/>111<br \/>112<br \/>113<br \/>114<br \/>115<br \/>116<br \/>117<br \/>118<br \/>119<br \/>120<br \/>121<br \/>122<br \/>123<br \/>124<br \/>125<br \/>126<br \/>127<br \/>128<br \/>129<br \/>130<br \/>131<br \/>132<br \/>133<br \/>134<br \/>135<br \/>136<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">unit<\/span> uDice<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">interface<\/span><br \/>\n<br \/>\n<span class=\"kw1\">uses<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Classes<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Types<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Types3D<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Objects3D<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">UITypes<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Effects<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Ani<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Forms<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Types<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$REGION 'Points on each side'}<\/span><br \/>\n<span class=\"kw1\">const<\/span><br \/>\n&nbsp; POINTS<span class=\"sy1\">:<\/span> <span class=\"kw1\">array<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"sy1\">..<\/span><span class=\"nu0\">21<\/span><span class=\"br0\">&#93;<\/span> <span class=\"kw1\">of<\/span> <span class=\"kw1\">array<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"sy1\">..<\/span><span class=\"nu0\">6<\/span><span class=\"br0\">&#93;<\/span> <span class=\"kw1\">of<\/span> <span class=\"kw4\">Single<\/span> <span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ ONE<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.50001<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ TWO<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">90<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"sy3\">-<\/span><span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">90<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ THREE<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">90<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">90<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">90<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ FOUR<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"sy3\">-<\/span><span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.2<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.2<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">90<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"sy3\">-<\/span><span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.2<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.2<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">90<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"sy3\">-<\/span><span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.2<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.2<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">90<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"sy3\">-<\/span><span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.2<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.2<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">90<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ FIVE<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"sy3\">-<\/span><span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">90<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"sy3\">-<\/span><span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">90<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">90<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">90<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.5001<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">90<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ SIX<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"sy3\">-<\/span><span class=\"nu0\">0.16667<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.50001<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">180<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"sy3\">-<\/span><span class=\"nu0\">0.16667<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.50001<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">180<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"sy3\">-<\/span><span class=\"nu0\">0.16667<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.50001<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">180<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0.16667<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.50001<\/span><span class=\"sy1\">,<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">180<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0.16667<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.50001<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">180<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0.16667<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.50001<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0.25<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">180<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDREGION}<\/span><br \/>\n<br \/>\n<span class=\"kw1\">type<\/span><br \/>\n&nbsp; TDice <span class=\"sy3\">=<\/span> <span class=\"kw1\">class<\/span><span class=\"br0\">&#40;<\/span>TRoundCube<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; <span class=\"kw1\">private<\/span><br \/>\n&nbsp; &nbsp; bRotate<span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; pOrigin<span class=\"sy1\">:<\/span> TPointF<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> DiceMouseDown<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"sy1\">;<\/span> Button<span class=\"sy1\">:<\/span> TMouseButton<span class=\"sy1\">;<\/span> Shift<span class=\"sy1\">:<\/span> TShiftState<span class=\"sy1\">;<\/span> X<span class=\"sy1\">,<\/span> Y<span class=\"sy1\">:<\/span> <span class=\"kw4\">Single<\/span><span class=\"sy1\">;<\/span> RayPos<span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; RayDir<span class=\"sy1\">:<\/span> TVector3D<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> DiceMouseMove<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"sy1\">;<\/span> Shift<span class=\"sy1\">:<\/span> TShiftState<span class=\"sy1\">;<\/span> X<span class=\"sy1\">,<\/span> Y<span class=\"sy1\">:<\/span> <span class=\"kw4\">Single<\/span><span class=\"sy1\">;<\/span> RayPos<span class=\"sy1\">,<\/span> RayDir<span class=\"sy1\">:<\/span> TVector3D<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> DiceMouseUp<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"sy1\">;<\/span> Button<span class=\"sy1\">:<\/span> TMouseButton<span class=\"sy1\">;<\/span> Shift<span class=\"sy1\">:<\/span> TShiftState<span class=\"sy1\">;<\/span> X<span class=\"sy1\">,<\/span> Y<span class=\"sy1\">:<\/span> <span class=\"kw4\">Single<\/span><span class=\"sy1\">;<\/span> RayPos<span class=\"sy1\">,<\/span> RayDir<span class=\"sy1\">:<\/span> TVector3D<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> DiceMouseLeave<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> DiceMouseEnter<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">public<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">constructor<\/span> Create<span class=\"br0\">&#40;<\/span>AOwner<span class=\"sy1\">:<\/span> TForm3D<span class=\"sy1\">;<\/span> size<span class=\"sy1\">,<\/span> X<span class=\"sy1\">,<\/span> Y<span class=\"sy1\">,<\/span> Z<span class=\"sy1\">:<\/span> <span class=\"kw4\">Single<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span> reintroduce<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">implementation<\/span><br \/>\n<br \/>\n<span class=\"coMULTI\">{ TDice }<\/span><br \/>\n<br \/>\n<span class=\"kw1\">constructor<\/span> TDice<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"br0\">&#40;<\/span>AOwner<span class=\"sy1\">:<\/span> TForm3D<span class=\"sy1\">;<\/span> size<span class=\"sy1\">,<\/span> X<span class=\"sy1\">,<\/span> Y<span class=\"sy1\">,<\/span> Z<span class=\"sy1\">:<\/span> <span class=\"kw4\">Single<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; iPoints <span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"kw1\">inherited<\/span> Create<span class=\"br0\">&#40;<\/span>AOwner<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Parent<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> AOwner<span class=\"sy1\">;<\/span><br \/>\n&nbsp; bRotate &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">False<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">OnMouseDown<\/span> &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> DiceMouseDown<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">OnMouseMove<\/span> &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> DiceMouseMove<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">OnMouseUp<\/span> &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> DiceMouseUp<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">OnMouseEnter<\/span> &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> DiceMouseEnter<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">OnMouseLeave<\/span> &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> DiceMouseLeave<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"co1\">\/\/ Main shape<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> size<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> size<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Depth<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> size<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Position<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Point<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> Point3D<span class=\"br0\">&#40;<\/span>X<span class=\"sy1\">,<\/span> Y<span class=\"sy1\">,<\/span> Z<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; Material<span class=\"sy1\">.<\/span><span class=\"me1\">Ambient<\/span> &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> claSilver<span class=\"sy1\">;<\/span><br \/>\n&nbsp; Material<span class=\"sy1\">.<\/span><span class=\"me1\">Emissive<\/span> &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> claSilver<span class=\"sy1\">;<\/span><br \/>\n&nbsp; Material<span class=\"sy1\">.<\/span><span class=\"me1\">Specular<\/span> &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> claSilver<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"co1\">\/\/ Dots on each side<\/span><br \/>\n&nbsp; <span class=\"kw1\">for<\/span> iPoints <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Low<\/span><span class=\"br0\">&#40;<\/span>POINTS<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">to<\/span> <span class=\"kw3\">High<\/span><span class=\"br0\">&#40;<\/span>POINTS<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">do<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">with<\/span> TDisk<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">Self<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">do<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Parent &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">Self<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Width &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> size <span class=\"sy3\">\/<\/span> <span class=\"nu0\">5<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">0.001<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Depth &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> Width<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; HitTest &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">False<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Position<span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> POINTS<span class=\"br0\">&#91;<\/span>iPoints<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy3\">*<\/span> size<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Position<span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> POINTS<span class=\"br0\">&#91;<\/span>iPoints<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy3\">*<\/span> size<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Position<span class=\"sy1\">.<\/span><span class=\"me1\">Z<\/span> &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> POINTS<span class=\"br0\">&#91;<\/span>iPoints<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">3<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy3\">*<\/span> size<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; RotationAngle<span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> POINTS<span class=\"br0\">&#91;<\/span>iPoints<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; RotationAngle<span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> POINTS<span class=\"br0\">&#91;<\/span>iPoints<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">5<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; RotationAngle<span class=\"sy1\">.<\/span><span class=\"me1\">Z<\/span> &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> POINTS<span class=\"br0\">&#91;<\/span>iPoints<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">6<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Material<span class=\"sy1\">.<\/span><span class=\"me1\">Diffuse<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> claDarkslategray<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$REGION 'Dice mouse rotation'}<\/span><br \/>\n<span class=\"kw1\">procedure<\/span> TDice<span class=\"sy1\">.<\/span><span class=\"me1\">DiceMouseDown<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"sy1\">;<\/span> Button<span class=\"sy1\">:<\/span> TMouseButton<span class=\"sy1\">;<\/span> Shift<span class=\"sy1\">:<\/span> TShiftState<span class=\"sy1\">;<\/span> X<span class=\"sy1\">,<\/span> Y<span class=\"sy1\">:<\/span> <span class=\"kw4\">Single<\/span><span class=\"sy1\">;<\/span> RayPos<span class=\"sy1\">,<\/span> RayDir<span class=\"sy1\">:<\/span> TVector3D<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; bRotate <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; pOrigin <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> PointF<span class=\"br0\">&#40;<\/span>X<span class=\"sy1\">,<\/span> Y<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TDice<span class=\"sy1\">.<\/span><span class=\"me1\">DiceMouseEnter<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; bRotate <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">False<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TDice<span class=\"sy1\">.<\/span><span class=\"me1\">DiceMouseLeave<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; bRotate <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">False<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TDice<span class=\"sy1\">.<\/span><span class=\"me1\">DiceMouseMove<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"sy1\">;<\/span> Shift<span class=\"sy1\">:<\/span> TShiftState<span class=\"sy1\">;<\/span> X<span class=\"sy1\">,<\/span> Y<span class=\"sy1\">:<\/span> <span class=\"kw4\">Single<\/span><span class=\"sy1\">;<\/span> RayPos<span class=\"sy1\">,<\/span> RayDir<span class=\"sy1\">:<\/span> TVector3D<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> bRotate <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">RotationAngle<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">RotationAngle<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> <span class=\"sy3\">+<\/span> <span class=\"br0\">&#40;<\/span>X <span class=\"sy3\">-<\/span> pOrigin<span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">RotationAngle<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">RotationAngle<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> <span class=\"sy3\">+<\/span> <span class=\"br0\">&#40;<\/span>Y <span class=\"sy3\">-<\/span> pOrigin<span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; pOrigin <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> PointF<span class=\"br0\">&#40;<\/span>X<span class=\"sy1\">,<\/span> Y<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TDice<span class=\"sy1\">.<\/span><span class=\"me1\">DiceMouseUp<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"sy1\">;<\/span> Button<span class=\"sy1\">:<\/span> TMouseButton<span class=\"sy1\">;<\/span> Shift<span class=\"sy1\">:<\/span> TShiftState<span class=\"sy1\">;<\/span> X<span class=\"sy1\">,<\/span> Y<span class=\"sy1\">:<\/span> <span class=\"kw4\">Single<\/span><span class=\"sy1\">;<\/span> RayPos<span class=\"sy1\">,<\/span> RayDir<span class=\"sy1\">:<\/span> TVector3D<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; bRotate <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">False<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDREGION}<\/span><br \/>\n<br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">.<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>&nbsp;<br \/>\nEnsuite, je me suis content\u00e9 de l&rsquo;instancier deux fois depuis ma fiche, d&rsquo;y ajouter des effets, &#8230; <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/tmi.gif\" alt=\"(tmi)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/>  Vous pouvez t\u00e9l\u00e9charger une archive du projet depuis <a href=\"https:\/\/www.whiler.com\/freewares\/download?dices.zip\" title=\"T\u00e9l\u00e9charger une archive contenant les sources\">ce lien<\/a>. <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/smile.gif\" alt=\":)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p>&nbsp;<br \/>\nL&rsquo;application ainsi d\u00e9velopp\u00e9e est bien s\u00fbr aussi bien disponible pour PC que pour Mac&nbsp;:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.whiler.com\/freewares\/download?wdices.exe\" title=\"T\u00e9l\u00e9charger la version Windows de wDices\">Windows<\/a><\/li>\n<li><a href=\"https:\/\/www.whiler.com\/freewares\/download?wdices.zip\" title=\"T\u00e9l\u00e9charger la version Mac OS X de wDices\">Mac OS X<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<blockquote><p>Application d\u00e9velopp\u00e9e avec <a target=\"_blank\" href=\"https:\/\/www.embarcadero.com\/fr\/products\/delphi\">Embarcadero Delphi XE2<\/a>.<\/p><\/blockquote>\n<p><center><a href=\"\/whiler\/category\/computer\/delphi\/\" title=\"Articles concernant Delphi\"><img loading=\"lazy\" decoding=\"async\" src=\"\/whiler\/wp-content\/uploads\/2009\/10\/built_with_delphi.png\" alt=\"D\u00e9velopp\u00e9 en Delphi\" title=\"D\u00e9velopp\u00e9 en Delphi\" width=\"125\" height=\"51\" class=\"size-full wp-image-2721\" \/><\/a><\/center><\/p>\n<div class=\"thanks_button_div\" \n                  style=\"float: right; margin-right: 10px; margin-top:10px;\"><div id=\"thanksButtonDiv_4185_1\" style=\"background-image:url(https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/plugins\/thanks-you-counter-button\/images\/thanks_compact_brown1.png); background-repeat:no-repeat; float: left; display: inline;\"\n                onmouseover=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_4185_1', true);\" \n                onmouseout=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_4185_1', false);\"\n                onclick=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_4185_1', false);\" >\n                <input type=\"button\" onclick=\"thankYouButtonClick(4185, 'You left &ldquo;Thanks&rdquo; already for this post')\" value=\"Merci\u00a0 0\"\n                  class=\"thanks_button thanks_compact thanks_brown1\"\n                  style=\"  font-family: Verdana, Arial, Sans-Serif; font-size: 14px; font-weight: normal;; color:#00f;\"\n                  id=\"thanksButton_4185_1\" title=\"Click to leave &ldquo;Thanks&rdquo; for this post\"\/>\n             <\/div><div id=\"ajax_loader_4185_1\" style=\"display:inline;visibility: hidden;\"><img decoding=\"async\" alt=\"ajax loader\" src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/plugins\/thanks-you-counter-button\/images\/ajax-loader.gif\" \/><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Afin de m\u2019entra\u00eener avec FireMonkey et la 3D, je me suis amus\u00e9 \u00e0 me cr\u00e9er ma propre petite application\u2026<br \/>\nComme vous avez pu le voir, par exemple, dans l\u2019article pr\u00e9c\u00e9dent, j\u2019avais d\u00e9j\u00e0 jou\u00e9 avec du code source d\u00e9velopp\u00e9 au d\u00e9part par d\u2019autres personnes.<\/p>\n<p>Cette application ne sert pas \u00e0 grand chose : vous cliquez sur un gobelet\u2026 deux d\u00e9s en sortent\u2026<\/p>\n<p>Par contre, si vous d\u00e9veloppez en Delphi, vous pourrez regarder le code source publi\u00e9 ci-dessous\u2026<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[7],"tags":[27,154,146,93],"class_list":["post-4185","post","type-post","status-publish","format-standard","hentry","category-delphi","tag-coloration-syntaxique","tag-delphi","tag-firemonkey","tag-freeware"],"_links":{"self":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/4185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/comments?post=4185"}],"version-history":[{"count":0,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/4185\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/media?parent=4185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/categories?post=4185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/tags?post=4185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}