#VRML V2.0 utf8
PROTO BlickTexture [
field SFColor brickColor 0.5 0 0
field SFFloat bumpRate 0
]
{
# ピクセルテクスチャー
DEF PT PixelTexture {}
# テクスチャー作成スクリプト
DEF Sc Script {
eventOut SFImage image
field SFColor brkCol IS brickColor
field SFFloat bpRate IS bumpRate
field SFInt32 dt 64 # テクスチャーの1辺のピクセル数
url "javascript:
function initialize () {
// 基本色
var baseR = Math.floor ( brkCol.r * 255 );
var baseG = Math.floor ( brkCol.g * 255 );
var baseB = Math.floor ( brkCol.b * 255 );
var baseCol = baseR * 65536 + baseG * 256 + baseB;
// 凹凸率
var bRate = Math.max ( 0, Math.min ( 128, 128 * bpRate ));
var bR = baseR - bRate / 2;
var bG = baseG - bRate / 2;
var bB = baseB - bRate / 2;
// 繋ぎ目の明るい色
var LR = Math.min ( 255, baseR + 40 );
var LG = Math.min ( 255, baseG + 40 );
var LB = Math.min ( 255, baseB + 40 );
var LCol = LR * 65536 + LG * 256 + LB;
// 繋ぎ目の暗い色
var DR = Math.max ( 0, baseR - 40 );
var DG = Math.max ( 0, baseG - 40 );
var DB = Math.max ( 0, baseB - 40 );
var DCol = DR * 65536 + DG * 256 + DB;
var ary = new MFInt32 ();
var px = dt * (dt - 1);
// 凹凸含めて表面を描く
var i,ra,r,g,b;
for ( i = 0; i < px; i++ ) {
ra = Math.random() * bRate;
r = Math.max ( 0, Math.min ( 255, Math.floor ( ra + bR )));
g = Math.max ( 0, Math.min ( 255, Math.floor ( ra + bG )));
b = Math.max ( 0, Math.min ( 255, Math.floor ( ra + bB )));
ary[i] = r * 65536 + g * 256 +b;
}
// 繋ぎ目を描く
var s,t;
var dtp2 = dt / 2;
for ( s = 0; s < dt; s++ ) {
ary[s ] = DCol;
ary[s + ( dt - 1 ) * dt] = LCol;
ary[s + ( dtp2 + 1 ) * dt] = DCol;
ary[s + dtp2 * dt] = LCol;
}
for ( t = 1; t <= dtp2; t++ ) {
ary[ t * dt] = DCol;
ary[dt - 1 + t * dt] = LCol;
}
for ( t = dtp2 + 2; t < dt; t++) {
ary[dtp2 + 1 + t * dt] = DCol;
ary[dtp2 + t * dt] = LCol;
}
image = new SFImage ( dt, dt, 3, ary );
}
"
}
ROUTE Sc.image TO PT.image
}
# ====== PROTO BlickTexture End ===================================================================================
Viewpoint {
position 0 1.6 5
description "initial"
}
Viewpoint {
position 0 1.6 5
orientation 1 0 0 0.7
description "ceiling"
}
Viewpoint {
position 0 1.6 5
orientation 1 0 0 -0.7
description "floor"
}
NavigationInfo {
type "WALK"
headlight FALSE
}
PointLight {
location 0 3 0
}
# 床
Transform {
translation 3.5 -0.1 3.5
children [
DEF Floor-Sp Shape {
appearance Appearance {
texture BlickTexture {
brickColor 0.5 0.3 0
bumpRate 0.3
}
textureTransform TextureTransform {
scale 6 14
rotation 1.5708
}
material DEF Mt Material {}
}
geometry Box {
size 7 0.2 7
}
}
]
}
Transform {
translation -3.5 -0.1 3.5
children USE Floor-Sp
}
Transform {
translation 3.5 -0.1 -3.5
children USE Floor-Sp
}
Transform {
translation -3.5 -0.1 -3.5
children USE Floor-Sp
}
# 天井
Transform {
translation 3.5 5 3.5
children [
DEF Ceiling-Sp Shape {
appearance Appearance {
texture BlickTexture {
brickColor 0.8 0.6 0.4
bumpRate 0.5
}
textureTransform TextureTransform {
scale 5 2.5
}
material DEF Mt Material {}
}
geometry Box {
size 7 0.2 7
}
}
]
}
Transform {
translation -3.5 5 3.5
children USE Ceiling-Sp
}
Transform {
translation 3.5 5 -3.5
children USE Ceiling-Sp
}
Transform {
translation -3.5 5 -3.5
children USE Ceiling-Sp
}
# 壁
DEF Walls-Gp Group {
children [
Transform {
translation 2.5 2.5 -5
children [
DEF Wall-Sp Shape {
appearance Appearance {
texture DEF Stone-BT BlickTexture {
brickColor 0.6 0.6 0.6
bumpRate 0.1
}
textureTransform TextureTransform {
scale 8 8
}
material USE Mt
}
geometry Box {
size 5 5 0.2
}
}
]
}
Transform {
translation -2.5 2.5 -5
children USE Wall-Sp
}
Transform {
translation 3.2 2.5 5
children USE Wall-Sp
}
Transform {
translation -3.2 2.5 5
children USE Wall-Sp
}
]
}
Transform {
rotation 0 1 0 1.5708
children USE Walls-Gp
}
# 柱
Transform {
translation 5 2.5 -5
children [
DEF Piller-Sp Shape {
appearance Appearance {
texture USE Stone-BT
textureTransform TextureTransform {
scale 1.6 8
}
material USE Mt
}
geometry Box {
size 1 5 1
}
}
]
}
Transform {
translation -5 2.5 -5
children USE Piller-Sp
}
Transform {
translation 5 2.5 5
children USE Piller-Sp
}
Transform {
translation -5 2.5 5
children USE Piller-Sp
}
Transform {
translation 0.8 2.5 5
children [
DEF Piller2-Sp Shape {
appearance Appearance {
texture USE Stone-BT
textureTransform TextureTransform {
scale 0.8 8
}
material USE Mt
}
geometry Box {
size 0.5 5 0.5
}
}
]
}
Transform {
translation -0.8 2.5 5
children USE Piller2-Sp
}
Transform {
translation 5 2.5 -0.8
children USE Piller2-Sp
}
Transform {
translation 5 2.5 0.8
children USE Piller2-Sp
}
# 暖炉
Transform {
translation 0 0.1 -4.5
children [
DEF Fireplace0-Sp Shape {
appearance Appearance {
texture DEF Fireplace-BT BlickTexture {
brickColor 0.6 0.1 0
bumpRate 0.3
}
textureTransform TextureTransform {
scale 3 3
}
material DEF Mt Material {}
}
geometry Box {
size 2 0.2 1
}
}
]
}
Transform {
translation -1.1 0.5 -4.5
children [
DEF Fireplace1-Sp Shape {
appearance Appearance {
texture USE Fireplace-BT
textureTransform TextureTransform {
scale 0.8 3
}
material DEF Mt Material {}
}
geometry Box {
size 0.4 1 1
}
}
]
}
Transform {
translation 1.1 0.5 -4.5
children USE Fireplace1-Sp
}
Transform {
translation 0 0.5 -4.8
children [
Shape {
appearance Appearance {
texture USE Fireplace-BT
textureTransform TextureTransform {
scale 3 3
}
material DEF Mt Material {}
}
geometry Box {
size 2 1 0.2
}
}
]
}
Transform {
translation 0 1.25 -4.5
children [
Shape {
appearance Appearance {
texture USE Fireplace-BT
textureTransform TextureTransform {
scale 5 1.5
}
material DEF Mt Material {}
}
geometry Box {
size 2.6 0.5 1
}
}
]
}
# 煙突
Transform {
translation 0 4 -5
children [
Shape {
appearance Appearance {
texture USE Fireplace-BT
textureTransform TextureTransform {
scale 10 15
}
material DEF Mt Material {}
}
geometry Cylinder {
radius 0.6
height 5
}
}
]
}