bin/objview.pl
author Axel Jacobs <axel@jaloxa.eu>
Mon, 27 Jun 2011 23:42:35 +0100
changeset 26 a9f74601ca3c
parent 6 b5d9ad64026d
child 36 3e70c0b64ec7
permissions -rwxr-xr-x
xyzimage seems to work now. Upped status to 2.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     1
#!/usr/bin/perl
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     2
#
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     3
# Make a nice view of an object
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     4
# Arguments are scene input files
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     5
#
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     6
# This is a re-write of Greg's original objview.csh.
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     7
# The only extra functionality is that we accept a scene on STDIN
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     8
# if no file name is given.
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     9
#
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    10
# Axel, Oct 2010
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    11
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    12
use strict;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    13
use warnings;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    14
use File::Temp qw/ tempdir /;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    15
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    16
my $td = tempdir( CLEANUP => 1 );
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    17
my $octree = "$td/ov$$.oct";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    18
my $lights = "$td/lt$$.rad";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    19
my $rif = "$td/ov$$.rif";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    20
my $ambf = "$td/af$$.amb";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    21
my $raddev = "x11";   # default output device. Overwrite with -o
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    22
my $up = "Z";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    23
my $vw = "XYZ";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    24
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    25
my $opts = "";        # Options common to rad and glrad
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    26
my $rendopts = "";    # For render= line in rif file
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    27
my $usegl = 0;        # Run glrad instead of rad (Boolean).
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    28
my $radopt = 0;       # An option specific to rad was passed (Boolean).
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    29
my $glradopt = 0;     # An option specific to glrad was passed (Boolean).
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    30
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    31
while (@ARGV) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    32
	$_ = $ARGV[0];
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    33
	if (m/-g/) {   # OpenGL output
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    34
		$usegl = 1;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    35
	} elsif (m/-u/) {   # up direction
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    36
		$up = $ARGV[1];
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    37
		shift @ARGV;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    38
	} elsif ((m/-s/) or (m/-w/)) {   # silent, no warnings
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    39
		$opts .= " $_";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    40
	} elsif (m/-b/) {   # back face visibility
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    41
		$rendopts .= ' -bv';
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    42
	} elsif (m/-v/) {   # standard view "[Xx]?[Yy]?[Zz]?[vlcahs]?"
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    43
		# Let rad do any error handling...
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    44
		$vw = $ARGV[1];
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    45
		shift @ARGV;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    46
	} elsif (m/-N/) {   # No. of parallel processes
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    47
		$opts .= ' -N ' . $ARGV[1];
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    48
		$radopt = 1;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    49
		shift @ARGV;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    50
	} elsif (m/-o/) {   # output device (rvu -devices)
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    51
		$raddev = $ARGV[1];
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    52
		$radopt = 1;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    53
		shift @ARGV;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    54
	} elsif ((m/-V/) or (m/-e/)) {   # print view, explicate variables
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    55
		# Think of those two as '-verbose'.
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    56
		$opts .= " $_";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    57
		$radopt = 1;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    58
	} elsif (m/-S/) {   # full-screen stereo
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    59
		$opts .= " $_";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    60
		$glradopt = 1;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    61
	} elsif (m/^-\w/) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    62
		die("objview: Bad option: $_\n");
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    63
	} else {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    64
		last;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    65
	}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    66
	shift @ARGV;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    67
}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    68
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    69
# We need at least one Radiance file or a scene on STDIN
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    70
if ($#ARGV < 0) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    71
	open(FH, ">$td/stdin.rad") or 
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    72
			die("objview: Can't write to temporary file $td/stdin.rad\n");
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    73
	while (<>) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    74
		print FH;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    75
	}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    76
	# Pretend stdin.rad was passed as argument.
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    77
	@ARGV = ("$td/stdin.rad");
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    78
}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    79
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    80
# Make sure we don't confuse glrad and rad options.
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    81
if ($usegl) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    82
	if ($radopt) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    83
		#system "glrad";  # Why are we launching glrad anyhow?
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    84
		die("objview: glrad output requested, but rad option passed.\n");
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    85
	}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    86
} else {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    87
	if ($glradopt) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    88
		#system "rad";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    89
		die("objview: rad output requested, but glrad option passed.\n");
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    90
	}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    91
}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    92
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    93
open(FH, ">$lights") or
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    94
		die("objview: Can't write to temporary file $lights\n");
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    95
print FH <<EndOfLights;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    96
void glow dim  0  0  4  .1 .1 .15  0
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    97
dim source background  0  0  4  0 0 1  360
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    98
void light bright  0  0  3  1000 1000 1000
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    99
bright source sun1  0  0  4  1 .2 1  5
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   100
bright source sun2  0  0  4  .3 1 1  5
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   101
bright source sun3  0  0  4  -1 -.7 1  5
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   102
EndOfLights
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   103
close(FH);
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   104
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   105
my $scenes = join(' ', @ARGV) . " $lights";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   106
open(FH, ">$rif") or
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   107
		die("objview: Can't write to temporary file $rif\n");
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   108
print FH <<EndOfRif;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   109
scene= $scenes
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   110
EXPOSURE= .5
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   111
UP= $up
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   112
view= $vw
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   113
OCTREE= $octree
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   114
oconv= -f
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   115
AMBF= $ambf
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   116
render= $rendopts
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   117
EndOfRif
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   118
close(FH);
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   119
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   120
if ($usegl) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   121
	system "glrad $opts $rif";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   122
} else {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   123
	system "rad -o $raddev $opts $rif";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   124
}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   125
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   126
#EOF