PHP绘制3D图形

    PEAR提供了Image_3D Package来创建3D图像。图像或光线在3D空间中按照X、Y 、Z 坐标定位。生成的图像将呈现在2D空间中,可以存储为 PNG、SVG 格式,或输出到Shell。通过Image_3D可以很方便生成一些简单的3D对象,例如立方体、锥体、球体、文本和饼图。查了一下PEAR文档关于Image_3D的实例一个也没有~囧~,只好自己研究一下,将经验分享给大家,请多多拍砖。言归正传,Image_3D需要PEAR和GD(配置php.ini)的支持。

1. 安装Image_3D

下载Image_3D Package ,目前最新版本为:0.4.1 alpha

 

官方下载:http://pear.php.net/package/Image_3D/download

将压缩包放到有pear.bat的目录中,例如:c:\php,若是WAMP5的话则为c:\wamp\php。

执行 pear install Image_3D-0.4.1.gz  安装Package:

2009-8-27-11.55.51

安装完毕,Image_3D会在 C:\wamp\php\PEAR\Image 目录中。

 

2. 3D坐标系

Image_3D的坐标系及旋转请参考下图,用于缩放、旋转或移动物体:

xyz

3. 绘制圆锥体

代码如下:

<?php
//调用3D图形类
require_once('Image/3D.php');//创建一个三维空间
$image = new Image_3D();
$image->setColor(new Image_3D_Color(255, 255, 255));//在坐标系左下方创建一个红色光点
$light1 = $image->createLight("Light",array(-100, 100, -100));
$light1->setColor(new Image_3D_Color(255, 0, 0));//在坐标系右上方创建一个绿色光点
$light2 = $image->createLight("Light",array(100, -200, -50));
$light2->setColor(new Image_3D_Color(0, 200, 0));//创建3D圆锥体
$cone = $image->createObject('cone',array('detail'=>360));
$cone->setColor(new Image_3D_Color(255, 255, 255));
//按X,Y,Z轴缩放
$cone->transform($image->createMatrix('scale', array(80, 150, 80)));
//按X,Y,Z轴旋转
$cone->transform($image->createMatrix('rotation', array(15, 0, 20)));
//按X,Y,Z轴移动
$cone->transform($image->createMatrix('move', array(0, -50, 0)));//创建2D输出图像
//渲染效果,Image_3D共提供了种效果:Isometric,Perspectively,Raytrace
//参考...\PEAR\Image\3D\Renderer目录
$image->createRenderer('perspectively');
//图像驱动,也可以SVG,ASCII等
//参考...\PEAR\Image\3D\Driver目录
$image->createDriver('gd');
//创建输出图片名称及大小
$image->render(400, 300, 'object.png');
//显示效果图
echo '<img src="object.png">';
?>

效果图:

object

4. 3D文字效果

将上例创建3D圆锥体部分代码替换为:

//创建3D字体
$text = $image->createObject('text','cnblogs');
$text->setColor(new Image_3D_Color(255, 255, 255));
$text->transform($image->createMatrix('scale', array(10, 10, 20)));
$text->transform($image->createMatrix('rotation', array(20, 0, 20)));
$text->transform($image->createMatrix('move', array(-150, -100, 0)));

效果图:

object

源代码下载:






本文转自Gnie博客园博客,原文链接:http://www.cnblogs.com/gnielee/archive/2009/08/27/1555038.html,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

清除日志的sql

SET NOCOUNT ONDECLARE LogicalFileName sysname,MaxMinutes INT,NewSize INTUSE cms -- 要操作的数据库名SELECT LogicalFileName cms_log, -- 日志文件名MaxMinutes 10, -- Limit on time allowed to wrap log.NewSize 100 -- 你想设定的日志文件的大小(M)-- Setup / init…

r语言怎么以第二列绘制线图_用卫星图像绘制世界海岸线图-第二部分

