bin/objview.pl
author Axel Jacobs <axel@jaloxa.eu>
Sun, 15 Dec 2013 18:06:17 +0000
changeset 47 6856591c4c7c
parent 36 3e70c0b64ec7
permissions -rwxr-xr-x
New example EPW weather file
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
#
36
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
    10
# Axel, Nov 2013
6
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
36
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
    34
		if ( $^O =~ /MSWin32/ ) {
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
    35
			die("OpenGL view is not available under Windows.\n");
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
    36
		}
6
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    37
		$usegl = 1;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    38
	} elsif (m/-u/) {   # up direction
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    39
		$up = $ARGV[1];
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    40
		shift @ARGV;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    41
	} elsif ((m/-s/) or (m/-w/)) {   # silent, no warnings
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    42
		$opts .= " $_";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    43
	} elsif (m/-b/) {   # back face visibility
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    44
		$rendopts .= ' -bv';
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    45
	} elsif (m/-v/) {   # standard view "[Xx]?[Yy]?[Zz]?[vlcahs]?"
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    46
		# Let rad do any error handling...
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    47
		$vw = $ARGV[1];
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    48
		shift @ARGV;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    49
	} elsif (m/-N/) {   # No. of parallel processes
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    50
		$opts .= ' -N ' . $ARGV[1];
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    51
		$radopt = 1;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    52
		shift @ARGV;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    53
	} elsif (m/-o/) {   # output device (rvu -devices)
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    54
		$raddev = $ARGV[1];
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    55
		$radopt = 1;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    56
		shift @ARGV;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    57
	} elsif ((m/-V/) or (m/-e/)) {   # print view, explicate variables
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    58
		# Think of those two as '-verbose'.
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
		$radopt = 1;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    61
	} elsif (m/-S/) {   # full-screen stereo
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    62
		$opts .= " $_";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    63
		$glradopt = 1;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    64
	} elsif (m/^-\w/) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    65
		die("objview: Bad option: $_\n");
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    66
	} else {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    67
		last;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    68
	}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    69
	shift @ARGV;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    70
}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    71
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    72
# We need at least one Radiance file or a scene on STDIN
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    73
if ($#ARGV < 0) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    74
	open(FH, ">$td/stdin.rad") or 
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    75
			die("objview: Can't write to temporary file $td/stdin.rad\n");
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    76
	while (<>) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    77
		print FH;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    78
	}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    79
	# Pretend stdin.rad was passed as argument.
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    80
	@ARGV = ("$td/stdin.rad");
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    81
}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    82
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    83
# Make sure we don't confuse glrad and rad options.
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    84
if ($usegl) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    85
	if ($radopt) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    86
		die("objview: glrad output requested, but rad option passed.\n");
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    87
	}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    88
} else {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    89
	if ($glradopt) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    90
		die("objview: rad output requested, but glrad option passed.\n");
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
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    94
open(FH, ">$lights") or
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    95
		die("objview: Can't write to temporary file $lights\n");
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    96
print FH <<EndOfLights;
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    97
void glow dim  0  0  4  .1 .1 .15  0
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    98
dim source background  0  0  4  0 0 1  360
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    99
void light bright  0  0  3  1000 1000 1000
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   100
bright source sun1  0  0  4  1 .2 1  5
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   101
bright source sun2  0  0  4  .3 1 1  5
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   102
bright source sun3  0  0  4  -1 -.7 1  5
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   103
EndOfLights
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   104
close(FH);
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   105
36
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   106
my @scenes = @ARGV;
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   107
push (@scenes, $lights);
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   108
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   109
# Make this work under Windoze
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   110
if ( $^O =~ /MSWin32/ ) {
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   111
	for my $i (0 .. $#scenes) {
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   112
		# rad doesn't like Windows-style backslashes.
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   113
		$scenes[$i] =~ s{\\}{/}g;
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   114
	}
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   115
	$octree =~ s{\\}{/}g;
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   116
	$ambf =~ s{\\}{/}g;
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   117
	$raddev = "qt";
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   118
}
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   119
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   120
my $scene = join(' ', @scenes);
6
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   121
open(FH, ">$rif") or
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   122
		die("objview: Can't write to temporary file $rif\n");
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   123
print FH <<EndOfRif;
36
3e70c0b64ec7 objview: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 6
diff changeset
   124
scene= $scene
6
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   125
EXPOSURE= .5
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   126
UP= $up
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   127
view= $vw
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   128
OCTREE= $octree
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   129
oconv= -f
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   130
AMBF= $ambf
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   131
render= $rendopts
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   132
EndOfRif
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   133
close(FH);
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   134
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   135
if ($usegl) {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   136
	system "glrad $opts $rif";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   137
} else {
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   138
	system "rad -o $raddev $opts $rif";
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   139
}
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   140
b5d9ad64026d Added objview
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
   141
#EOF