diff options
Diffstat (limited to 'src/extantz/Evas_3D_demo.c')
-rw-r--r-- | src/extantz/Evas_3D_demo.c | 237 |
1 files changed, 108 insertions, 129 deletions
diff --git a/src/extantz/Evas_3D_demo.c b/src/extantz/Evas_3D_demo.c index 95b2f2f..f9a5c27 100644 --- a/src/extantz/Evas_3D_demo.c +++ b/src/extantz/Evas_3D_demo.c | |||
@@ -333,27 +333,24 @@ Eina_Bool _animate_scene(globals *ourGlobals) | |||
333 | static void | 333 | static void |
334 | _camera_setup(globals *ourGlobals, Scene_Data *scene) | 334 | _camera_setup(globals *ourGlobals, Scene_Data *scene) |
335 | { | 335 | { |
336 | scene->camera = eo_add(EVAS_3D_CAMERA_CLASS, ourGlobals->evas); | 336 | scene->camera = eo_add(EVAS_3D_CAMERA_CLASS, ourGlobals->evas, |
337 | eo_do(scene->camera, | ||
338 | evas_3d_camera_projection_perspective_set(60.0, 1.0, 1.0, 500.0) | 337 | evas_3d_camera_projection_perspective_set(60.0, 1.0, 1.0, 500.0) |
339 | ); | 338 | ); |
340 | 339 | ||
341 | scene->camera_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_CAMERA); | 340 | scene->camera_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_CAMERA); |
342 | eo_do(scene->camera_node, | 341 | eo_do(scene->camera_node, |
343 | evas_3d_node_camera_set(scene->camera) | 342 | evas_3d_node_camera_set(scene->camera), |
344 | ); | ||
345 | eo_do(scene->root_node, evas_3d_node_member_add(scene->camera_node)); | ||
346 | eo_do(scene->camera_node, | ||
347 | evas_3d_node_position_set(50.0, 0.0, 20.0), | 343 | evas_3d_node_position_set(50.0, 0.0, 20.0), |
348 | evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 20.0, EVAS_3D_SPACE_PARENT, 0.0, 0.0, 1.0) | 344 | evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 20.0, EVAS_3D_SPACE_PARENT, 0.0, 0.0, 1.0) |
349 | ); | 345 | ); |
346 | |||
347 | eo_do(scene->root_node, evas_3d_node_member_add(scene->camera_node)); | ||
350 | } | 348 | } |
351 | 349 | ||
352 | static void | 350 | static void |
353 | _light_setup(globals *ourGlobals, Scene_Data *scene) | 351 | _light_setup(globals *ourGlobals, Scene_Data *scene) |
354 | { | 352 | { |
355 | scene->light = eo_add(EVAS_3D_LIGHT_CLASS, ourGlobals->evas); | 353 | scene->light = eo_add(EVAS_3D_LIGHT_CLASS, ourGlobals->evas, |
356 | eo_do(scene->light, | ||
357 | evas_3d_light_ambient_set(1.0, 1.0, 1.0, 1.0), | 354 | evas_3d_light_ambient_set(1.0, 1.0, 1.0, 1.0), |
358 | evas_3d_light_diffuse_set(1.0, 1.0, 1.0, 1.0), | 355 | evas_3d_light_diffuse_set(1.0, 1.0, 1.0, 1.0), |
359 | evas_3d_light_specular_set(1.0, 1.0, 1.0, 1.0), | 356 | evas_3d_light_specular_set(1.0, 1.0, 1.0, 1.0), |
@@ -362,15 +359,13 @@ _light_setup(globals *ourGlobals, Scene_Data *scene) | |||
362 | 359 | ||
363 | scene->light_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_LIGHT); | 360 | scene->light_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_LIGHT); |
364 | eo_do(scene->light_node, | 361 | eo_do(scene->light_node, |
365 | evas_3d_node_light_set(scene->light) | 362 | evas_3d_node_light_set(scene->light), |
366 | ); | ||
367 | eo_do(scene->root_node, | ||
368 | evas_3d_node_member_add(scene->light_node) | ||
369 | ); | ||
370 | eo_do(scene->light_node, | ||
371 | evas_3d_node_position_set(1000.0, 0.0, 1000.0), | 363 | evas_3d_node_position_set(1000.0, 0.0, 1000.0), |
372 | evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_3D_SPACE_PARENT, 0.0, 1.0, 0.0) | 364 | evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_3D_SPACE_PARENT, 0.0, 1.0, 0.0) |
373 | ); | 365 | ); |
366 | |||
367 | eo_do(scene->root_node, evas_3d_node_member_add(scene->light_node)); | ||
368 | |||
374 | } | 369 | } |
375 | 370 | ||
376 | static void _cube_setup(globals *ourGlobals, Scene_Data *scene) | 371 | static void _cube_setup(globals *ourGlobals, Scene_Data *scene) |
@@ -378,10 +373,20 @@ static void _cube_setup(globals *ourGlobals, Scene_Data *scene) | |||
378 | char buf[PATH_MAX]; | 373 | char buf[PATH_MAX]; |
379 | 374 | ||
380 | // Setup cube materials. | 375 | // Setup cube materials. |
381 | scene->material0 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas); | 376 | scene->texture0 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas, |
382 | scene->material1 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas); | 377 | evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA, EVAS_3D_PIXEL_FORMAT_8888, 4, 4, &pixels0[0]) |
378 | ); | ||
379 | |||
380 | scene->texture1 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas, | ||
381 | evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA, EVAS_3D_PIXEL_FORMAT_8888, 4, 4, &pixels1[0]) | ||
382 | ); | ||
383 | |||
384 | snprintf(buf, sizeof(buf), "%s/normal_lego.png", elm_app_data_dir_get()); | ||
385 | scene->texture_normal = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas, | ||
386 | evas_3d_texture_file_set(buf, NULL) | ||
387 | ); | ||
383 | 388 | ||
384 | eo_do(scene->material0, | 389 | scene->material0 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas, |
385 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), | 390 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), |
386 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE), | 391 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE), |
387 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE), | 392 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE), |
@@ -390,10 +395,11 @@ static void _cube_setup(globals *ourGlobals, Scene_Data *scene) | |||
390 | evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.2, 0.2, 0.2, 1.0), | 395 | evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.2, 0.2, 0.2, 1.0), |
391 | evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 0.8, 0.8, 0.8, 1.0), | 396 | evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 0.8, 0.8, 0.8, 1.0), |
392 | evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0), | 397 | evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0), |
393 | evas_3d_material_shininess_set(100.0) | 398 | evas_3d_material_shininess_set(100.0), |
394 | ); | 399 | evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture0) |
400 | ); | ||
395 | 401 | ||
396 | eo_do(scene->material1, | 402 | scene->material1 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas, |
397 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), | 403 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), |
398 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE), | 404 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE), |
399 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE), | 405 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE), |
@@ -402,29 +408,14 @@ static void _cube_setup(globals *ourGlobals, Scene_Data *scene) | |||
402 | evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.2, 0.2, 0.2, 1.0), | 408 | evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.2, 0.2, 0.2, 1.0), |
403 | evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 0.8, 0.8, 0.8, 1.0), | 409 | evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 0.8, 0.8, 0.8, 1.0), |
404 | evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0), | 410 | evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0), |
405 | evas_3d_material_shininess_set(100.0) | 411 | evas_3d_material_shininess_set(100.0), |
406 | ); | ||
407 | 412 | ||
408 | scene->texture0 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas); | 413 | evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture1), |
409 | scene->texture1 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas); | 414 | evas_3d_material_texture_set(EVAS_3D_MATERIAL_NORMAL, scene->texture_normal) |
410 | scene->texture_normal = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas); | ||
411 | |||
412 | eo_do(scene->texture0, | ||
413 | evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA, EVAS_3D_PIXEL_FORMAT_8888, 4, 4, &pixels0[0]) | ||
414 | ); | 415 | ); |
415 | eo_do(scene->texture1, | ||
416 | evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA, EVAS_3D_PIXEL_FORMAT_8888, 4, 4, &pixels1[0]) | ||
417 | ); | ||
418 | snprintf(buf, sizeof(buf), "%s/normal_lego.png", elm_app_data_dir_get()); | ||
419 | eo_do(scene->texture_normal, evas_3d_texture_file_set(buf, NULL)); | ||
420 | |||
421 | eo_do(scene->material0, evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture0)); | ||
422 | eo_do(scene->material1, evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture1)); | ||
423 | eo_do(scene->material1, evas_3d_material_texture_set(EVAS_3D_MATERIAL_NORMAL, scene->texture_normal)); | ||
424 | 416 | ||
425 | // Setup CUBE mesh. | 417 | // Setup CUBE mesh. |
426 | scene->mesh = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas); | 418 | scene->mesh = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas, |
427 | eo_do(scene->mesh, | ||
428 | evas_3d_mesh_vertex_count_set(24), | 419 | evas_3d_mesh_vertex_count_set(24), |
429 | evas_3d_mesh_frame_add(0), | 420 | evas_3d_mesh_frame_add(0), |
430 | 421 | ||
@@ -443,13 +434,15 @@ static void _cube_setup(globals *ourGlobals, Scene_Data *scene) | |||
443 | evas_3d_mesh_frame_add(20), | 434 | evas_3d_mesh_frame_add(20), |
444 | evas_3d_mesh_frame_material_set(20, scene->material1) | 435 | evas_3d_mesh_frame_material_set(20, scene->material1) |
445 | ); | 436 | ); |
437 | |||
446 | scene->mesh_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_MESH); | 438 | scene->mesh_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_MESH); |
447 | eo_do(scene->root_node, evas_3d_node_member_add(scene->mesh_node)); | ||
448 | eo_do(scene->mesh_node, | 439 | eo_do(scene->mesh_node, |
449 | eo_key_data_set("Name", "cube", NULL), | 440 | eo_key_data_set("Name", "cube", NULL), |
450 | evas_3d_node_position_set(40.0, 3.5, 23.0), | 441 | evas_3d_node_position_set(40.0, 3.5, 23.0), |
451 | evas_3d_node_mesh_add(scene->mesh) | 442 | evas_3d_node_mesh_add(scene->mesh) |
452 | ); | 443 | ); |
444 | |||
445 | eo_do(scene->root_node, evas_3d_node_member_add(scene->mesh_node)); | ||
453 | } | 446 | } |
454 | 447 | ||
455 | static void _sonic_setup(globals *ourGlobals, Scene_Data *scene) | 448 | static void _sonic_setup(globals *ourGlobals, Scene_Data *scene) |
@@ -457,26 +450,14 @@ static void _sonic_setup(globals *ourGlobals, Scene_Data *scene) | |||
457 | char buf[PATH_MAX]; | 450 | char buf[PATH_MAX]; |
458 | 451 | ||
459 | // Setup an MD2 mesh. | 452 | // Setup an MD2 mesh. |
460 | scene->mesh2 = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas); | ||
461 | snprintf(buf, sizeof(buf), "%s/sonic.md2", elm_app_data_dir_get()); | ||
462 | eo_do(scene->mesh2, | ||
463 | evas_3d_mesh_file_set(EVAS_3D_MESH_FILE_TYPE_MD2, buf, NULL) | ||
464 | ); | ||
465 | |||
466 | scene->material2 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas); | ||
467 | eo_do(scene->mesh2, | ||
468 | evas_3d_mesh_frame_material_set(0, scene->material2) | ||
469 | ); | ||
470 | |||
471 | scene->texture2 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas); | ||
472 | snprintf(buf, sizeof(buf), "%s/sonic.png", elm_app_data_dir_get()); | 453 | snprintf(buf, sizeof(buf), "%s/sonic.png", elm_app_data_dir_get()); |
473 | eo_do(scene->texture2, | 454 | scene->texture2 = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas, |
474 | evas_3d_texture_file_set(buf, NULL), | 455 | evas_3d_texture_file_set(buf, NULL), |
475 | evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST, EVAS_3D_TEXTURE_FILTER_NEAREST), | 456 | evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST, EVAS_3D_TEXTURE_FILTER_NEAREST), |
476 | evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT, EVAS_3D_WRAP_MODE_REPEAT) | 457 | evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT, EVAS_3D_WRAP_MODE_REPEAT) |
477 | ); | 458 | ); |
478 | 459 | ||
479 | eo_do(scene->material2, | 460 | scene->material2 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas, |
480 | evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture2), | 461 | evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture2), |
481 | 462 | ||
482 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), | 463 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), |
@@ -490,18 +471,20 @@ static void _sonic_setup(globals *ourGlobals, Scene_Data *scene) | |||
490 | evas_3d_material_shininess_set(50.0) | 471 | evas_3d_material_shininess_set(50.0) |
491 | ); | 472 | ); |
492 | 473 | ||
493 | scene->mesh2_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_MESH); | 474 | snprintf(buf, sizeof(buf), "%s/sonic.md2", elm_app_data_dir_get()); |
494 | eo_do(scene->root_node, | 475 | scene->mesh2 = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas, |
495 | evas_3d_node_member_add(scene->mesh2_node) | 476 | evas_3d_mesh_file_set(EVAS_3D_MESH_FILE_TYPE_MD2, buf, NULL), |
477 | evas_3d_mesh_frame_material_set(0, scene->material2), | ||
478 | evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG) | ||
496 | ); | 479 | ); |
480 | |||
481 | scene->mesh2_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_MESH); | ||
497 | eo_do(scene->mesh2_node, | 482 | eo_do(scene->mesh2_node, |
498 | eo_key_data_set("Name", "sonic", NULL), | 483 | eo_key_data_set("Name", "sonic", NULL), |
499 | evas_3d_node_mesh_add(scene->mesh2) | 484 | evas_3d_node_mesh_add(scene->mesh2) |
500 | ); | 485 | ); |
501 | 486 | ||
502 | eo_do(scene->mesh2, | 487 | eo_do(scene->root_node, evas_3d_node_member_add(scene->mesh2_node)); |
503 | evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG) | ||
504 | ); | ||
505 | } | 488 | } |
506 | 489 | ||
507 | static void _earth_setup(globals *ourGlobals, Scene_Data *scene) | 490 | static void _earth_setup(globals *ourGlobals, Scene_Data *scene) |
@@ -509,81 +492,76 @@ static void _earth_setup(globals *ourGlobals, Scene_Data *scene) | |||
509 | char buf[PATH_MAX]; | 492 | char buf[PATH_MAX]; |
510 | 493 | ||
511 | // Setup earth material. | 494 | // Setup earth material. |
512 | scene->material3 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas); | ||
513 | |||
514 | scene->texture_diffuse = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas); | ||
515 | snprintf(buf, sizeof(buf), "%s/EarthDiffuse.png", elm_app_data_dir_get()); | 495 | snprintf(buf, sizeof(buf), "%s/EarthDiffuse.png", elm_app_data_dir_get()); |
516 | eo_do(scene->texture_diffuse, | 496 | scene->texture_diffuse = eo_add(EVAS_3D_TEXTURE_CLASS, ourGlobals->evas, |
517 | evas_3d_texture_file_set(buf, NULL), | 497 | evas_3d_texture_file_set(buf, NULL), |
518 | evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_LINEAR, EVAS_3D_TEXTURE_FILTER_LINEAR)); | 498 | evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_LINEAR, EVAS_3D_TEXTURE_FILTER_LINEAR) |
519 | eo_do(scene->material3, | 499 | ); |
520 | evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture_diffuse), | ||
521 | 500 | ||
522 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), | 501 | scene->material3 = eo_add(EVAS_3D_MATERIAL_CLASS, ourGlobals->evas, |
523 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE), | 502 | evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, scene->texture_diffuse), |
524 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE), | ||
525 | 503 | ||
526 | evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.01, 0.01, 0.01, 1.0), | 504 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), |
527 | evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 1.0, 1.0, 1.0, 1.0), | 505 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE), |
528 | evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0), | 506 | evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE), |
529 | evas_3d_material_shininess_set(50.0)); | 507 | |
508 | evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.01, 0.01, 0.01, 1.0), | ||
509 | evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 1.0, 1.0, 1.0, 1.0), | ||
510 | evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0), | ||
511 | evas_3d_material_shininess_set(50.0) | ||
512 | ); | ||
530 | 513 | ||
531 | // Setup earth mesh. | 514 | // Setup earth mesh. |
532 | _sphere_init(100); | 515 | _sphere_init(100); |
533 | 516 | ||
534 | scene->mesh3 = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas); | 517 | scene->mesh3 = eo_add(EVAS_3D_MESH_CLASS, ourGlobals->evas, |
535 | eo_do(scene->mesh3, | 518 | evas_3d_mesh_vertex_count_set(vertex_count), |
536 | evas_3d_mesh_vertex_count_set(vertex_count), | 519 | evas_3d_mesh_frame_add(0), |
537 | evas_3d_mesh_frame_add(0), | 520 | evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_POSITION, sizeof(vertex), &sphere_vertices[0].position), |
538 | evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_POSITION, sizeof(vertex), &sphere_vertices[0].position), | 521 | evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_NORMAL, sizeof(vertex), &sphere_vertices[0].normal), |
539 | evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_NORMAL, sizeof(vertex), &sphere_vertices[0].normal), | 522 | evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TANGENT, sizeof(vertex), &sphere_vertices[0].tangent), |
540 | evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TANGENT, sizeof(vertex), &sphere_vertices[0].tangent), | 523 | evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_COLOR, sizeof(vertex), &sphere_vertices[0].color), |
541 | evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_COLOR, sizeof(vertex), &sphere_vertices[0].color), | 524 | evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TEXCOORD, sizeof(vertex), &sphere_vertices[0].texcoord), |
542 | evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TEXCOORD, sizeof(vertex), &sphere_vertices[0].texcoord), | 525 | |
543 | 526 | evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT, index_count, &sphere_indices[0]), | |
544 | evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT, index_count, &sphere_indices[0]), | 527 | evas_3d_mesh_vertex_assembly_set(EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES), |
545 | evas_3d_mesh_vertex_assembly_set(EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES), | 528 | evas_3d_mesh_frame_material_set(0, scene->material3), |
546 | evas_3d_mesh_frame_material_set(0, scene->material3) | 529 | |
547 | ); | 530 | evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_DIFFUSE) |
531 | ); | ||
548 | 532 | ||
549 | scene->mesh3_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_MESH); | 533 | scene->mesh3_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_MESH); |
550 | eo_do(scene->root_node, | ||
551 | evas_3d_node_member_add(scene->mesh3_node) | ||
552 | ); | ||
553 | eo_do(scene->mesh3_node, | 534 | eo_do(scene->mesh3_node, |
554 | eo_key_data_set("Name", "earth", NULL), | 535 | eo_key_data_set("Name", "earth", NULL), |
555 | evas_3d_node_position_set(40.0, -3.5, 23.0), | 536 | evas_3d_node_position_set(40.0, -3.5, 23.0), |
556 | evas_3d_node_mesh_add(scene->mesh3) | 537 | evas_3d_node_mesh_add(scene->mesh3) |
557 | ); | 538 | ); |
558 | 539 | ||
559 | eo_do(scene->mesh3, | 540 | eo_do(scene->root_node, evas_3d_node_member_add(scene->mesh3_node)); |
560 | evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_DIFFUSE) | ||
561 | ); | ||
562 | } | 541 | } |
563 | 542 | ||
564 | 543 | ||
565 | static void | 544 | static void |
566 | _scene_setup(globals *ourGlobals, Scene_Data *scene) | 545 | _scene_setup(globals *ourGlobals, Scene_Data *scene) |
567 | { | 546 | { |
568 | scene->scene = eo_add(EVAS_3D_SCENE_CLASS, ourGlobals->evas); | ||
569 | eo_do(scene->scene, | ||
570 | evas_3d_scene_size_set(512, 512), | ||
571 | evas_3d_scene_background_color_set(0.0, 0.0, 0.0, 0.0) | ||
572 | ); | ||
573 | |||
574 | // TODO - I have no idea how this should work. | 547 | // TODO - I have no idea how this should work. |
575 | // It seems the people that wrote the examples don't know either. lol | 548 | // It seems the people that wrote the examples don't know either. lol |
576 | // scene->root_node = eo_add(EVAS_3D_NODE_CLASS, ourGlobals->evas, EVAS_3D_NODE_TYPE_NODE); | 549 | // scene->root_node = eo_add(EVAS_3D_NODE_CLASS, ourGlobals->evas, EVAS_3D_NODE_TYPE_NODE); |
577 | scene->root_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_NODE); | 550 | scene->root_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_NODE); |
578 | 551 | ||
552 | scene->scene = eo_add(EVAS_3D_SCENE_CLASS, ourGlobals->evas, | ||
553 | evas_3d_scene_root_node_set(scene->root_node), | ||
554 | evas_3d_scene_size_set(512, 512), | ||
555 | evas_3d_scene_background_color_set(0.0, 0.0, 0.0, 0.0) | ||
556 | ); | ||
557 | |||
579 | _camera_setup(ourGlobals, scene); | 558 | _camera_setup(ourGlobals, scene); |
580 | _light_setup(ourGlobals, scene); | 559 | _light_setup(ourGlobals, scene); |
581 | _cube_setup(ourGlobals, scene); | 560 | _cube_setup(ourGlobals, scene); |
582 | _sonic_setup(ourGlobals, scene); | 561 | _sonic_setup(ourGlobals, scene); |
583 | _earth_setup(ourGlobals, scene); | 562 | _earth_setup(ourGlobals, scene); |
584 | 563 | ||
585 | eo_do(scene->scene, | 564 | eo_do(scene->scene, |
586 | evas_3d_scene_root_node_set(scene->root_node), | ||
587 | evas_3d_scene_camera_node_set(scene->camera_node) | 565 | evas_3d_scene_camera_node_set(scene->camera_node) |
588 | ); | 566 | ); |
589 | } | 567 | } |
@@ -685,28 +663,29 @@ void Evas_3D_Demo_add(globals *ourGlobals) | |||
685 | ourGlobals->scene = &ourScene; | 663 | ourGlobals->scene = &ourScene; |
686 | _scene_setup(ourGlobals, &ourScene); | 664 | _scene_setup(ourGlobals, &ourScene); |
687 | 665 | ||
688 | // Add an image object for 3D scene rendering. | 666 | // Add an image object for 3D scene rendering. |
689 | obj = eo_add(ELM_OBJ_IMAGE_CLASS, ourGlobals->win); | 667 | obj = eo_add(ELM_OBJ_IMAGE_CLASS, ourGlobals->win, |
690 | ourScene.image = obj; | 668 | evas_obj_size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND), |
691 | eo_do(obj, | 669 | elm_obj_image_fill_outside_set(EINA_TRUE), |
692 | evas_obj_size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND), | 670 | evas_obj_visibility_set(EINA_TRUE), |
693 | elm_obj_image_fill_outside_set(EINA_TRUE), | 671 | temp = elm_obj_image_object_get() |
694 | evas_obj_visibility_set(EINA_TRUE), | 672 | ); |
695 | temp = elm_obj_image_object_get() | 673 | ourScene.image = obj; |
696 | ); | 674 | |
697 | eo_do(temp, | 675 | eo_do(temp, |
698 | evas_obj_image_scene_set(ourScene.scene) | 676 | evas_obj_image_scene_set(ourScene.scene) |
699 | ); | 677 | ); |
700 | elm_object_tooltip_text_set(obj, ""); | 678 | elm_object_tooltip_text_set(obj, ""); |
701 | elm_object_tooltip_hide(obj); | 679 | elm_object_tooltip_hide(obj); |
702 | // Elm can't seem to be able to tell us WHERE an image was clicked, so use raw Evas calbacks instead. | 680 | // Elm can't seem to be able to tell us WHERE an image was clicked, so use raw Evas calbacks instead. |
703 | evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_MOVE, _on_mouse_move, &ourScene); | 681 | evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_MOVE, _on_mouse_move, &ourScene); |
704 | evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, &ourScene); | 682 | evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, &ourScene); |
705 | cameraAdd(ourGlobals, obj); | 683 | |
706 | elm_win_resize_object_add(ourGlobals->win, obj); | 684 | cameraAdd(ourGlobals, obj); |
707 | // elm_box_pack_end(ourGlobals->gld.bx, obj); | 685 | elm_win_resize_object_add(ourGlobals->win, obj); |
708 | 686 | // elm_box_pack_end(ourGlobals->gld.bx, obj); | |
709 | ourGlobals->gld.move = calloc(1, sizeof(cameraMove)); | 687 | |
688 | ourGlobals->gld.move = calloc(1, sizeof(cameraMove)); | ||
710 | } | 689 | } |
711 | 690 | ||
712 | void Evas_3D_Demo_fini(globals *ourGlobals) | 691 | void Evas_3D_Demo_fini(globals *ourGlobals) |