POV-Ray

Persistence of Vision Raytracer (**POV-Ray**, tạm dịch: **Chương trình dò tia thị giác**) là một chương trình dò tia khả dụng cho nhiều nền tảng hệ điều hành khác nhau. Nguồn gốc phát triển là DKBTrace, viết bởi David Kirk Buck cùng với Aaron A. Collins. POV-Ray chịu những sự ảnh hưởng nhất định từ trình dò tia ra đời sớm hơn là Polyray của Alexander Enzmann. POV-Ray là phần mềm miễn phí với mã nguồn công khai.

## Lịch sử
Vào lúc nào đó giữa những năm 1980, David Kirk Buck đã tải mã nguồn dành cho một chương trình dò tia chạy trên Unix về chiếc máy tính Amiga của ông. Ông thực nghiệm với nó trong một thời gian, cuối cùng đi tới quyết định viết một trình dò tia của riêng mình, lấy tên DKBTrace từ các chữ cái đầu trong tên ông. Ông đã đăng nó trên một hệ thống bản thông tin trực tuyến, nghĩ rằng một ai khác có thể sẽ thích nó. Năm 1987, Aaron A. Collins đã tải xuống chương trình DKBTrace và bắt đầu thực hiện một hệ thống xuất dựa trên nền x86 của nó. Ông và David Buck đã hợp tác làm việc đề bổ sung thêm nhiều chức năng. Khi chương trình chứng tỏ được sự phô biến mạnh mẽ của nó hơn cả dự đoán, họ đã không thể giữ nguyên yêu cầu về các chức năng bổ sung. Thế nên, tháng 7 năm 1991 David chuyển cả dự án tới một nhóm các lập trình viên. Đồng thời, ông đã cảm thấy không thật thích đáng khi dùng các chữ cái viết tắt tên mình trong tên chương trình mà ông không còn tham gia phát triển. Cái tên "STAR" (Software Taskforce on Animation and Rendering) đã được cân nhắc, nhưng cuối cùng tên gọi chính thức là "Persistence of Vision Raytracer", hay gọi tắt là "POV-Ray".

POV-Ray là trình dò tia đầu tiên dùng để kết xuất một ảnh trong không gian, thực hiện bởi Mark Shuttleworth trong Trạm Vũ trụ Quốc tế.

Những đặc điểm của chương trình và tổng kết về lịch sử của nó đã được thảo luận ở một buổi phỏng vấn David Kirk Buck cùng với Chris Cason trong số 24 của tạp chí FLOSS Weekly (tuần san).

## Đặc điểm

POV-Ray đã trưởng thành một cách căn bản kể từ khi nó được tạo ra. Những phiên bản gần đây của phần mềm này có những chức năng sau đây:

* Một ngôn ngữ Turing complete (SDL) có hỗ trợ macro và vòng lặp.
* Thư viện những cảnh, họa đồ, và đối tượng dựng sẵn.
* Hỗ trợ một số những hình nguyên sinh cũng như hình khối đặc có cấu trúc.
* Một vài loại nguồn sáng.
* Các hiệu ứng môi trường khí quyển như sương mù hay (khói, mây)
* Sự phản xạ, khúc xạ, và tụ quang sử dụng phương pháp họa đồ quang tử
* Đặc tính bề mặt như bumps, và ripple (gợn sóng), dùng cho họa đồ thủ tục hay ánh xạ bump
* Bức xạ (tên gọi một phương pháp tính toán ánh sáng trong cảnh 3D)
* Các định dạng ảnh được hỗ trợ trong kết xuất và sử dụng như họa đồ bao gồm TGA, PNG, JPEG (chỉ nhập vào) và những định dạng khác.
* Tài liệu dành cho người dùng rất đầy đủ.

Một trong những sự hấp dẫn của POV-Ray là nó hỗ trợ nhiều thành phần mở rộng của các hãng thứ ba. Một số lượng lớn công cụ, họa đồ, mô hình, cảnh, cũng như các bài hướng dẫn có thể tìm thấy trên mạng. Nó cũng là nguồn tham khảo tốt cho những ai muốn học về các chương trình dò tia cũng như các giải thuật tính toán và vấn đề có liên quan khác.

### Phiên bản hiện tại
Phiên bản hiện tại chính thức của POV-Ray là 3.6. Một trong những chức năng chính của chương trình là:
* Mở rộng UV mapping cho nhiều hình nguyên sinh hơn.
* Adds 16 and 32 bit integer data to density file.
* Sửa nhiều lỗi chương trình cũng như tăng tốc quá trình xử lý.
* Tăng khả năng tương thích với các hệ thống 64bit.

### Các hình nguyên thủy

### Ví dụ về ngôn ngữ mô tả cảnh 3D

Phía dưới là ví dụ về ngôn ngữ mà POV-Ray dùng để mô tả một cảnh để dựng. Đoạn mã này mô tả việc sử dụng màu nền, camera, ánh sáng, một hộp có bề mặt bình thường và hiệu ứng chuyển đổi khi quay


