1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import maya.OpenMaya as OpenMaya
25 import maya.OpenMayaMPx as OpenMayaMPx
26 import maya.OpenMayaRender as OpenMayaRender
27 import maya.cmds as m
28 from maya.mel import eval as meval
29 import shaderBase
30
31 gl = OpenMayaRender.MHardwareRenderer.theRenderer().glFunctionTable()
34 - def __init__(self, nodePlug, resolution=(320,200)):
41
43 if self.texture:
44 gl.glDeleteTextures( 1, self.texture );
45 self.refresh=True;
46
49
51 uCoords = OpenMaya.MFloatArray()
52 vCoords = OpenMaya.MFloatArray()
53 filterSizes = OpenMaya.MFloatArray()
54 points = OpenMaya.MFloatPointArray()
55 refPoints = OpenMaya.MFloatPointArray()
56 normals = OpenMaya.MFloatVectorArray()
57 tanUs = OpenMaya.MFloatVectorArray()
58 tanVs = OpenMaya.MFloatVectorArray()
59 colors = OpenMaya.MFloatVectorArray()
60 transps = OpenMaya.MFloatVectorArray()
61
62
63 cameraPath = OpenMaya.M3dView.active3dView().getCamera( )
64 cameraMat = cameraPath.inclusiveMatrix().matrix
65
66 numSamples=0;
67 for x in range(self.w):
68 for y in range(self.h):
69 uCoords.append( x/float(self.w) )
70 vCoords.append( y/float(self.h) )
71 numSamples += 1
72
73
74 OpenMayaRender.MRenderUtil.sampleShadingNetwork(
75 node,
76 numSamples,
77 false,
78 false,
79 cameraMat,
80 points,
81 uCoords,
82 vCoords,
83 normals,
84 refPoints,
85 tanUs,
86 tanVs,
87 filterSizes,
88 colors,
89 transps
90 );
91
92 data = []
93 if colors.length()>0:
94 numSamples=0
95 for x in range(self.w):
96 for y in range(self.h):
97 data[numSamples*3+0] = colors[numSamples].x * 255
98 data[numSamples*3+1] = colors[numSamples].y * 255
99 data[numSamples*3+2] = colors[numSamples].z * 255
100 numSamples += 1
101 return data
102
104 if self.refresh:
105 self.texture = gl.glGenTextures( 1 )
106 gl.glBindTexture( gl.GL_TEXTURE_2D, self.texture )
107
108 gl.glTexParameterf( gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR )
109 gl.glTexParameterf( gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR )
110
111 gl.glTexImage2D(
112 gl.GL_TEXTURE_2D,
113 0,
114 gl.GL_RGB,
115 self.w, self.h,
116 0,
117 gl.GL_RGB,
118 gl.GL_UNSIGNED_BYTE,
119 self.sample()
120 )
121 self.refresh = False
122
123 if self.texture:
124 gl.glBindTexture( gl.GL_TEXTURE_2D, self.texture )
125
126
127
128 -class shaderLight( shaderBase.shaderBase, OpenMayaMPx.MPxLocatorNode ):
133 @staticmethod
135 ''' we override this method to return the proper object of this class '''
136 return OpenMayaMPx.asMPxPtr( shaderLight() )
137