diff options
Diffstat (limited to 'js/lib/rdge')
-rwxr-xr-x | js/lib/rdge/materials/bump-metal-material.js | 58 | ||||
-rw-r--r-- | js/lib/rdge/texture.js | 285 |
2 files changed, 340 insertions, 3 deletions
diff --git a/js/lib/rdge/materials/bump-metal-material.js b/js/lib/rdge/materials/bump-metal-material.js index 2ef83227..9c9a189a 100755 --- a/js/lib/rdge/materials/bump-metal-material.js +++ b/js/lib/rdge/materials/bump-metal-material.js | |||
@@ -6,6 +6,8 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot | |||
6 | 6 | ||
7 | var MaterialParser = require("js/lib/rdge/materials/material-parser").MaterialParser; | 7 | var MaterialParser = require("js/lib/rdge/materials/material-parser").MaterialParser; |
8 | var Material = require("js/lib/rdge/materials/material").Material; | 8 | var Material = require("js/lib/rdge/materials/material").Material; |
9 | var Texture = require("js/lib/rdge/texture").Texture; | ||
10 | |||
9 | /////////////////////////////////////////////////////////////////////// | 11 | /////////////////////////////////////////////////////////////////////// |
10 | // Class GLMaterial | 12 | // Class GLMaterial |
11 | // RDGE representation of a material. | 13 | // RDGE representation of a material. |
@@ -18,8 +20,13 @@ var BumpMetalMaterial = function BumpMetalMaterial() { | |||
18 | this._shaderName = "bumpMetal"; | 20 | this._shaderName = "bumpMetal"; |
19 | 21 | ||
20 | this._lightDiff = [0.3, 0.3, 0.3, 1.0]; | 22 | this._lightDiff = [0.3, 0.3, 0.3, 1.0]; |
21 | this._diffuseTexture = "assets/images/metal.png"; | 23 | |
22 | this._specularTexture = "assets/images/silver.png"; | 24 | //this._diffuseTexture = "assets/images/metal.png"; |
25 | this._diffuseTexture = "texture"; | ||
26 | this._diffuseWorld = null; // the world that the texture is derived from (if there is one). | ||
27 | this._diffuseTextureObj = null; | ||
28 | |||
29 | this._specularTexture = "assets/images/silver.png"; | ||
23 | this._normalTexture = "assets/images/normalMap.png"; | 30 | this._normalTexture = "assets/images/normalMap.png"; |
24 | 31 | ||
25 | /////////////////////////////////////////////////////////////////////// | 32 | /////////////////////////////////////////////////////////////////////// |
@@ -119,12 +126,53 @@ var BumpMetalMaterial = function BumpMetalMaterial() { | |||
119 | this._materialNode = createMaterialNode( this.getShaderName() + "_" + world.generateUniqueNodeID() ); | 126 | this._materialNode = createMaterialNode( this.getShaderName() + "_" + world.generateUniqueNodeID() ); |
120 | this._materialNode.setShader(this._shader); | 127 | this._materialNode.setShader(this._shader); |
121 | 128 | ||
129 | // DEBUG CODE | ||
130 | this.initWorldTextures(); | ||
131 | |||
122 | // set some image maps | 132 | // set some image maps |
123 | this.updateTexture(1); | 133 | this.updateTexture(1); |
124 | this.updateTexture(2); | 134 | this.updateTexture(2); |
125 | this.updateTexture(3); | 135 | this.updateTexture(3); |
126 | }; | 136 | }; |
127 | 137 | ||
138 | this.initWorldTextures = function() | ||
139 | { | ||
140 | // find the world with the given id | ||
141 | var viewUtils = require("js/helper-classes/3D/view-utils").ViewUtils; | ||
142 | var root = viewUtils.application.ninja.currentDocument.documentRoot; | ||
143 | this._diffuseWorld = this.findWorld( this._diffuseTexture, root ); | ||
144 | if (this._diffuseWorld) | ||
145 | { | ||
146 | var world = this.getWorld(); | ||
147 | var tex = new Texture( world ); | ||
148 | this._diffuseTextureObj = tex; | ||
149 | tex.loadFromCanvas( world.getCanvas() ); | ||
150 | } | ||
151 | } | ||
152 | |||
153 | this.findWorld = function( id, elt ) | ||
154 | { | ||
155 | if (elt.id && elt.id === id) | ||
156 | { | ||
157 | if (elt.elementModel && elt.elementModel.shapeModel && elt.elementModel.shapeModel.GLWorld) | ||
158 | { | ||
159 | var world = elt.elementModel.shapeModel.GLWorld; | ||
160 | return world; | ||
161 | } | ||
162 | } | ||
163 | |||
164 | if (elt.children) | ||
165 | { | ||
166 | var nKids = elt.children.length; | ||
167 | for (var i=0; i<nKids; i++) | ||
168 | { | ||
169 | var child = elt.children[i]; | ||
170 | var world = this.findWorld( id, child ); | ||
171 | if (world) return world; | ||
172 | } | ||
173 | } | ||
174 | } | ||
175 | |||
128 | this.updateTexture = function( index ) | 176 | this.updateTexture = function( index ) |
129 | { | 177 | { |
130 | var material = this._materialNode; | 178 | var material = this._materialNode; |
@@ -136,7 +184,11 @@ var BumpMetalMaterial = function BumpMetalMaterial() { | |||
136 | { | 184 | { |
137 | var texMapName = this._propValues[this._propNames[index]]; | 185 | var texMapName = this._propValues[this._propNames[index]]; |
138 | var wrap = 'REPEAT', mips = true; | 186 | var wrap = 'REPEAT', mips = true; |
139 | var tex = this.loadTexture( texMapName, wrap, mips ); | 187 | var tex; |
188 | if ((index === 1) && this._diffuseTextureObj) | ||
189 | tex = this._diffuseTextureObj.getTexture(); | ||
190 | else | ||
191 | tex = this.loadTexture( texMapName, wrap, mips ); | ||
140 | 192 | ||
141 | if (tex) | 193 | if (tex) |
142 | { | 194 | { |
diff --git a/js/lib/rdge/texture.js b/js/lib/rdge/texture.js new file mode 100644 index 00000000..c72864b8 --- /dev/null +++ b/js/lib/rdge/texture.js | |||
@@ -0,0 +1,285 @@ | |||
1 | /* <copyright> | ||
2 | This file contains proprietary software owned by Motorola Mobility, Inc.<br/> | ||
3 | No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/> | ||
4 | (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. | ||
5 | </copyright> */ | ||
6 | |||
7 | var Material = require("js/lib/rdge/materials/material").Material; | ||
8 | |||
9 | /////////////////////////////////////////////////////////////////////// | ||
10 | // Class GLTexture | ||
11 | // GL representation of a texture. | ||
12 | /////////////////////////////////////////////////////////////////////// | ||
13 | function Texture( dstWorld ) | ||
14 | { | ||
15 | /////////////////////////////////////////////////////////////////////// | ||
16 | // Instance variables | ||
17 | /////////////////////////////////////////////////////////////////////// | ||
18 | this._texture; | ||
19 | |||
20 | // texture attributes | ||
21 | this._texMapName; | ||
22 | this._wrap; | ||
23 | this._mips; | ||
24 | |||
25 | this._srcCanvas; // the canvas generating the texture map. | ||
26 | this._dstWorld; // the world that will use the texture map | ||
27 | this._dstWorld = dstWorld; | ||
28 | |||
29 | /////////////////////////////////////////////////////////////////////// | ||
30 | // Property Accessors | ||
31 | /////////////////////////////////////////////////////////////////////// | ||
32 | this.getTexture = function() { return this._texture; } | ||
33 | |||
34 | this.setSrcWorld = function(w) { this._srcWorld = w; } | ||
35 | this.getSrcWorld = function() { return this._srcWorld; } | ||
36 | |||
37 | this.setDstWorld = function(w) { this._dstWorld = w; } | ||
38 | this.getDstWorld = function() { return this._dstWorld; } | ||
39 | |||
40 | /////////////////////////////////////////////////////////////////////// | ||
41 | // Methods | ||
42 | /////////////////////////////////////////////////////////////////////// | ||
43 | |||
44 | this.loadFromFile = function( texMapName, wrap, mips ) | ||
45 | { | ||
46 | var tex = this._texture; | ||
47 | this._srcCanvas = null; | ||
48 | |||
49 | // only load if something has changed | ||
50 | if (this._texMapName !== texMapName) // does RDGE allow us to change wrap or mips? | ||
51 | { | ||
52 | this._texMapName = texMapName.slice(); | ||
53 | this._wrap = wrap; | ||
54 | this._mips = mips; | ||
55 | |||
56 | var dstWorld = this.getDstWorld(); | ||
57 | if (dstWorld) | ||
58 | { | ||
59 | var renderer = dstWorld.getRenderer(); | ||
60 | tex = renderer.getTextureByName(texMapName, wrap, mips ); | ||
61 | this._texture = tex; | ||
62 | dstWorld.textureToLoad( tex ); | ||
63 | } | ||
64 | } | ||
65 | |||
66 | return tex; | ||
67 | } | ||
68 | |||
69 | var __texCounter = 0; | ||
70 | |||
71 | /* | ||
72 | this.loadFromCanvas = function( srcCanvas, wrap, mips ) | ||
73 | { | ||
74 | this._texMapName = "GLTexture_" + __texCounter; | ||
75 | __texCounter++; | ||
76 | |||
77 | //if (elt.elementModel && elt.elementModel.shapeModel && elt.elementModel.shapeModel.GLWorld) | ||
78 | var world = this.getDstWorld(); | ||
79 | var renderer = world.getRenderer(); | ||
80 | |||
81 | // set default values for wrap and mips | ||
82 | if (wrap === undefined) | ||
83 | wrap = "REPEAT"; | ||
84 | if (mips === undefined) | ||
85 | mips = true; | ||
86 | |||
87 | var imageData; | ||
88 | var width = srcCanvas.width, height = srcCanvas.height; | ||
89 | width = 64; height = 64; // some even power of 2 for now... | ||
90 | |||
91 | // create a canvas to be used as the image for the texture map | ||
92 | var doc = srcCanvas.ownerDocument; | ||
93 | var dstCanvas = doc.createElement("canvas"); | ||
94 | dstCanvas.width = width; | ||
95 | dstCanvas.height = height; | ||
96 | var dstCtx = dstCanvas.getContext("2d"); | ||
97 | |||
98 | var tex; | ||
99 | var srcCtx = srcCanvas.getContext("2d"); | ||
100 | if (srcCtx) | ||
101 | { | ||
102 | tex = renderer.getTextureByName(this._texMapName, wrap, mips ); | ||
103 | imageData = srcCtx.getImageData( 0, 0, width, height ); | ||
104 | dstCtx.putImageData( imageData, 0, 0 ); | ||
105 | } | ||
106 | else | ||
107 | { | ||
108 | tex = renderer.getTextureByName(this._texMapName, wrap, mips ); | ||
109 | //tex = world.getGLContext().createTexture(); | ||
110 | tex.image = new Image; | ||
111 | tex.wrap = wrap; | ||
112 | tex.mips = mips; | ||
113 | |||
114 | srcCtx = srcCanvas.getContext("experimental-webgl"); | ||
115 | if (srcCtx) | ||
116 | { | ||
117 | // var data = new Uint8Array(width * height * 4); | ||
118 | // srcCtx.readPixels(0, 0, width, height, srcCtx.RGBA, srcCtx.UNSIGNED_BYTE, data); | ||
119 | // console.log( "pixel 0: " + data[width+0] + ", " + data[width+1] + ", " + data[width+2] + ", " + data[width+3] ); | ||
120 | // | ||