您现在的位置: 365建站网 > 365文章 > PHP绘制3D图形 之 自定义图形及矢量图

PHP绘制3D图形 之 自定义图形及矢量图

文章来源:365jz.com     点击数:228    更新时间:2009-09-21 11:07   参与评论

上一篇进行了一些简单3D图形实例,本篇介绍自定义及矢量图实例。首先绘制一个三尖角星体,分别由“前面”,“后面”和三个“侧面”组成。

 

自定义多边形

 

代码:

</>code

  1. <?php
  2. require_once('Image/3D.php');
  3. $image = new Image_3D();
  4. $image->setColor(new Image_3D_Color(255, 255, 255));
  5. //创建光源
  6. $light1 = $image->createLight('light',array(-50, -50, -50));
  7. $light1->setColor(new Image_3D_Color(100, 250, 100));
  8. $light2 = $image->createLight('light',array(50, -50, 0));
  9. $light2->setColor(new Image_3D_Color(100, 100, 250));
  10. $light3 = $image->createLight('light',array(50, 50, 0));
  11. $light3->setColor(new Image_3D_Color(50, 0, 100));
  12. //创建多边形数组
  13. $polygons = array();
  14. //前面点坐标
  15. $polygons[] = array(
  16. array(0, -120, 0), array(-18, -12, 0),
  17. array(-86, 48, 0), array(0, 18, 0),
  18. array(86, 48, 0), array(18, -12, 0)
  19. );
  20. //后面点坐标
  21. $polygons[] = array(
  22. array(0, -120, 60), array(-18, -12, 60),
  23. array(-86, 48, 60), array(0, 18, 60),
  24. array(86, 48, 60), array(18, -12, 60)
  25. );
  26. //三侧面点坐标
  27. $polygons[] = array(
  28. array(0, -120, 0), array(-18, -12, 0),
  29. array(-86, 48, 0), array(-86, 48, 60),
  30. array(-18, -12, 60),array(0, -120, 60)
  31. );
  32. $polygons[] = array(
  33. array(-86, 48, 0), array(0, 18, 0),
  34. array(86, 48, 0), array(86, 48, 60),
  35. array(0, 18, 60), array(-86, 48, 60)
  36. );
  37. $polygons[] = array(
  38. array(86, 48, 0), array(18, -12, 0),
  39. array(0, -120, 0), array(0, -120, 60),
  40. array(18, -12, 60),array(86, 48, 60)
  41. );
  42. //绘制3D图像
  43. foreach ($polygons as $poly) {
  44. $points = array();
  45. foreach ($poly as $set) {
  46. $points[] = new Image_3D_Point($set[0], $set[1], $set[2]);
  47. }
  48. $p = $image->createObject('polygon', $points);
  49. $p->setColor(new Image_3D_Color(255, 255, 255));
  50. }
  51. $image->transform($image->createMatrix('Rotation', array(-10, -25, -15)));
  52. $image->createRenderer('perspectively');
  53. $image->createDriver('gd');
  54. $image->render(300, 300, 'anim.png');
  55. echo '<img src="anim.png">';
  56. ?>

 

效果图:

anim

 

 

矢量图

       可缩放的矢量图形(Scalable Vector Graphics,SVG)文件格式是组成2D图像的矢量XML文件。 在2001年,W3C对该格式进行了标准化,但其在Web方面的使用因为浏览器显示SVG文件的牵制而不很流行。 目前,最好的选择是Firefox它有内置的SVG支持,或具有Adobe SVG插件的IE。下面通过一个实例生成SVG文件。

代码:

</>code

  1. <?php
  2. require_once('Image/3D.php');
  3. $rot_x = 45;
  4. $rot_y = 45;
  5. $rot_z = 10;
  6. $image = new Image_3D();
  7. $image->setColor(new Image_3D_Color(255, 255, 255));
  8. for ($x=0; $x < 4; $x++) {
  9. for ($y=0; $y < 4; $y++) {
  10. for ($z=0; $z < 4; $z++) {
  11. //创建球体
  12. $sphere = $image->createObject('sphere', array('r' => 25, 'detail' => 3));
  13. //后面150用于设置图像透明度
  14. $sphere->setColor(new Image_3D_Color(255, 162, 0, 150));
  15. $sphere->transform($image->createMatrix('Move', array(($x * 75) + 50, $y * 75, $z * 75)));
  16. $sphere->transform($image->createMatrix('Rotation', array($rot_x, $rot_y, $rot_z)));
  17. }
  18. }
  19. }
  20. $image->transform($image->createMatrix('Move', array(-225, -100, 0)));
  21. $image->createRenderer('perspectively');
  22. //使用SVG驱动生成矢量图
  23. $image->createDriver('svg');
  24. $image->render(600, 600, 'anim.svg');
  25. header('Location:anim.svg');
  26. ?>

 

效果图:

2009-8-27-16.20.12

 

输出的SVG文件打开后,其格式即为XML:

</>code

  1. <?xml version="1.0" ?>
  2. <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  3. "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
  4. <svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="600" height="600">
  5. <defs id="defs16387">
  6. </defs>
  7. <polygon id="background1" points="0,0 600,0 600,600 0,600"
  8. style="fill: #ffffff; fill-opacity: 1.00; stroke: none;" />
  9. <polygon points="325.87,264.90 323.53,258.51 321.87,262.52"
  10. style="fill: #ffa200; fill-opacity: 0.41; stroke: none;" />
  11. <polygon points="319.40,256.07 321.87,262.52 323.53,258.51"
  12. style="fill: #ffa200; fill-opacity: 0.41; stroke: none;" />
  13. ... ...
  14. <polygon points="230.72,174.08 236.47,190.12 226.95,185.47"
  15. style="fill: #ffa200; fill-opacity: 0.41; stroke: none;" />
  16. <polygon points="230.72,174.08 252.69,180.70 236.47,190.12"
  17. style="fill: #ffa200; fill-opacity: 0.41; stroke: none;" />
  18. </svg>

</>code


</>code

  1. 作者: Gnie
  2. 出处: {GnieTech} (http://www.cnblogs.com/gnielee/)
  3. 版权声明: 本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。

作者资料:
Gnie
我的主页  个人资料
我的闪存  与我联系

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (228人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号