POV-Ray笔记_基础知识_实例详细注释

2023-12-13 22:58

本文主要是介绍POV-Ray笔记_基础知识_实例详细注释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一. 基础知识链接

官方文档:http://www.povray.org/documentation/3.7.0/t2_0.html

POV-Ray简单上手教程——坐标系统:https://blog.csdn.net/zhr_hadoop/article/details/51819337

X轴的正方向指向右边,Y轴正方向指向上,Z轴指向屏幕里

变形的关键字:

rotate:变形物体和纹理

scale:处理大小物体和纹理

translate:移动物体和纹理,相对于目前位置,要移动的变化量。

transformation标识符:一组变形操作可以融合在一起,存储到一个transformation标识符里,

matrix :一个转化矩阵可以用来完成更复杂的变化操作。

POV-Ray简单上手教程(学习笔记): https://blog.csdn.net/zhr_hadoop/article/details/51289804

POV-Ray简单上手教程——摄像机的使用: https://blog.csdn.net/zhr_hadoop/article/details/51763300

相机光圈的作用和应用:https://baijiahao.baidu.com/s?id=1606019929191876904&wfr=spider&for=pc

[CG编程] 基本光照模型:http://www.cnblogs.com/QG-whz/p/5189831.html?utm_source=tuicool&utm_medium=referral

图形学理论 光照模型:http://www.cnblogs.com/mengdd/archive/2013/08/05/3238123.html

POV-Ray简单上手教程-简单贴图/纹理设置:https://blog.csdn.net/zhr_hadoop/article/details/51706558

二. 一个例子及注释

1. 代码

#include "colors.inc"       //..\Documents\POV-Ray\v3.7\include
#include "shapes.inc"
#include "textures.inc"
#include "stones.inc" camera
{location <0,1.0,-10.0>   //决定相机位置:物体始终在屏幕中心,相机对着物体,沿着xyz方向平移look_at < 0.0,0,0.0>     //决定相机朝向:相机位置不动,屏幕中心移动//(有相机绕一个支点,沿着xyz轴方向转动的感觉)//angle 90               //距离物体的远近(放大缩小的感觉,范围0-180)focal_point <-7,0,13>    //焦点所落在的位置aperture   0.01          //小光圈大光图,即获得不同的聚焦效果;//值越小,关注的区域就越大(各个远近层次的物体都很清楚),反之,则小.blur_samples 20          //采样设置,值越大,采样点数越多,质量/分辨率越高的图像,//但相应的渲染时间就会长.
}
light_source { <5, 30, -30>  color White }    定义两个光源;关于x轴对称
light_source { <-5, 30, -30> color White }plane {                     定义一个平面y, -1.5                 //平面方程:y=-1.5pigment {               //着色;使用棋盘格checker color Gray65 color Gray30}
} sphere {<0,-0.3,-6>, 0.5        定义一个球体: 圆心+半径translate <0,0.5,-1>    //移动:相对于目前位置,要移动的变化量finish {ambient 0.1             //环境光diffuse 0.7             //物体漫反射光}pigment { LimeGreen }//texture { PinkAlabaster }finish  { phong 0.3}    //添加Phong光照模型,来产生高亮效果
}#declare my_box_transform = //自定义一个变换集合transform {rotate <40, 20, 20> //旋转: 绕xyz轴分别旋转40/20/30度translate <0.2,-2,0>scale 1.5           //缩放: 大小*1.1倍; 相当于向量<1.1, 1.1, 1.1>}  box {<2,1,-1>, <3,2,0>       定义一个立方体: 两个对角顶点//texture {				    //Method 1.棋盘格纹理模型// pigment {//    checker Red, White//    scale 0.25            //这个scale只影响texture//    }//}transform my_box_transform  finish {ambient 0.4diffuse 0.6}pigment {                   //Method 2.木质纹理模型wood                    //确定上色模式,这里是木制color_map {             //确定颜色向量是如何来安排颜色值[0.0 color DarkTan]   //从DarkTan到DarkBrown占据脉络的90%,[0.9 color DarkBrown] //而从DarkBrown到VeryDarkBrown占据了10%[1.0 color VeryDarkBrown]}turbulence 0.07         //调节模式的条纹脉络,褶皱强度scale <0.25,0.1,1>      //调节模式的大小,此处值越小纹理越密集} //pigment {DMFWood4 }       //Method 3.使用预定义的木质纹理
}  cylinder {                  定义一个圆柱体: 两个底面圆心+圆柱半径<-7, 0, 10>, <-7, 4, 10>, 3 rotate <10, 0, -10>translate <0,0,3>finish {ambient 1.9diffuse 0.1}//pigment {NeonBlue}texture {T_Stone24          //预定义纹理: 添加大理石纹理scale 0.9          //这个scale只影响纹理} normal {bumps 1.1          // 指定凸起的表观高度scale 0.03         // 指定直径大小(凸起间隔/高度).对颜色图案没有影响}
}

2.效果图

三. CSG Objects(构造立体几何)

(union 并集, intersection 交集, difference 差集, merge 融合的使用)

1.代码

#include "colors.inc"camera{location <0,1,-10>look_at 0angle 36rotate <0,20,0> //改变y的值,类似于相机绕着物体水平旋转一周
}
light_source{ <500,500,-1000> White }
plane{ y, -1.5pigment { checker Green White }
} //********************************************
#declare my_union = union{		            //两个物体的并集sphere{<0,0,0>, 1translate -0.5*x}sphere{<0,0,0>, 1translate 0.5*x}pigment { Blue }//scale  <1,0.25,1>//rotate <90,0,45>//translate 1.4*y
}#declare my_intersection = intersection{    //两个物体的交集(此处未着色一片黑)sphere{<0,0,0>, 1translate -0.5*x}sphere{<0,0,0>, 1translate 0.5*x}
}
#declare my_intersection_1 = intersection{  //两个物体的交集(此处着色后可见效果)object { my_intersection }pigment { Red }    //此处使用pigment 下面引用该object时,pigment中的filter(透明效果)将不起作用
}//-------------------------------
#declare my_differ = difference{object{my_intersectionrotate 90*y}cylinder{<0,0,-1>, <0,0,1>, 0.35}    
}#declare my_differ_1 = difference{object{my_differ}    pigment {Red}
}
//********************************************
//object {my_union} 
//object {my_intersection_1} 
//object {my_differ_1}  //union{
//    object {my_differ translate <-0.7, 0.7, 0>}
//    object {my_differ translate <0.7, 0.7, 0>}
//    object {my_differ translate <-0.7, -0.7, 0>}
//    object {my_differ translate <0.7, -0.7, 0>}
//    pigment {Red filter 0.5}
//}
merge{ //对比上面的union,类似但内部的融合去除了,多用在透明物体上 object {my_differ translate <-1.7, 0.5, 0>}object {my_differ translate <1.7, 0.5, 0>}object {my_differ translate <-0.7, -0.7, 0>}object {my_differ translate <0.7, -0.7, 0>}pigment {Red filter 0.5}
}

2.效果

这篇关于POV-Ray笔记_基础知识_实例详细注释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/490242

相关文章

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Python3.6连接MySQL的详细步骤

《Python3.6连接MySQL的详细步骤》在现代Web开发和数据处理中,Python与数据库的交互是必不可少的一部分,MySQL作为最流行的开源关系型数据库管理系统之一,与Python的结合可以实... 目录环境准备安装python 3.6安装mysql安装pymysql库连接到MySQL建立连接执行S

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1