Module: Mittsu
- Defined in:
- lib/mittsu/materials/shader_material.rb,
lib/mittsu/math.rb,
lib/mittsu/version.rb,
lib/mittsu/math/ray.rb,
lib/mittsu/constants.rb,
lib/mittsu/math/box2.rb,
lib/mittsu/math/box3.rb,
lib/mittsu/core/clock.rb,
lib/mittsu/core/face3.rb,
lib/mittsu/math/color.rb,
lib/mittsu/math/euler.rb,
lib/mittsu/math/line3.rb,
lib/mittsu/math/plane.rb,
lib/mittsu/math/sphere.rb,
lib/mittsu/math/spline.rb,
lib/mittsu/extras/image.rb,
lib/mittsu/lights/light.rb,
lib/mittsu/math/frustum.rb,
lib/mittsu/math/matrix3.rb,
lib/mittsu/math/matrix4.rb,
lib/mittsu/math/vector2.rb,
lib/mittsu/math/vector3.rb,
lib/mittsu/math/vector4.rb,
lib/mittsu/objects/line.rb,
lib/mittsu/objects/mesh.rb,
lib/mittsu/scenes/scene.rb,
lib/mittsu/core/geometry.rb,
lib/mittsu/loaders/cache.rb,
lib/mittsu/math/triangle.rb,
lib/mittsu/objects/group.rb,
lib/mittsu/cameras/camera.rb,
lib/mittsu/core/object_3d.rb,
lib/mittsu/core/raycaster.rb,
lib/mittsu/loaders/loader.rb,
lib/mittsu/core/hash_array.rb,
lib/mittsu/math/quaternion.rb,
lib/mittsu/core/hash_object.rb,
lib/mittsu/textures/texture.rb,
lib/mittsu/lights/area_light.rb,
lib/mittsu/lights/spot_light.rb,
lib/mittsu/extras/image_utils.rb,
lib/mittsu/lights/point_light.rb,
lib/mittsu/loaders/mtl_loader.rb,
lib/mittsu/materials/material.rb,
lib/mittsu/cameras/cube_camera.rb,
lib/mittsu/loaders/file_loader.rb,
lib/mittsu/math/color_keywords.rb,
lib/mittsu/core/buffer_geometry.rb,
lib/mittsu/lights/ambient_light.rb,
lib/mittsu/loaders/image_loader.rb,
lib/mittsu/core/buffer_attribute.rb,
lib/mittsu/core/event_dispatcher.rb,
lib/mittsu/renderers/glfw_window.rb,
lib/mittsu/textures/cube_texture.rb,
lib/mittsu/textures/data_texture.rb,
lib/mittsu/loaders/obj_mtl_loader.rb,
lib/mittsu/textures/video_texture.rb,
lib/mittsu/lights/hemisphere_light.rb,
lib/mittsu/loaders/loading_manager.rb,
lib/mittsu/lights/directional_light.rb,
lib/mittsu/renderers/opengl_renderer.rb,
lib/mittsu/cameras/perspective_camera.rb,
lib/mittsu/cameras/orthographic_camera.rb,
lib/mittsu/textures/compressed_texture.rb,
lib/mittsu/extras/helpers/camera_helper.rb,
lib/mittsu/materials/mesh_face_material.rb,
lib/mittsu/renderers/shaders/shader_lib.rb,
lib/mittsu/core/dynamic_buffer_attribute.rb,
lib/mittsu/materials/line_basic_material.rb,
lib/mittsu/materials/mesh_basic_material.rb,
lib/mittsu/materials/mesh_phong_material.rb,
lib/mittsu/renderers/opengl/opengl_state.rb,
lib/mittsu/extras/geometries/box_geometry.rb,
lib/mittsu/renderers/opengl/opengl_shader.rb,
lib/mittsu/renderers/opengl_render_target.rb,
lib/mittsu/renderers/shaders/shader_chunk.rb,
lib/mittsu/renderers/shaders/uniforms_lib.rb,
lib/mittsu/materials/mesh_lambert_material.rb,
lib/mittsu/renderers/opengl/opengl_program.rb,
lib/mittsu/renderers/shaders/uniforms_utils.rb,
lib/mittsu/extras/geometries/sphere_geometry.rb,
lib/mittsu/renderers/opengl/plugins/shadow_map_plugin.rb
Overview
parameters =
color: <hex>,
emissive: <hex>,
specular: <hex>,
shininess: <float>,
opacity: <float>,
map: Texture.new(<Image>),
lightMap: Texture.new(<Image>),
bumpMap: Texture.new(<Image>),
bumpScale: <float>,
normalMap: Texture.new(<Image>),
normalScale: <Vector2>,
specularMap: Texture.new(<Image>),
alphaMap: Texture.new(<Image>),
envMap: TextureCube.new([posx, negx, posy, negy, posz, negz]),
combine: Multiply,
reflectivity: <float>,
refractionRatio: <float>,
shading: SmoothShading,
blending: NormalBlending,
depthTest: <bool>,
depthWrite: <bool>,
wireframe: <boolean>,
wireframeLinewidth: <float>,
vertexColors: NoColors / VertexColors / FaceColors,
skinning: <bool>,
morphTargets: <bool>,
morphNormals: <bool>,
fog: <bool>
Defined Under Namespace
Modules: Cache, EventDispatcher, GLFW, ImageUtils, Math, UniformsUtils Classes: AmbientLight, AreaLight, Box2, Box3, BoxGeometry, BufferAttribute, BufferGeometry, Camera, CameraHelper, Clock, Color, CompressedTexture, CubeCamera, CubeTexture, DataTexture, DirectionalLight, DynamicBufferAttribute, Euler, Face3, FileLoader, Frustum, Geometry, Group, HashArray, HashObject, HemisphereLight, Image, ImageLoader, Light, Line, Line3, LineBasicMaterial, Loader, LoadingManager, MTLLoader, Material, Matrix3, Matrix4, Mesh, MeshBasicMaterial, MeshFaceMaterial, MeshLambertMaterial, MeshPhongMaterial, OBJMTLLoader, Object3D, OpenGLProgram, OpenGLRenderTarget, OpenGLRenderer, OpenGLShader, OpenGLState, OrthographicCamera, PerspectiveCamera, Plane, PointLight, Quaternion, Ray, Raycaster, Scene, ShaderLib_Instance, ShaderMaterial, ShadowMapPlugin, Sphere, SphereGeometry, Spline, SpotLight, Texture, Triangle, Uniform, Vector2, Vector3, Vector4, VideoTexture
Constant Summary collapse
- VERSION =
"0.1.1"- REVISION =
"71"- MOUSE_LEFT =
0- MOUSE_MIDDLE =
1- MOUSE_RIGHT =
2- CullFaceNone =
GL STATE CONSTANTS
0- CullFaceBack =
1- CullFaceFront =
2- CullFaceFrontBack =
3- FrontFaceDirectionCW =
0- FrontFaceDirectionCCW =
1- BasicShadowMap =
SHADOWING TYPES
0- PCFShadowMap =
1- PCFSoftShadowMap =
2- FrontSide =
side
0- BackSide =
1- DoubleSide =
2- NoShading =
shading
false- FlatShading =
1- SmoothShading =
2- NoColors =
colors
false- FaceColors =
1- VertexColors =
2- NoBlending =
blending modes
false- NormalBlending =
1- AdditiveBlending =
2- SubtractiveBlending =
3- MultiplyBlending =
4- CustomBlending =
5- AddEquation =
custom blending equations (numbers start from 100 not to clash with other
mappings to OpenGL constants defined in texture.rb) 100- SubtractEquation =
101- ReverseSubtractEquation =
102- MinEquation =
103- MaxEquation =
104- ZeroFactor =
custom blending destination factors
200- OneFactor =
201- SrcColorFactor =
202- OneMinusSrcColorFactor =
203- SrcAlphaFactor =
204- OneMinusSrcAlphaFactor =
205- DstAlphaFactor =
206- OneMinusDstAlphaFactor =
207- DstColorFactor =
ZeroFactor = 200 OneFactor = 201 SrcAlphaFactor = 204 OneMinusSrcAlphaFactor = 205 DstAlphaFactor = 206 OneMinusDstAlphaFactor = 207
208- OneMinusDstColorFactor =
209- SrcAlphaSaturateFactor =
210- MultiplyOperation =
TEXTURE CONSTANTS
0- MixOperation =
1- AddOperation =
2- UVMapping =
Mapping modes
300- CubeReflectionMapping =
301- CubeRefractionMapping =
302- EquirectangularReflectionMapping =
303- EquirectangularRefractionMapping =
304- SphericalReflectionMapping =
305- RepeatWrapping =
Wrapping modes
1000- ClampToEdgeWrapping =
1001- MirroredRepeatWrapping =
1002- NearestFilter =
Filters
1003- NearestMipMapNearestFilter =
1004- NearestMipMapLinearFilter =
1005- LinearFilter =
1006- LinearMipMapNearestFilter =
1007- LinearMipMapLinearFilter =
1008- UnsignedByteType =
Data types
1009- ByteType =
1010- ShortType =
1011- UnsignedShortType =
1012- IntType =
1013- UnsignedIntType =
1014- FloatType =
1015- HalfFloatType =
1025- UnsignedShort4444Type =
UnsignedByteType = 1009
1016- UnsignedShort5551Type =
1017- UnsignedShort565Type =
1018- AlphaFormat =
Pixel formats
1019- RGBFormat =
1020- RGBAFormat =
1021- LuminanceFormat =
1022- LuminanceAlphaFormat =
1023- RGBEFormat =
RGBEFormat handled as RGBAFormat in shaders
RGBAFormat- RGB_S3TC_DXT1_Format =
DDS / ST3C Compressed texture formats
2001- RGBA_S3TC_DXT1_Format =
2002- RGBA_S3TC_DXT3_Format =
2003- RGBA_S3TC_DXT5_Format =
2004- RGB_PVRTC_4BPPV1_Format =
PVRTC compressed texture formats
2100- RGB_PVRTC_2BPPV1_Format =
2101- RGBA_PVRTC_4BPPV1_Format =
2102- RGBA_PVRTC_2BPPV1_Format =
2103- LineStrip =
0- LinePieces =
1- ColorKeywords =
{ 'aliceblue' => 0xF0F8FF, 'antiquewhite' => 0xFAEBD7, 'aqua' => 0x00FFFF, 'aquamarine' => 0x7FFFD4, 'azure' => 0xF0FFFF, 'beige' => 0xF5F5DC, 'bisque' => 0xFFE4C4, 'black' => 0x000000, 'blanchedalmond' => 0xFFEBCD, 'blue' => 0x0000FF, 'blueviolet' => 0x8A2BE2, 'brown' => 0xA52A2A, 'burlywood' => 0xDEB887, 'cadetblue' => 0x5F9EA0, 'chartreuse' => 0x7FFF00, 'chocolate' => 0xD2691E, 'coral' => 0xFF7F50, 'cornflowerblue' => 0x6495ED, 'cornsilk' => 0xFFF8DC, 'crimson' => 0xDC143C, 'cyan' => 0x00FFFF, 'darkblue' => 0x00008B, 'darkcyan' => 0x008B8B, 'darkgoldenrod' => 0xB8860B, 'darkgray' => 0xA9A9A9, 'darkgreen' => 0x006400, 'darkgrey' => 0xA9A9A9, 'darkkhaki' => 0xBDB76B, 'darkmagenta' => 0x8B008B, 'darkolivegreen' => 0x556B2F, 'darkorange' => 0xFF8C00, 'darkorchid' => 0x9932CC, 'darkred' => 0x8B0000, 'darksalmon' => 0xE9967A, 'darkseagreen' => 0x8FBC8F, 'darkslateblue' => 0x483D8B, 'darkslategray' => 0x2F4F4F, 'darkslategrey' => 0x2F4F4F, 'darkturquoise' => 0x00CED1, 'darkviolet' => 0x9400D3, 'deeppink' => 0xFF1493, 'deepskyblue' => 0x00BFFF, 'dimgray' => 0x696969, 'dimgrey' => 0x696969, 'dodgerblue' => 0x1E90FF, 'firebrick' => 0xB22222, 'floralwhite' => 0xFFFAF0, 'forestgreen' => 0x228B22, 'fuchsia' => 0xFF00FF, 'gainsboro' => 0xDCDCDC, 'ghostwhite' => 0xF8F8FF, 'gold' => 0xFFD700, 'goldenrod' => 0xDAA520, 'gray' => 0x808080, 'green' => 0x008000, 'greenyellow' => 0xADFF2F, 'grey' => 0x808080, 'honeydew' => 0xF0FFF0, 'hotpink' => 0xFF69B4, 'indianred' => 0xCD5C5C, 'indigo' => 0x4B0082, 'ivory' => 0xFFFFF0, 'khaki' => 0xF0E68C, 'lavender' => 0xE6E6FA, 'lavenderblush' => 0xFFF0F5, 'lawngreen' => 0x7CFC00, 'lemonchiffon' => 0xFFFACD, 'lightblue' => 0xADD8E6, 'lightcoral' => 0xF08080, 'lightcyan' => 0xE0FFFF, 'lightgoldenrodyellow' => 0xFAFAD2, 'lightgray' => 0xD3D3D3, 'lightgreen' => 0x90EE90, 'lightgrey' => 0xD3D3D3, 'lightpink' => 0xFFB6C1, 'lightsalmon' => 0xFFA07A, 'lightseagreen' => 0x20B2AA, 'lightskyblue' => 0x87CEFA, 'lightslategray' => 0x778899, 'lightslategrey' => 0x778899, 'lightsteelblue' => 0xB0C4DE, 'lightyellow' => 0xFFFFE0, 'lime' => 0x00FF00, 'limegreen' => 0x32CD32, 'linen' => 0xFAF0E6, 'magenta' => 0xFF00FF, 'maroon' => 0x800000, 'mediumaquamarine' => 0x66CDAA, 'mediumblue' => 0x0000CD, 'mediumorchid' => 0xBA55D3, 'mediumpurple' => 0x9370DB, 'mediumseagreen' => 0x3CB371, 'mediumslateblue' => 0x7B68EE, 'mediumspringgreen' => 0x00FA9A, 'mediumturquoise' => 0x48D1CC, 'mediumvioletred' => 0xC71585, 'midnightblue' => 0x191970, 'mintcream' => 0xF5FFFA, 'mistyrose' => 0xFFE4E1, 'moccasin' => 0xFFE4B5, 'navajowhite' => 0xFFDEAD, 'navy' => 0x000080, 'oldlace' => 0xFDF5E6, 'olive' => 0x808000, 'olivedrab' => 0x6B8E23, 'orange' => 0xFFA500, 'orangered' => 0xFF4500, 'orchid' => 0xDA70D6, 'palegoldenrod' => 0xEEE8AA, 'palegreen' => 0x98FB98, 'paleturquoise' => 0xAFEEEE, 'palevioletred' => 0xDB7093, 'papayawhip' => 0xFFEFD5, 'peachpuff' => 0xFFDAB9, 'peru' => 0xCD853F, 'pink' => 0xFFC0CB, 'plum' => 0xDDA0DD, 'powderblue' => 0xB0E0E6, 'purple' => 0x800080, 'red' => 0xFF0000, 'rosybrown' => 0xBC8F8F, 'royalblue' => 0x4169E1, 'saddlebrown' => 0x8B4513, 'salmon' => 0xFA8072, 'sandybrown' => 0xF4A460, 'seagreen' => 0x2E8B57, 'seashell' => 0xFFF5EE, 'sienna' => 0xA0522D, 'silver' => 0xC0C0C0, 'skyblue' => 0x87CEEB, 'slateblue' => 0x6A5ACD, 'slategray' => 0x708090, 'slategrey' => 0x708090, 'snow' => 0xFFFAFA, 'springgreen' => 0x00FF7F, 'steelblue' => 0x4682B4, 'tan' => 0xD2B48C, 'teal' => 0x008080, 'thistle' => 0xD8BFD8, 'tomato' => 0xFF6347, 'turquoise' => 0x40E0D0, 'violet' => 0xEE82EE, 'wheat' => 0xF5DEB3, 'white' => 0xFFFFFF, 'whitesmoke' => 0xF5F5F5, 'yellow' => 0xFFFF00, 'yellowgreen' => 0x9ACD32 }
- DefaultLoadingManager =
LoadingManager.new
- ShaderLib =
{ basic: ShaderLib_Instance.new( uniforms: UniformsUtils.merge([ UniformsLib[:common], UniformsLib[:fog], UniformsLib[:shadowmap] ]), vertex_shader: [ ShaderChunk[:common], ShaderChunk[:map_pars_vertex], ShaderChunk[:lightmap_pars_vertex], ShaderChunk[:envmap_pars_vertex], ShaderChunk[:color_pars_vertex], ShaderChunk[:morphtarget_pars_vertex], ShaderChunk[:skinning_pars_vertex], ShaderChunk[:shadowmap_pars_vertex], ShaderChunk[:logdepthbuf_pars_vertex], "void main() {", ShaderChunk[:map_vertex], ShaderChunk[:lightmap_vertex], ShaderChunk[:color_vertex], ShaderChunk[:skinbase_vertex], " #ifdef USE_ENVMAP", ShaderChunk[:morphnormal_vertex], ShaderChunk[:skinnormal_vertex], ShaderChunk[:defaultnormal_vertex], " #endif", ShaderChunk[:morphtarget_vertex], ShaderChunk[:skin_vertex], ShaderChunk[:default_vertex], ShaderChunk[:logdepthbuf_vertex], ShaderChunk[:worldpos_vertex], ShaderChunk[:envmap_vertex], ShaderChunk[:shadowmap_vertex], "}" ].join("\n"), fragment_shader: [ "uniform vec3 diffuse;", "uniform float opacity;", ShaderChunk[:common], ShaderChunk[:color_pars_fragment], ShaderChunk[:map_pars_fragment], ShaderChunk[:alphamap_pars_fragment], ShaderChunk[:lightmap_pars_fragment], ShaderChunk[:envmap_pars_fragment], ShaderChunk[:fog_pars_fragment], ShaderChunk[:shadowmap_pars_fragment], ShaderChunk[:specularmap_pars_fragment], ShaderChunk[:logdepthbuf_pars_fragment], "void main() {", " vec3 outgoingLight = vec3( 0.0 );", # outgoing light does not have an alpha, the surface does " vec4 diffuseColor = vec4( diffuse, opacity );", ShaderChunk[:logdepthbuf_fragment], ShaderChunk[:map_fragment], ShaderChunk[:color_fragment], ShaderChunk[:alphamap_fragment], ShaderChunk[:alphatest_fragment], ShaderChunk[:specularmap_fragment], " outgoingLight = diffuseColor.rgb;", # simple shader ShaderChunk[:lightmap_fragment], # TODO: Light map on an otherwise unlit surface doesn't make sense. ShaderChunk[:envmap_fragment], ShaderChunk[:shadowmap_fragment], # TODO: Shadows on an otherwise unlit surface doesn't make sense. ShaderChunk[:linear_to_gamma_fragment], ShaderChunk[:fog_fragment], " fragColor = vec4( outgoingLight, diffuseColor.a );", # TODO, this should be pre-multiplied to allow for bright highlights on very transparent objects "}" ].join("\n") ), lambert: ShaderLib_Instance.new( uniforms: UniformsUtils.merge([ UniformsLib[:common], UniformsLib[:fog], UniformsLib[:lights], UniformsLib[:shadow_map], { 'emissive' => Uniform.new(:c, Color.new(0x000000)), 'wrapRGB' => Uniform.new(:v3, Vector3.new(1.0, 1.0, 1.0)) } ]), vertex_shader: [ '#define LAMBERT', 'out vec3 vLightFront;', '#ifdef DOUBLE_SIDED', ' out vec3 vLightBack;', '#endif', ShaderChunk[:common], ShaderChunk[:map_pars_vertex], ShaderChunk[:lightmap_pars_vertex], ShaderChunk[:envmap_pars_vertex], ShaderChunk[:lights_lambert_pars_vertex], ShaderChunk[:color_pars_vertex], ShaderChunk[:morphtarget_pars_vertex], ShaderChunk[:skinning_pars_vertex], ShaderChunk[:shadowmap_pars_vertex], ShaderChunk[:logdepthbuf_pars_vertex], 'void main() {', ShaderChunk[:map_vertex], ShaderChunk[:lightmap_vertex], ShaderChunk[:color_vertex], ShaderChunk[:morphnormal_vertex], ShaderChunk[:skinbase_vertex], ShaderChunk[:skinnormal_vertex], ShaderChunk[:defaultnormal_vertex], ShaderChunk[:morphtarget_vertex], ShaderChunk[:skinning_vertex], ShaderChunk[:default_vertex], ShaderChunk[:logdepthbuf_vertex], ShaderChunk[:worldpos_vertex], ShaderChunk[:envmap_vertex], ShaderChunk[:lights_lambert_vertex], ShaderChunk[:shadowmap_vertex], '}', ].join("\n"), fragment_shader: [ 'uniform vec3 diffuse;', 'uniform vec3 emissive;', 'uniform float opacity;', 'in vec3 vLightFront;', '#ifdef DOUBLE_SIDED', ' in vec3 vLightBack;', '#endif', ShaderChunk[:common], ShaderChunk[:color_pars_fragment], ShaderChunk[:map_pars_fragment], ShaderChunk[:alphamap_pars_fragment], ShaderChunk[:lightmap_pars_fragment], ShaderChunk[:envmap_pars_fragment], ShaderChunk[:fog_pars_fragment], ShaderChunk[:shadowmap_pars_fragment], ShaderChunk[:specularmap_pars_fragment], ShaderChunk[:logdepthbuf_pars_fragment], 'void main() {', ' vec3 outgoingLight = vec3( 0.0 );', # outgoing light does not have an alpha, the surface does ' vec4 diffuseColor = vec4( diffuse, opacity );', ShaderChunk[:logdepthbuf_fragment], ShaderChunk[:map_fragment], ShaderChunk[:color_fragment], ShaderChunk[:alphamap_fragment], ShaderChunk[:alphatest_fragment], ShaderChunk[:specularmap_fragment], ' #ifdef DOUBLE_SIDED', #'float isFront = float( gl_FrontFacing );', #'fragColor.xyz *= isFront * vLightFront + ( 1.0 - isFront ) * vLightBack;', ' if ( gl_FrontFacing )', ' outgoingLight += diffuseColor.rgb * vLightFront + emissive;', ' else', ' outgoingLight += diffuseColor.rgb * vLightBack + emissive;', ' #else', ' outgoingLight += diffuseColor.rgb * vLightFront + emissive;', ' #endif', ShaderChunk[:lightmap_fragment], ShaderChunk[:envmap_fragment], ShaderChunk[:shadowmap_fragment], ShaderChunk[:linear_to_gamma_fragment], ShaderChunk[:fog_fragment], # ' fragColor = vec4( outgoingLight, diffuseColor.a );', # TODO, this should be pre-multiplied to allow for bright highlights on very transparent objects ' fragColor = vec4(outgoingLight, diffuseColor.a);', '}' ].join("\n") ), phong: ShaderLib_Instance.new( uniforms: UniformsUtils.merge([ UniformsLib[:common], UniformsLib[:bump], UniformsLib[:normal_map], UniformsLib[:fog], UniformsLib[:lights], UniformsLib[:shadow_map], { 'emissive' => Uniform.new(:c, Color.new(0x000000)), 'specular' => Uniform.new(:c, Color.new(0x111111)), 'shininess' => Uniform.new(:f, 30.0), 'wrapRGB' => Uniform.new(:v3, Vector3.new(1.0, 1.0, 1.0)) } ]), vertex_shader: [ '#define PHONG', 'out vec3 vViewPosition;', '#ifndef FLAT_SHADED', ' out vec3 vNormal;', '#endif', ShaderChunk[:common], ShaderChunk[:map_pars_vertex], ShaderChunk[:lightmap_pars_vertex], ShaderChunk[:envmap_pars_vertex], ShaderChunk[:lights_phong_pars_vertex], ShaderChunk[:color_pars_vertex], ShaderChunk[:morphtarget_pars_vertex], ShaderChunk[:skinning_pars_vertex], ShaderChunk[:shadowmap_pars_vertex], ShaderChunk[:logdepthbuf_pars_vertex], 'void main() {', ShaderChunk[:map_vertex], ShaderChunk[:lightmap_vertex], ShaderChunk[:color_vertex], ShaderChunk[:morphnormal_vertex], ShaderChunk[:skinbase_vertex], ShaderChunk[:skinnormal_vertex], ShaderChunk[:defaultnormal_vertex], '#ifndef FLAT_SHADED', # Normal computed with derivatives when FLAT_SHADED ' vNormal = normalize( transformedNormal );', '#endif', ShaderChunk[:morphtarget_vertex], ShaderChunk[:skinning_vertex], ShaderChunk[:default_vertex], ShaderChunk[:logdepthbuf_vertex], ' vViewPosition = -mvPosition.xyz;', ShaderChunk[:worldpos_vertex], ShaderChunk[:envmap_vertex], ShaderChunk[:lights_phong_vertex], ShaderChunk[:shadowmap_vertex], '}' ].join("\n"), fragment_shader: [ '#define PHONG', 'uniform vec3 diffuse;', 'uniform vec3 emissive;', 'uniform vec3 specular;', 'uniform float shininess;', 'uniform float opacity;', ShaderChunk[:common], ShaderChunk[:color_pars_fragment], ShaderChunk[:map_pars_fragment], ShaderChunk[:alphamap_pars_fragment], ShaderChunk[:lightmap_pars_fragment], ShaderChunk[:envmap_pars_fragment], ShaderChunk[:fog_pars_fragment], ShaderChunk[:lights_phong_pars_fragment], ShaderChunk[:shadowmap_pars_fragment], ShaderChunk[:bumpmap_pars_fragment], ShaderChunk[:normalmap_pars_fragment], ShaderChunk[:specularmap_pars_fragment], ShaderChunk[:logdepthbuf_pars_fragment], 'void main() {', ' vec3 outgoingLight = vec3( 0.0 );', # outgoing light does not have an alpha, the surface does ' vec4 diffuseColor = vec4( diffuse, opacity );', ShaderChunk[:logdepthbuf_fragment], ShaderChunk[:map_fragment], ShaderChunk[:color_fragment], ShaderChunk[:alphamap_fragment], ShaderChunk[:alphatest_fragment], ShaderChunk[:specularmap_fragment], ShaderChunk[:lights_phong_fragment], ShaderChunk[:lightmap_fragment], ShaderChunk[:envmap_fragment], ShaderChunk[:shadowmap_fragment], ShaderChunk[:linear_to_gamma_fragment], ShaderChunk[:fog_fragment], ' fragColor = vec4( outgoingLight, diffuseColor.a );', # TODO, this should be pre-multiplied to allow for bright highlights on very transparent objects '}' ].join("\n") ), # TODO: # particle_basic # dashed # depth # normal cube: ShaderLib_Instance.new( uniforms: { 'tCube' => Uniform.new(:t, nil), 'tFlip' => Uniform.new(:f, -1.0) }, vertex_shader: [ 'out vec3 vWorldPosition;', ShaderChunk[:common], ShaderChunk[:logdepthbuf_pars_vertex], 'void main() {', ' vWorldPosition = transformDirection( position, modelMatrix );', ' gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );', ShaderChunk[:logdepthbuf_vertex], '}' ].join("\n"), fragment_shader: [ 'uniform samplerCube tCube;', 'uniform float tFlip;', 'in vec3 vWorldPosition;', ShaderChunk[:common], ShaderChunk[:logdepthbuf_pars_fragment], 'void main() {', ' fragColor = texture( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );', ShaderChunk[:logdepthbuf_fragment], '}' ].join("\n") ), # equirect depth_rgba: ShaderLib_Instance.new( uniforms: {}, vertex_shader: [ ShaderChunk[:common], ShaderChunk[:morphtarget_pars_vertex], ShaderChunk[:skinning_pars_vertex], ShaderChunk[:logdepthbuf_pars_vertex], 'void main() {', ShaderChunk[:skinbase_vertex], ShaderChunk[:morphtarget_vertex], ShaderChunk[:skinning_vertex], ShaderChunk[:default_vertex], ShaderChunk[:logdepthbuf_vertex], '}' ].join("\n"), fragment_shader: [ ShaderChunk[:common], ShaderChunk[:logdepthbuf_pars_fragment], 'vec4 pack_depth( const in float depth ) {', ' const vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );', ' const vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );', ' vec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );', # ' vec4 res = fract( depth * bit_shift );', ' res -= res.xxyz * bit_mask;', ' return res;', '}', 'void main() {', ShaderChunk[:logdepthbuf_fragment], ' #ifdef USE_LOGDEPTHBUF_EXT', ' fragColor = pack_depth( gl_FragDepthEXT );', ' #else', ' fragColor = pack_depth( gl_FragCoord.z );', ' #endif', #'fragColor = pack_depth( gl_FragCoord.z / gl_FragCoord.w );', #'float z = ( ( gl_FragCoord.z / gl_FragCoord.w ) - 3.0 ) / ( 4000.0 - 3.0 );', #'fragColor = pack_depth( z );', #'fragColor = vec4( z, z, z, 1.0 );', '}' ].join("\n") ) }
- ShaderChunk =
{}.tap do |chunks| Dir.new(File.join(__dir__, 'shader_chunk')).each do |file_name| next unless file_name.end_with? '.glsl' file_path = File.join(__dir__, 'shader_chunk', file_name) chunk_name = File.basename(file_name, '.glsl') chunk = File.read(file_path) # chunk = "// #{chunk_name}\n#{chunk}" chunks[chunk_name.to_sym] = chunk end end
- UniformsLib =
{ common: { 'diffuse' => Uniform.new(:c, Color.new(0xeeeeee)), 'opacity' => Uniform.new(:f, 1.0), 'map' => Uniform.new(:t, nil), 'offsetRepeat' => Uniform.new(:v4, Vector4.new(0.0, 0.0, 1.0, 1.0)), 'lightMap' => Uniform.new(:t, nil), 'specularMap' => Uniform.new(:t, nil), 'alphaMap' => Uniform.new(:t, nil), 'envMap' => Uniform.new(:t, nil), 'flipEnvMap' => Uniform.new(:f, -1.0), 'reflectivity' => Uniform.new(:f, 1.0), 'refractionRatio' => Uniform.new(:f, 0.98), 'morphTargetInfluences' => Uniform.new(:f, 0.0) }, bump: { 'bumpMap' => Uniform.new(:t, nil), 'bumpScale' => Uniform.new(:f, 1.0) }, normal_map: { 'normalMap' => Uniform.new(:t, nil), 'normalScale' => Uniform.new(:v2, Vector2.new(1.0, 1.0)) }, fog: { 'fogDensity' => Uniform.new(:f, 0.00025), 'fogNear' => Uniform.new(:f, 1.0), 'fogFar' => Uniform.new(:f, 2000.0), 'fogColor' => Uniform.new(:c, Color.new(0xffffff)) }, lights: { 'ambientLightColor' => Uniform.new(:fv, []), 'directionalLightDirection' => Uniform.new(:fv, []), 'directionalLightColor' => Uniform.new(:fv, []), 'hemisphereLightDirection' => Uniform.new(:fv, []), 'hemisphereLightSkyColor' => Uniform.new(:fv, []), 'hemisphereLightGroundColor' => Uniform.new(:fv, []), 'pointLightColor' => Uniform.new(:fv, []), 'pointLightPosition' => Uniform.new(:fv, []), 'pointLightDistance' => Uniform.new(:fv1, []), 'pointLightDecay' => Uniform.new(:fv1, []), 'spotLightColor' => Uniform.new(:fv, []), 'spotLightPosition' => Uniform.new(:fv, []), 'spotLightDirection' => Uniform.new(:fv, []), 'spotLightDistance' => Uniform.new(:fv, []), 'spotLightAngleCos' => Uniform.new(:fv, []), 'spotLightExponent' => Uniform.new(:fv, []), 'spotLightDecay' => Uniform.new(:fv, []) }, particle: { 'psColor' => Uniform.new(:c, Color.new(0xeeeeee)), 'opacity' => Uniform.new(:f, 1.0), 'size' => Uniform.new(:f, 1.0), 'scale' => Uniform.new(:f, 1.0), 'map' => Uniform.new(:t, nil), 'offsetRepeat' => Uniform.new(:v4, Vector4.new(0.0, 0.0, 1.0, 1.0)) }, shadow_map: { 'shadowMap' => Uniform.new(:tv, []), 'shadowMapSize' => Uniform.new(:v2v, []), 'shadowBias' => Uniform.new(:fv1, []), 'shadowDarkness' => Uniform.new(:fv1, []), 'shadowMatrix' => Uniform.new(:m4v, []) } }
Instance Attribute Summary collapse
-
#alpha_map ⇒ Object
Returns the value of attribute alpha_map.
-
#color ⇒ Object
Returns the value of attribute color.
-
#combine ⇒ Object
Returns the value of attribute combine.
-
#env_map ⇒ Object
Returns the value of attribute env_map.
-
#fog ⇒ Object
Returns the value of attribute fog.
-
#light_map ⇒ Object
Returns the value of attribute light_map.
-
#map ⇒ Object
Returns the value of attribute map.
-
#morph_targets ⇒ Object
Returns the value of attribute morph_targets.
-
#reflectivity ⇒ Object
Returns the value of attribute reflectivity.
-
#refraction_ratio ⇒ Object
Returns the value of attribute refraction_ratio.
-
#shading ⇒ Object
Returns the value of attribute shading.
-
#skinning ⇒ Object
Returns the value of attribute skinning.
-
#specular_map ⇒ Object
Returns the value of attribute specular_map.
-
#vertex_colors ⇒ Object
Returns the value of attribute vertex_colors.
-
#wireframe ⇒ Object
Returns the value of attribute wireframe.
-
#wireframe_linecap ⇒ Object
Returns the value of attribute wireframe_linecap.
-
#wireframe_linejoin ⇒ Object
Returns the value of attribute wireframe_linejoin.
-
#wireframe_linewidth ⇒ Object
Returns the value of attribute wireframe_linewidth.
Instance Attribute Details
#alpha_map ⇒ Object
Returns the value of attribute alpha_map.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def alpha_map @alpha_map end |
#color ⇒ Object
Returns the value of attribute color.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def color @color end |
#combine ⇒ Object
Returns the value of attribute combine.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def combine @combine end |
#env_map ⇒ Object
Returns the value of attribute env_map.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def env_map @env_map end |
#fog ⇒ Object
Returns the value of attribute fog.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def fog @fog end |
#light_map ⇒ Object
Returns the value of attribute light_map.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def light_map @light_map end |
#map ⇒ Object
Returns the value of attribute map.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def map @map end |
#morph_targets ⇒ Object
Returns the value of attribute morph_targets.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def morph_targets @morph_targets end |
#reflectivity ⇒ Object
Returns the value of attribute reflectivity.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def reflectivity @reflectivity end |
#refraction_ratio ⇒ Object
Returns the value of attribute refraction_ratio.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def refraction_ratio @refraction_ratio end |
#shading ⇒ Object
Returns the value of attribute shading.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def shading @shading end |
#skinning ⇒ Object
Returns the value of attribute skinning.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def skinning @skinning end |
#specular_map ⇒ Object
Returns the value of attribute specular_map.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def specular_map @specular_map end |
#vertex_colors ⇒ Object
Returns the value of attribute vertex_colors.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def vertex_colors @vertex_colors end |
#wireframe ⇒ Object
Returns the value of attribute wireframe.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def wireframe @wireframe end |
#wireframe_linecap ⇒ Object
Returns the value of attribute wireframe_linecap.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def wireframe_linecap @wireframe_linecap end |
#wireframe_linejoin ⇒ Object
Returns the value of attribute wireframe_linejoin.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def wireframe_linejoin @wireframe_linejoin end |
#wireframe_linewidth ⇒ Object
Returns the value of attribute wireframe_linewidth.
36 37 38 |
# File 'lib/mittsu/materials/mesh_basic_material.rb', line 36 def wireframe_linewidth @wireframe_linewidth end |