RRV - Radiosity Renderer and Visualizer (C++, OpenGL)
File detail
Source code
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE scene SYSTEM "http://dudka.cz/dtd/scene.dtd">
<scene>
<head>
<objectdef name="xyplane">
<triangleset name="first" reflectivity=".9,.9,.9">
<triangle>
<vertex x="10.0" y="-10.0" z="0.0"/>
<vertex x="10.0" y="10.0" z="0.0"/>
<vertex x="-10.0" y="-10.0" z="0.0"/>
</triangle>
<trianglenext>
<vertex x="-10.0" y="10.0" z="0.0"/>
</trianglenext>
</triangleset>
</objectdef>
<objectdef name="xyplane-green">
<triangleset reflectivity=".6,.6,.6">
<triangle>
<vertex x="10.0" y="-10.0" z="0.0"/>
<vertex x="10.0" y="10.0" z="0.0"/>
<vertex x="-10.0" y="-10.0" z="0.0"/>
</triangle>
<trianglenext>
<vertex x="-10.0" y="10.0" z="0.0"/>
</trianglenext>
</triangleset>
</objectdef>
<objectdef name="black-barrel">
<barrel reflectivity='.1,.1,.1'/>
</objectdef>
<objectdef name="light-source">
<cuboid emission='1,1,1'/>
</objectdef>
<objectdef name="bulb-barrel">
<barrel reflectivity="1,1,.8"/>
</objectdef>
<objectdef name="bulb-globe">
<globe emission="1,1,.9"/>
</objectdef>
<objectdef name='teapot'>
<teapot reflectivity='.8,.8,0'/>
</objectdef>
<objectdef name="pillar">
<cuboid reflectivity=".9,.9,.9"/>
</objectdef>
<objectdef name="table">
<cuboid reflectivity=".3,.3,.9"/>
</objectdef>
</head>
<body>
<apply-macro name="viewScene"/>
<!-- Scene definition -->
<macro name="scene">
<!-- Room -->
<apply-macro name="room"/>
<!-- Pillars -->
<translate dx='5'>
<apply-macro name="v-pillar"/>
</translate>
<translate dz='5'>
<apply-macro name="v-pillar"/>
</translate>
<!-- Table -->
<translate dx='-3' dy='-7' dz='-3'>
<scale dx='8' dy='4' dz='8'>
<object name="table"/>
</scale>
</translate>
<!-- Teapot -->
<translate dx='-3' dy='-5' dz='-3'>
<scale dx='2' dy='1.5' dz='2'>
<rotate angle='-30' dy='1'>
<object name='teapot'/>
</rotate>
</scale>
</translate>
<!-- Lights -->
<translate dy='10'>
<translate dx='-5' dz='5'>
<apply-macro name="bulb"/>
</translate>
<translate dx='5' dz='-5'>
<apply-macro name="bulb"/>
</translate>
</translate>
<translate dx='-7' dy='-3' dz='-10'>
<rotate angle='90' dx='-1'>
<scale dx='.7' dy='.5' dz='.7'>
<apply-macro name="bulb"/>
</scale>
</rotate>
</translate>
</macro>
<!-- View definition -->
<macro name="viewScene">
<!--<translate dx='-2'>
<rotate angle='60' dy='1'>
<scale dx='1.5' dy='1.5' dz='1.8'>-->
<apply-macro name="scene"/>
<!--</scale>
</rotate>
</translate>-->
</macro>
<!-- Room definition -->
<macro name="room">
<translate dx='10'>
<rotate angle="90" dx="0" dy="1" dz="0">
<object name="xyplane"/>
</rotate>
</translate>
<translate dx='-10'>
<rotate angle="90" dx="0" dy="-1" dz="0">
<object name="xyplane"/>
</rotate>
</translate>
<translate dz='-10'>
<object name="xyplane"/>
</translate>
<translate dz='10'>
<rotate angle="180" dx="0" dy="1" dz="0">
<object name="xyplane"/>
</rotate>
</translate>
<translate dy='10'>
<rotate angle="90" dx="1" dy="0" dz="0">
<object name="xyplane"/>
</rotate>
</translate>
<translate dy='-10'>
<rotate angle="90" dx="-1" dy="0" dz="0">
<object name="xyplane"/>
<!-- <object name="xyplane-green"/>
-->
</rotate>
</translate>
</macro>
<macro name="bulb">
<scale dx="5" dy="5" dz="5">
<translate dy='-.5'>
<translate dy='-.5'>
<object name="bulb-globe"/>
</translate>
<scale dx='.5' dy='1' dz='.5'>
<object name="bulb-barrel"/>
</scale>
</translate>
</scale>
</macro>
<macro name="v-pillar">
<scale dx="3" dy="20" dz="3">
<object name="pillar"/>
</scale>
</macro>
</body>
</scene>