r语言怎么以第二列绘制线图Part I of this blog series is here.本博客系列的第一部分 在这里 。 At the UKHO we are interested in the oceans, the seabed and the coastline — not to mention everything in and on them! In our previous blog, we (the UKHO Data Scien…

javascript创建类_如何在10分钟内使用JavaScript创建费用管理器

javascript创建类by Per Harald Borgen通过Per Harald Borgen 如何在10分钟内使用JavaScript创建费用管理器 (How to create an expense organizer with JavaScript in 10 minutes) 让我们使用ES6和Dropbox API来防止收据变得混乱。 (Let’s use ES6 and the Dropbox API to k…

豆瓣API

Api V2 索引 图书Api V2 电影Api V2 音乐Api V2 同城Api V2 广播Api V2 用户Api V2 日记Api V2 相册Api V2 线上活动Api V2 论坛Api V2 回复Api V2 我去Api V2 https://developers.douban.com/wiki/?titleapi_v2 搜索图书 GET https://api.douban.com/v2/book/search参数意义…

leetcode 485. 最大连续1的个数

给定一个二进制数组&#xff0c; 计算其中最大连续1的个数。 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1&#xff0c;所以最大连续1的个数是 3. 解题思路 遇到0时&#xff0c;将连续1的长度归零。遇到1时&#xff0c;累加进长度 代码 c…

HDU Today

经过锦囊相助&#xff0c;海东集团终于度过了危机&#xff0c;从此&#xff0c;HDU的发展就一直顺风顺水&#xff0c;到了2050年&#xff0c;集团已经相当规模了&#xff0c;据说进入了钱江肉丝经济开发区500强。这时候&#xff0c;XHD夫妇也退居了二线&#xff0c;并在风景秀美…

JSP基础--动作标签

JSP基础--动作标签 JSP动作标签 1 JSP动作标签概述 动作标签的作用是用来简化Java脚本的&#xff01; JSP动作标签是JavaWeb内置的动作标签&#xff0c;它们是已经定义好的动作标签&#xff0c;我们可以拿来直接使用。 如果JSP动作标签不够用时&#xff0c;还可以使用自定义标…

整数存储怎么转化为浮点数_非整数值如何存储在浮点数中(以及为什么要浮点数)...

整数存储怎么转化为浮点数by Shukant Pal通过Shukant Pal 非整数值如何存储在浮点数中(以及为什么要浮点数) (How non-integer values are stored in a float (and why it floats)) Did you ever think how computers work on floating-point numbers? I mean — where does …

rcp rapido_Rapido使用数据改善乘车调度

rcp rapidoGiven our last blog post of the series, which can be found here :鉴于我们在该系列中的最后一篇博客文章&#xff0c;可以在这里找到&#xff1a; We thought it would be helpful to explain how we implemented all of the above into an on-ground experimen…

LeetCode 695. Max Area of Island javascript解决方案

题意&#xff1a; 寻找最大岛。leetcode.com/problems/ma… 传入&#xff1a; [[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,1,1,0,1,0,0,0,0,0,0,0,0], [0,1,0,0,1,1,0,0,1,0,1,0,0], [0,1,0,0,1,1,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0], [0…

Mybatis—代理开发和核心配置文件深入

代理开发方式介绍 采用 Mybatis 的代理开发方式实现 DAO 层的开发&#xff0c;这种方式是我们后面进入企业的主流。 Mapper 接口开发方法只需要程序员编写Mapper 接口&#xff08;相当于Dao 接口&#xff09;&#xff0c;由Mybatis 框架根据接口定义创建接口的动态代理对象&a…

mysql 位操作支持

mysql 支持位操作。 & 位与 &#xff5c; 位或 例如&#xff1a;update car_ins_fee_entity set change_status(change_status | 1) where id12356转载于:https://www.cnblogs.com/sign-ptk/p/7278225.html

SSRS:之为用户“NT AUTHORITY\NETWORK SERVICE”授予的权限不足,无法执行此操作。 (rsAccessDenied)...

错误信息&#xff1a;为用户“NT AUTHORITY\NETWORK SERVICE”授予的权限不足&#xff0c;无法执行此操作。 (rsAccessDenied)如图&#xff1a;解决方案之检查顺序&#xff1a;1.检查报表的执行服务帐户。使用“ Reporting Services 配置管理器”。2.检查数据库安全 - 登录名 中…

javascript函数式_如何以及为什么在现代JavaScript中使用函数式编程

javascript函数式by PALAKOLLU SRI MANIKANTA通过PALAKOLLU SRI MANIKANTA In this article, you will get a deep understanding of functional programming and its benefits.在本文中&#xff0c;您将对函数式编程及其好处有深入的了解。 函数式编程简介 (Introduction To…

飞机上的氧气面罩有什么用_第2部分—另一个面罩检测器……(

飞机上的氧气面罩有什么用This article is part of a series where I will be documenting my journey on the development of a social distancing feedback system for the blind as part of the OpenCV Spatial Competition. Check out the full series: Part 1, Part 2.本文…

Laravel 5 4 实现前后台登录

在官网下载 Laravel 5.4 配置并能在访问 php artisan make:auth 复制代码生成后路由文件 routes/web.php ,自动有 Auth::routes();Route::get(/home, HomeControllerindex); 复制代码运行 php artisan migrate 复制代码执行命令后会生成 users 表和 password_resets 表&#xf…

leetcode 561. 数组拆分 I(排序)

给定长度为 2n 的整数数组 nums &#xff0c;你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) &#xff0c;使得从 1 到 n 的 min(ai, bi) 总和最大。 返回该 最大总和 。 示例 1&#xff1a; 输入&#xff1a;nums [1,4,3,2] 输出&#xff1a;4 解释…

经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)...

题目来源 P3376 【模板】网络最大流P2756 飞行员配对方案问题P3381 【模板】最小费用最大流最大流 最大流问题是网络流的经典类型之一&#xff0c;用处广泛&#xff0c;个人认为网络流问题最具特点的操作就是建反向边&#xff0c;这样相当于给了反悔的机会&#xff0c;不断地求…

Tensorflow笔记(基础): 图与会话,变量

图与会话 import tensorflow as tf import os# 取消打印 cpu,gpu选择等的各种警告 # 设置TF_CPP_MIN_LOG_LEVEL 的等级,1.1.0以后设置2后 只不显示警告,之前需要设置3,但设置3不利于调试 os.environ[TF_CPP_MIN_LOG_LEVEL] 2 import time# 创建一个常量 op, 产生一个 1x2 矩阵…

css左右布局代码_如何使用CSS位置来布局网站(带有示例代码)

css左右布局代码Using CSS position to layout elements on your website can be hard to figure out. What’s the difference between absolute, relative, fixed, and sticky? It can get confusing pretty quickly.使用CSS位置来布局网站上的元素可能很困难。 绝对&#x…