bin/objpict.pl
author Axel Jacobs <axel@jaloxa.eu>
Thu, 30 Jan 2014 21:54:21 +0000
changeset 55 e00e7d28865e
parent 35 eaa48934a5bd
permissions -rwxr-xr-x
ltpict: Change default scale factor.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
35
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
     1
#!/usr/bin/perl
3
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     2
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     3
# Make a nice multi-view picture of an object
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     4
# Command line arguments contain materials and object files
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     5
#
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     6
# This is a re-write of Greg's objpict.csh and should be a drop-in
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     7
# replacement, with no funcionality added or removed
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     8
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
     9
use strict;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    10
use warnings;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    11
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    12
use File::Temp qw/ tempdir /;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    13
my $td = tempdir( CLEANUP => 1 );
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    14
18
eb4125f74a79 Added material file for test objects.
Axel Jacobs <axel@jaloxa.eu>
parents: 3
diff changeset
    15
my $xres = 1024;
eb4125f74a79 Added material file for test objects.
Axel Jacobs <axel@jaloxa.eu>
parents: 3
diff changeset
    16
my $yres = 1024;
3
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    17
my $rpict_cmd = "rpict -av .2 .2 .2 -x $xres -y $yres";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    18
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    19
my $testroom = "$td/testroom.rad";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    20
my $octree = "$td/op.oct";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    21
35
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    22
# We need at least one Radiance file or a scene on STDIN (but not both)
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    23
if ($#ARGV < 0) {
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    24
	open(FH, ">$td/stdin.rad") or 
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    25
			die("objview: Can't write to temporary file $td/stdin.rad\n");
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    26
	while (<>) {
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    27
		print FH;
3
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    28
	}
35
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    29
	# Pretend stdin.rad was passed as argument.
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    30
	@ARGV = ("$td/stdin.rad");
3
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    31
}
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    32
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    33
# Create some lights and a box as back drop.
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    34
# The objects and view points will be inside the box.
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    35
open(FH, ">$testroom") or
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    36
		die("Can\'t write to temporary file $testroom");
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    37
print FH <<EndOfTestroom;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    38
void plastic wall_mat  0  0  5  .681 .543 .686  0 .2
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    39
void light bright  0  0  3  3000 3000 3000
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    40
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    41
bright sphere lamp0  0  0  4  4 4 -4  .1
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    42
bright sphere lamp1  0  0  4  4 0 4  .1
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    43
bright sphere lamp2  0  0  4  0 4 4  .1
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    44
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    45
wall_mat polygon box.1540  0  0  12  5 -5 -5  5 -5 5  -5 -5 5  -5 -5 -5
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    46
wall_mat polygon box.4620  0  0  12  -5 -5 5  -5 5 5  -5 5 -5  -5 -5 -5
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    47
wall_mat polygon box.2310  0  0  12  -5 5 -5  5 5 -5  5 -5 -5  -5 -5 -5
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    48
wall_mat polygon box.3267  0  0  12  5 5 -5  -5 5 -5  -5 5 5  5 5 5
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    49
wall_mat polygon box.5137  0  0  12  5 -5 5  5 -5 -5  5 5 -5  5 5 5
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    50
wall_mat polygon box.6457  0  0  12  -5 5 5  -5 -5 5  5 -5 5  5 5 5
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    51
EndOfTestroom
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    52
close(FH);
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    53
35
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    54
my $dimstr = `getbbox -h @ARGV`;
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    55
chomp $dimstr;
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    56
# Values returned by getbbox are indented and delimited with multiple spaces.
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    57
$dimstr =~ s/^\s+//;   # remove leading spaces
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    58
my @dims = split(/\s+/, $dimstr);   # convert to array
3
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    59
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    60
# Find largest axes-aligned dimension
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    61
my @diffs = ($dims[1]-$dims[0], $dims[3]-$dims[2], $dims[5]-$dims[4]);
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    62
@diffs = reverse sort { $a <=> $b } @diffs;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    63
my $size = $diffs[0];
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    64
35
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    65
# Define the four views
3
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    66
my $vw1 = "-vtl -vp 2 .5 .5 -vd -1 0 0 -vh 1 -vv 1";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    67
my $vw2 = "-vtl -vp .5 2 .5 -vd 0 -1 0 -vh 1 -vv 1";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    68
my $vw3 = "-vtl -vp .5 .5 2 -vd 0 0 -1 -vu -1 0 0 -vh 1 -vv 1";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    69
my $vw4 = "-vp 3 3 3 -vd -1 -1 -1 -vh 20 -vv 20";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    70
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    71
# Move objects so centre is at origin
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    72
my $xtrans = -1.0 * ($dims[0] + $dims[1]) / 2;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    73
my $ytrans = -1.0 * ($dims[2] + $dims[3]) / 2;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    74
my $ztrans = -1.0 * ($dims[4] + $dims[5]) / 2;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    75
# Scale so that largest object dimension is unity
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    76
my $scale = 1 / $size;
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    77
35
eaa48934a5bd objpict: Working and tested under LINUX and Vista.
Axel Jacobs <axel@jaloxa.eu>
parents: 18
diff changeset
    78
my $cmd = "xform -t $xtrans $ytrans $ztrans -s $scale -t .5 .5 .5 @ARGV";
3
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    79
$cmd .= " |oconv $testroom - > $octree";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    80
system "$cmd";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    81
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    82
# Render four different views of the objects
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    83
system "$rpict_cmd $vw1 $octree > $td/right.hdr";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    84
system "$rpict_cmd $vw2 $octree > $td/front.hdr";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    85
system "$rpict_cmd $vw3 $octree > $td/down.hdr";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    86
system "$rpict_cmd $vw4 $octree > $td/oblique.hdr";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    87
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    88
# Compose the four views into one image
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    89
$cmd = "pcompos $td/down.hdr 0 $xres $td/oblique.hdr $xres $yres";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    90
$cmd .= " $td/right.hdr 0 0 $td/front.hdr $xres 0";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    91
$cmd .= " |pfilt -1 -r .6 -x /2 -y /2";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    92
exec "$cmd";
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    93
572fcaba44b9 Added objsomething.
Axel Jacobs <axel@jaloxa.eu>
parents:
diff changeset
    94
#EOF