c4d_deltaInc_bot.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. <!DOCTYPE HTML>
  2. <html lang="en">
  3. <head>
  4. <title>three.js - geometry - C4D exporter colour test</title>
  5. <meta charset="utf-8">
  6. <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
  7. <style type="text/css">
  8. body {
  9. font-family: Monospace;
  10. background-color: #252525;
  11. color: #FFFFFF;
  12. margin: 0px;
  13. overflow: hidden;
  14. }
  15. a{
  16. color: #FE8101;
  17. }
  18. #colour-picker {
  19. margin:auto;
  20. position:absolute;
  21. bottom:10px;
  22. left:50%;
  23. margin-left:-400px;
  24. width:800px;
  25. height:50px;
  26. border:1px solid #000;
  27. }
  28. #colour-picker #left, #colour-picker #right {
  29. width:50px;
  30. height:50px;
  31. line-height:50px;
  32. text-align:center;
  33. moz-user-select:none;
  34. webkit-user-select:none;
  35. user-select:none;
  36. cursor:pointer;
  37. }
  38. #colour-picker #left {
  39. position:absolute;
  40. left:0px;
  41. border-right:1px solid #000;
  42. }
  43. #colour-picker #right {
  44. position:absolute;
  45. right:0px;
  46. border-left:1px solid #000;
  47. }
  48. #colour-picker #colours-container {
  49. overflow:hidden;
  50. width:700px;
  51. height:50px;
  52. position:absolute;
  53. left:51px;
  54. }
  55. #colour-picker #colours-scroller {
  56. }
  57. #colour-picker .colours {
  58. float:left;
  59. }
  60. #colour-picker .colours div {
  61. width:174px;
  62. border-right:1px solid #000;
  63. height:50px;
  64. float:left;
  65. background-color:#ccc;
  66. }
  67. #colour-picker .colours div:last-child {
  68. border-right:1px solid #fff;
  69. }
  70. </style>
  71. </head>
  72. <body>
  73. <!--<Colour picker>-->
  74. <div id="colour-picker">
  75. <div id="left">
  76. &lt;
  77. </div>
  78. <div id="colours-container">
  79. <div id="colours-scroller">
  80. </div>
  81. </div>
  82. <div id="right">
  83. &gt;
  84. </div>
  85. </div>
  86. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  87. <script>
  88. //Big thanks to Max Novakovic for the color picker! woo hoo!
  89. //for more handy js for Max's projects on github: https://github.com/betamax
  90. var colours = [{"c3":"#F0EDE8","c2":"#E3E4AA","c1":"#959684","c4":"#070707"},{"c3":"#4B4B4B","c2":"#010101","c1":"#020202","c4":"#252525"},{"c3":"#FDFDFD","c2":"#FC0000","c1":"#010101","c4":"#99D0EE"},{"c3":"#FFFFC9","c2":"#FBFD04","c1":"#FF0500","c4":"#111111"},{"c3":"#FFFFFF","c2":"#811881","c1":"#111111","c4":"#F60081"},{"c3":"#FFC306","c2":"#040301","c1":"#5D9412","c4":"#0AA0C3"},{"c3":"#111111","c2":"#C8EBF1","c1":"#FC0007","c4":"#FE8101"},{"c3":"#5A065C","c2":"#E6057B","c1":"#FB9205","c4":"#FAFF02"},{"c3":"#F70084","c2":"#7BC20C","c1":"#02A4CB","c4":"#030301"},{"c3":"#FDFDFD","c2":"#FF0700","c1":"#111111","c4":"#CB0305"},{"c3":"#FBFF04","c2":"#8BD9E5","c1":"#F1017E","c4":"#111111"},{"c3":"#FF3F08","c2":"#EF0276","c1":"#029FC8","c4":"#080705"},{"c3":"#FEFEFE","c2":"#FF0305","c1":"#A5D1EE","c4":"#0B3098"},{"c3":"#FFFFFF","c2":"#CEECF6","c1":"#FCFD09","c4":"#020202"}];
  91. function createColourPicker(colours){
  92. var container_width = 700,
  93. total_length = colours.length * container_width;
  94. $("#colours-scroller").css("width", total_length + "px");
  95. for(var i = 0, j = colours.length; i < j; i++) {
  96. var container = $("<div />"),
  97. c1 = $("<div />"),
  98. c2 = $("<div />"),
  99. c3 = $("<div />"),
  100. c4 = $("<div />");
  101. container.addClass("colours");
  102. c1.css("background-color", colours[i].c1.replace("0x", "#"));
  103. c2.css("background-color", colours[i].c2.replace("0x", "#"));
  104. c3.css("background-color", colours[i].c3.replace("0x", "#"));
  105. c4.css("background-color", colours[i].c4.replace("0x", "#"));
  106. container.append(c1);
  107. container.append(c2);
  108. container.append(c3);
  109. container.append(c4);
  110. $("#colours-scroller").append(container);
  111. }
  112. $("#right").unbind("click");
  113. $("#right").bind("click", function(e){
  114. $("#colours-scroller").stop(true, true);
  115. var current_margin = parseInt($("#colours-scroller").css("margin-left").replace("px", ""));
  116. if(Math.abs(current_margin-container_width) != total_length) {
  117. $("#colours-scroller").animate({"margin-left": current_margin-container_width+"px"});
  118. }
  119. });
  120. $("#left").unbind("click");
  121. $("#left").bind("click", function(e){
  122. $("#colours-scroller").stop(true, true);
  123. var current_margin = parseInt($("#colours-scroller").css("margin-left").replace("px", ""));
  124. if(current_margin+container_width != container_width) {
  125. $("#colours-scroller").animate({"margin-left": current_margin+container_width+"px"});
  126. }
  127. });
  128. $(".colours").unbind("click");
  129. $(".colours").bind("click", function(e){
  130. var divs = $(this).children("div"),
  131. c1 = $(divs[0]).css("background-color"),
  132. c2 = $(divs[1]).css("background-color"),
  133. c3 = $(divs[2]).css("background-color"),
  134. c4 = $(divs[3]).css("background-color");
  135. // console.log("c1: " + rgb2hex(c1), "c2: " + rgb2hex(c2), "c3: " + rgb2hex(c3), "c4: " + rgb2hex(c4))
  136. for(var i = 0 ; i < geoms.length ; i++){
  137. if(geoms[i].colors['c1'] != undefined) geoms[i].colors['c1'] = parseInt(rgb2hex(c1));
  138. if(geoms[i].colors['c2'] != undefined) geoms[i].colors['c2'] = parseInt(rgb2hex(c2));
  139. if(geoms[i].colors['c3'] != undefined) geoms[i].colors['c3'] = parseInt(rgb2hex(c3));
  140. if(geoms[i].colors['c4'] != undefined) geoms[i].colors['c4'] = parseInt(rgb2hex(c4));
  141. geoms[i].autoColor();
  142. }
  143. });
  144. function rgb2hex(rgbString){
  145. var parts = rgbString
  146. .match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/)
  147. ;
  148. // parts now should be ["rgb(0, 70, 255", "0", "70", "255"]
  149. delete (parts[0]);
  150. for (var i = 1; i <= 3; ++i) {
  151. parts[i] = parseInt(parts[i]).toString(16);
  152. if (parts[i].length == 1) parts[i] = '0' + parts[i];
  153. }
  154. var hexString = '0x'+parts.join('');
  155. return hexString;
  156. }
  157. }
  158. $(function(){
  159. createColourPicker(colours);
  160. });
  161. </script>
  162. <!--</Colour picker>-->
  163. <script type="text/javascript" src="../build/Three.js"></script>
  164. <script type="text/javascript" src="geometry/BotUpperBody.js"></script>
  165. <script type="text/javascript" src="geometry/BotLowerBody.js"></script>
  166. <script type="text/javascript" src="geometry/BotArmL.js"></script>
  167. <script type="text/javascript" src="geometry/BotArmR.js"></script>
  168. <script type="text/javascript" src="js/Stats.js"></script>
  169. <script type="text/javascript">
  170. //*
  171. var SCREEN_WIDTH = window.innerWidth;
  172. var SCREEN_HEIGHT = window.innerHeight;
  173. var container;
  174. var stats;
  175. var camera;
  176. var scene;
  177. var renderer;
  178. var model,armR,armL,upperBody;
  179. var geoms = [];
  180. var armLDist,armRDist;
  181. var targetRotation = 0;
  182. var targetRotationOnMouseDown = 0;
  183. var mouseX = 0;
  184. var mouseXOnMouseDown = 0;
  185. var mouseY = 0;
  186. var windowHalfX = window.innerWidth / 2;
  187. var windowHalfY = window.innerHeight / 2;
  188. init();
  189. setInterval(loop, 1000/60);
  190. function init() {
  191. container = document.createElement('div');
  192. document.body.appendChild(container);
  193. var info = document.createElement('div');
  194. info.style.position = 'absolute';
  195. info.style.top = '10px';
  196. info.style.width = '100%';
  197. info.style.textAlign = 'center';
  198. info.innerHTML = '<h3>Original design by <a href="http://www.deltainc.nl/">deltaInc</a></h3><br />Color Picker by <a href="http://maxnov.com/">Max Novakovic</a><br />Drag to spin';
  199. container.appendChild(info);
  200. camera = new THREE.Camera( 70, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 );
  201. camera.position.y = -200;
  202. camera.position.z = 500;
  203. camera.target.position.y = -250;
  204. scene = new THREE.Scene();
  205. //model
  206. var upperGeom = new BotUpperBody();
  207. upperBody = new THREE.Mesh( upperGeom, new THREE.MeshFaceMaterial());
  208. var armLGeom = new BotArmL();
  209. armL = new THREE.Mesh( armLGeom, new THREE.MeshFaceMaterial());
  210. var armRGeom = new BotArmR();
  211. armR = new THREE.Mesh( armRGeom, new THREE.MeshFaceMaterial());
  212. lowerGeom = new BotLowerBody();
  213. model = new THREE.Mesh( lowerGeom, new THREE.MeshFaceMaterial());
  214. lowerGeom.autoColor();
  215. armRGeom.autoColor();
  216. armLGeom.autoColor();
  217. upperGeom.autoColor();
  218. geoms = [lowerGeom,upperGeom,armLGeom,armRGeom];
  219. initModel(model,lowerGeom);
  220. initModel(upperBody,upperGeom);
  221. initModel(armL,armLGeom);
  222. initModel(armR,armRGeom);
  223. armRDist = upperBody.position.distanceTo(armR.position) * .73;
  224. armLDist = upperBody.position.distanceTo(armL.position) * .73;
  225. scene.addObject(model);
  226. scene.addObject(upperBody);
  227. scene.addObject(armR);
  228. scene.addObject(armL);
  229. renderer = new THREE.CanvasRenderer();
  230. renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
  231. container.appendChild( renderer.domElement );
  232. stats = new Stats();
  233. stats.domElement.style.position = 'absolute';
  234. stats.domElement.style.top = '0px';
  235. container.appendChild( stats.domElement );
  236. document.addEventListener( 'mousedown', onDocumentMouseDown, false );
  237. document.addEventListener( 'touchstart', onDocumentTouchStart, false );
  238. document.addEventListener( 'touchmove', onDocumentTouchMove, false );
  239. }
  240. //
  241. function onDocumentMouseDown( event ) {
  242. event.preventDefault();
  243. document.addEventListener( 'mousemove', onDocumentMouseMove, false );
  244. document.addEventListener( 'mouseup', onDocumentMouseUp, false );
  245. document.addEventListener( 'mouseout', onDocumentMouseOut, false );
  246. mouseXOnMouseDown = event.clientX - windowHalfX;
  247. targetRotationOnMouseDown = targetRotation;
  248. }
  249. function onDocumentMouseMove( event ) {
  250. mouseX = event.clientX - windowHalfX;
  251. mouseY = event.clientY - windowHalfY;
  252. targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.02;
  253. }
  254. function onDocumentMouseUp( event ) {
  255. document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
  256. document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
  257. document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
  258. }
  259. function onDocumentMouseOut( event ) {
  260. document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
  261. document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
  262. document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
  263. }
  264. function onDocumentTouchStart( event ) {
  265. if ( event.touches.length == 1 ) {
  266. event.preventDefault();
  267. mouseXOnMouseDown = event.touches[ 0 ].pageX - windowHalfX;
  268. targetRotationOnMouseDown = targetRotation;
  269. }
  270. }
  271. function onDocumentTouchMove( event ) {
  272. if ( event.touches.length == 1 ) {
  273. event.preventDefault();
  274. mouseX = event.touches[ 0 ].pageX - windowHalfX;
  275. targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.05;
  276. }
  277. }
  278. //
  279. function loop() {
  280. model.rotation.z += ( targetRotation - model.rotation.z ) * 0.025;
  281. //armL.rotation.x += ( targetRotation - model.rotation.z ) * 0.01;
  282. //armL.rotation.x -= ( targetRotation - model.rotation.z ) * 0.01;
  283. upperBody.rotation.y = -model.rotation.z * 0.5;
  284. armL.rotation.y = armR.rotation.y = upperBody.rotation.y;
  285. /*
  286. armL.position.x = upperBody.position.x + (Math.cos(upperBody.rotation.y) * armRDist);
  287. armL.position.z = upperBody.position.z + (Math.sin(upperBody.rotation.y) * armRDist);
  288. //armL.rotation.x = upperBody.rotation.y * .005;
  289. armL.rotation.y = upperBody.rotation.y;
  290. //armR.rotation.x -= 0.005;
  291. armR.position.x = upperBody.position.x - (Math.cos(upperBody.rotation.y) * armLDist);
  292. armR.position.z = upperBody.position.z - (Math.sin(upperBody.rotation.y) * armLDist);
  293. //armR.rotation.x = upperBody.rotation.y * .005;//gimbal lock ?
  294. armR.rotation.y = upperBody.rotation.y;
  295. //*/
  296. renderer.render(scene, camera);
  297. stats.update();
  298. }
  299. function initBitmapMaterial(url) {
  300. texture = document.createElement( 'canvas' );
  301. texture.width = 128;
  302. texture.height = 128;
  303. material = new THREE.MeshBitmapMaterial( texture );
  304. var temp = new Image();
  305. temp.onload = function () {
  306. material.bitmap = this;
  307. renderer.render(scene, camera);
  308. };
  309. temp.src = url;
  310. }
  311. function initModel(model,geom){
  312. geom.autoColor();
  313. model.position = geom.getPosition();
  314. model.rotation = geom.getRotation();
  315. model.rotation.x += Math.PI;
  316. // model.rotation.y += Math.PI;
  317. // model.rotation.z += Math.PI;
  318. model.scale = geom.getScale();
  319. }
  320. </script>
  321. </body>
  322. </html>