解析PHP繪制3D圖形之自定義圖形及矢量圖_PHP教程
推薦:解析PHP編寫(xiě)的25個(gè)游戲腳本PHP是一種易于使用、易于學(xué)習(xí)且可以廣泛獲取的編程語(yǔ)言。它非常適合開(kāi)發(fā)在各種游戲中可以使用的簡(jiǎn)單腳本。無(wú)論是一個(gè)人玩簡(jiǎn)單的使用紙和筆的游戲,還是同一群人玩復(fù)雜的桌面角色扮演游戲,或者任意類(lèi)型的聯(lián)機(jī)游戲,本系列都提供了適合您的內(nèi)容。用 PHP 可以
上一篇進(jìn)行了一些簡(jiǎn)單3D圖形實(shí)例,本篇介紹自定義及矢量圖實(shí)例。首先繪制一個(gè)三尖角星體,分別由“前面”,“后面”和三個(gè)“側(cè)面”組成。
自定義多邊形
代碼:
以下為引用的內(nèi)容: <?php require_once('Image/3D.php'); $image = new Image_3D(); $image->setColor(new Image_3D_Color(255, 255, 255)); //創(chuàng)建光源 $light1 = $image->createLight('light',array(-50, -50, -50)); $light1->setColor(new Image_3D_Color(100, 250, 100)); $light2 = $image->createLight('light',array(50, -50, 0)); $light2->setColor(new Image_3D_Color(100, 100, 250)); $light3 = $image->createLight('light',array(50, 50, 0)); $light3->setColor(new Image_3D_Color(50, 0, 100)); //創(chuàng)建多邊形數(shù)組 $polygons = array(); //前面點(diǎn)坐標(biāo) $polygons[] = array( array(0, -120, 0), array(-18, -12, 0), array(-86, 48, 0), array(0, 18, 0), array(86, 48, 0), array(18, -12, 0) ); //后面點(diǎn)坐標(biāo) $polygons[] = array( array(0, -120, 60), array(-18, -12, 60), array(-86, 48, 60), array(0, 18, 60), array(86, 48, 60), array(18, -12, 60) ); //三側(cè)面點(diǎn)坐標(biāo) $polygons[] = array( array(0, -120, 0), array(-18, -12, 0), array(-86, 48, 0), array(-86, 48, 60), array(-18, -12, 60),array(0, -120, 60) ); $polygons[] = array( array(-86, 48, 0), array(0, 18, 0), array(86, 48, 0), array(86, 48, 60), array(0, 18, 60), array(-86, 48, 60) ); $polygons[] = array( array(86, 48, 0), array(18, -12, 0), array(0, -120, 0), array(0, -120, 60), array(18, -12, 60),array(86, 48, 60) ); //繪制3D圖像 foreach ($polygons as $poly) { $points = array(); foreach ($poly as $set) { $points[] = new Image_3D_Point($set[0], $set[1], $set[2]); } $p = $image->createObject('polygon', $points); $p->setColor(new Image_3D_Color(255, 255, 255)); } $image->transform($image->createMatrix('Rotation', array(-10, -25, -15))); $image->createRenderer('perspectively'); $image->createDriver('gd'); $image->render(300, 300, 'anim.png'); echo '<img src="anim.png">'; ?> |
效果圖:
矢量圖
可縮放的矢量圖形(Scalable Vector Graphics,SVG)文件格式是組成2D圖像的矢量XML文件。 在2001年,W3C對(duì)該格式進(jìn)行了標(biāo)準(zhǔn)化,但其在Web方面的使用因?yàn)闉g覽器顯示SVG文件的牽制而不很流行。 目前,最好的選擇是Firefox它有內(nèi)置的SVG支持,或具有Adobe SVG插件的IE。下面通過(guò)一個(gè)實(shí)例生成SVG文件。
代碼:
以下為引用的內(nèi)容: <?php require_once('Image/3D.php'); $rot_x = 45; $rot_y = 45; $rot_z = 10; $image = new Image_3D(); $image->setColor(new Image_3D_Color(255, 255, 255)); for ($x=0; $x < 4; $x++) { for ($y=0; $y < 4; $y++) { for ($z=0; $z < 4; $z++) { //創(chuàng)建球體 $sphere = $image->createObject('sphere', array('r' => 25, 'detail' => 3)); //后面150用于設(shè)置圖像透明度 $sphere->setColor(new Image_3D_Color(255, 162, 0, 150)); $sphere->transform($image->createMatrix('Move', array(($x * 75) + 50, $y * 75, $z * 75))); $sphere->transform($image->createMatrix('Rotation', array($rot_x, $rot_y, $rot_z))); } } } $image->transform($image->createMatrix('Move', array(-225, -100, 0))); $image->createRenderer('perspectively'); //使用SVG驅(qū)動(dòng)生成矢量圖 $image->createDriver('svg'); $image->render(600, 600, 'anim.svg'); header('Location:anim.svg'); ?> |
效果圖:
墨者資訊www
輸出的SVG文件打開(kāi)后,其格式即為XML:
以下為引用的內(nèi)容: <?xml version="1.0" ?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="600" height="600"> <defs id="defs16387"> </defs> <polygon id="background1" points="0,0 600,0 600,600 0,600" style="fill: #ffffff; fill-opacity: 1.00; stroke: none;" /> <polygon points="325.87,264.90 323.53,258.51 321.87,262.52" style="fill: #ffa200; fill-opacity: 0.41; stroke: none;" /> <polygon points="319.40,256.07 321.87,262.52 323.53,258.51" style="fill: #ffa200; fill-opacity: 0.41; stroke: none;" /> ... ... <polygon points="230.72,174.08 236.47,190.12 226.95,185.47" style="fill: #ffa200; fill-opacity: 0.41; stroke: none;" /> <polygon points="230.72,174.08 252.69,180.70 236.47,190.12" style="fill: #ffa200; fill-opacity: 0.41; stroke: none;" /> </svg> |
分享:解析php生成靜態(tài)頁(yè)面的辦法首先說(shuō)原理。某駝查了那么多資料,發(fā)現(xiàn)不管用什么方法,原理都是一樣的。就是用程序讀取相應(yīng)的數(shù)據(jù)來(lái)替換模版中的變量,然后生成靜態(tài)頁(yè)。php中主要用到的就是要用到fread()和fwirte()。而靜態(tài)頁(yè)面生成了之后,就會(huì)牽扯到修改的問(wèn)題。這里可以用到正則匹配的
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁(yè)面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪(fǎng)問(wèn)控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語(yǔ)言構(gòu)造器介紹
- php/js獲取客戶(hù)端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國(guó)語(yǔ)言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- 簡(jiǎn)捷PHP數(shù)組賦值方法詳解
- PHP實(shí)例:用PHP編寫(xiě)的網(wǎng)上調(diào)查投票系統(tǒng)
- 動(dòng)態(tài)網(wǎng)頁(yè)P(yáng)HP中引用
- php實(shí)現(xiàn)多張圖片上傳加水印技巧
- 很有用的文件操作php函數(shù)
- 十天學(xué)會(huì)php之第七天
- PHP讀取漢字點(diǎn)陣數(shù)據(jù)
- 淺析Dos下運(yùn)行php.exe,出現(xiàn)沒(méi)有找到php_mbstring.dll 錯(cuò)誤的解決方法
- 解析CI即CodeIgniter框架在Nginx下的重寫(xiě)規(guī)則
- 使用PHP采集遠(yuǎn)程圖片
- 相關(guān)鏈接:
- 教程說(shuō)明:
PHP教程-解析PHP繪制3D圖形之自定義圖形及矢量圖。