```c
#version 3.6;
//Includes a separate file defining a number of common colours
 #include "colors.inc"
 global_settings { assumed_gamma 1.0 }

//Sets a background colour for the image (dark grey)
 background   { color rgb <0.25, 0.25, 0.25> }

//Places a camera
//direction: Sets, among other things, the field of view of the camera
//right: Sets the aspect ratio of the image
//look_at: Tells the camera where to look
 camera       { location  <0.0, 0.5, -4.0>
                direction 1.5*z
                right     x*image_width/image_height
                look_at   <0.0, 0.0, 0.0> }

//Places a light source
//color: Sets the color of the light source (white)
//translate: Moves the light source to a desired location
 light_source { <0, 0, 0>
                color rgb <1, 1, 1>
                translate <-5, 5, -5> }
//Places another light source
//color: Sets the color of the light source (dark grey)
//translate: Moves the light source to a desired location
 light_source { <0, 0, 0>
                color rgb <0.25, 0.25, 0.25>
                translate <6, -6, -6> }

//Sets a box
//pigment: Sets a color for the box ("Red" as defined in "colors.inc")
//finish: Sets how the surface of the box reflects light
//normal: Sets a bumpiness for the box using the "agate" in-built model
//rotate: Rotates the box
 box          { <-0.5, -0.5, -0.5>,
                <0.5, 0.5, 0.5>
                texture { pigment { color Red }
                          finish  { specular 0.6 }
                          normal  { agate 0.25 scale 1/2 }
                        }
                rotate <45,46,47> }
```


Đoạn mã dưới đây cho thấy việc khai báo biến, gán giá trị, so sánh và vòng lặp while trong dựng hình


```c
#declare the_angle = 0;

 #while (the_angle < 360)
 	box {   <-0.5, -0.5, -0.5>
 		<0.5, 0.5, 0.5>
                texture { pigment { color Red }
                          finish  { specular 0.6 }
                          normal  { agate 0.25 scale 1/2 } }
 		rotate the_angle }
 	#declare the_angle = the_angle + 45;
 #end
```


## Tạo hình
POV-Ray không đi kèm với chức năng tạo hình; nó chỉ là một trình dựng hình với ngôn ngữ tạo hình. Một số nhà phát triển bên thứ ba đã tạo ra nhiều chương trình tạo hình cho POV-Ray; một số dành riêng cho POV-Ray, một số cho phép nhập và xuất ra dữ liệu để POV-Ray dựng hình.

Một số trình tạo hình có thể được xem tại đây.
## Phần mềm
### Quá trình phát triển và duy trì
Tất cả các thay đổi chính thức trong cây mã nguồn của POV-Ray đều được hoàn thành và/hoặc chấp thuận bởi POV-Team. Hầu hết các thao tác gửi bản vá và/hoặc báo cáo lỗi đều được thực hiện trong nhóm tin tức của POV-Ray tại [nntp://news.povray.org/] (hay giao diện web). Vì POV-Ray có phát hành mã nguồn nên có khá nhiều bản chỉnh sửa và vá lỗi không chính thức từ bên thứ ba, và chúng không được hỗ trợ từ POV-Team.

Phiên bản chính thức hiện tại của POV-Ray không hỗ trợ plug-in đổ bóng. Một số tính năng như radiosity và spline vẫn còn đang trong giai đoạn thử nghiệm và có thể bị thay đổi.

### Nền tảng hỗ trợ
POV-Ray được phát hành dưới dạng đã biên dịch cho Windows, Macintosh và Linux. Phiên bản của Macintosh không hỗ trợ các máy Mac chạy bộ xử lý Intel nhưng vì Mac OS X chạy nhân UNIX nên có thể biên dịch phiên bản Linux để chạy. POV-Ray cũng có thể sử dụng trên bất kì các nền tảng nào có bộ biên dịch C++.

Các người dùng máy Mac chạy bộ xử lý Intel cũng có thể sử dụng MegaPOV, một phiên bản chỉnh sửa của POV-Ray.

Tuy nhiên, phiên bản 3.7 beta với sự hỗ trợ SMP mới chỉ hỗ trợ Windows và Linux.
### Giấy phép
POV-Ray được phát hành dưới **Giấy phép POV-Ray**. Giấy phép này cho phép phát hành miễn phí mã nguồn và bản đã biên dịch, nhưng lại hạn chế về việc phân phối vì mục đích lợi nhuận và sự thay đổi mã nguồn để tạo ra các phiên bản khác so với phiên bản gốc.

Mặc dù mã nguồn được phát hành cho việc sửa đổi, nhưng do một số hạn chế nên phân mềm này không được coi là phần mềm mã nguồn mở theo luật định của OSI. Một trong các lý do mà POV-Ray không được phát hành dưới giấy phép GNU GPL hay một giấy phép mã nguồn mở khác là vì POV-Ray được phát hành trước khi các giấy phép kiểu GPL trở nên phổ biến nên nhà phát triển phải tự viết ra một giấy phép cho nó, và các người tham gia viết chương trình này với sự cho rằng đóng góp của họ sẽ được phát hành dưới giấy phép POV-Ray.

Một phiên bản mới của POV-Ray được viết lại hoàn toàn (**POV-Ray 4.0**) đang được thảo luận và sẽ phát hành dưới một giấy phép dễ chịu hơn và có khả năng nhất là GNU GPL v3.

## Tham khảo

## Liên kết ngoài
*POV-Ray homepage
*