未验证 提交 0094e45f 编写于 作者: M Michael Herzog 提交者: GitHub

Merge pull request #17602 from Mugen87/dev34

Examples: Remove THREE.CubemapGenerator.
/**
* @author Richard M. / https://github.com/richardmonette
* @author WestLangley / http://github.com/WestLangley
*/
THREE.CubemapGenerator = function ( renderer ) {
this.renderer = renderer;
};
THREE.CubemapGenerator.prototype.fromEquirectangular = function ( texture, options ) {
options = options || {};
var scene = new THREE.Scene();
var shader = {
uniforms: {
tEquirect: { value: null },
},
vertexShader:
`
varying vec3 vWorldDirection;
//include <common>
vec3 transformDirection( in vec3 dir, in mat4 matrix ) {
return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );
}
void main() {
vWorldDirection = transformDirection( position, modelMatrix );
#include <begin_vertex>
#include <project_vertex>
}
`,
fragmentShader:
`
uniform sampler2D tEquirect;
varying vec3 vWorldDirection;
//include <common>
#define RECIPROCAL_PI 0.31830988618
#define RECIPROCAL_PI2 0.15915494
void main() {
vec3 direction = normalize( vWorldDirection );
vec2 sampleUV;
sampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;
sampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;
gl_FragColor = texture2D( tEquirect, sampleUV );
}
`
};
var material = new THREE.ShaderMaterial( {
type: 'CubemapFromEquirect',
uniforms: THREE.UniformsUtils.clone( shader.uniforms ),
vertexShader: shader.vertexShader,
fragmentShader: shader.fragmentShader,
side: THREE.BackSide,
blending: THREE.NoBlending
} );
material.uniforms.tEquirect.value = texture;
var mesh = new THREE.Mesh( new THREE.BoxBufferGeometry( 5, 5, 5 ), material );
scene.add( mesh );
var resolution = options.resolution || 512;
var params = {
type: texture.type,
format: texture.format,
encoding: texture.encoding,
generateMipmaps: ( options.generateMipmaps !== undefined ) ? options.generateMipmaps : texture.generateMipmaps,
minFilter: ( options.minFilter !== undefined ) ? options.minFilter : texture.minFilter,
magFilter: ( options.magFilter !== undefined ) ? options.magFilter : texture.magFilter
};
var camera = new THREE.CubeCamera( 1, 10, resolution, params );
camera.update( this.renderer, scene );
mesh.geometry.dispose();
mesh.material.dispose();
return camera.renderTarget;
};
//
THREE.EquirectangularToCubeGenerator = ( function () {
var camera = new THREE.PerspectiveCamera( 90, 1, 0.1, 10 );
......
......@@ -2,33 +2,16 @@ import {
PixelFormat,
Texture,
TextureDataType,
TextureFilter,
WebGLRenderer,
WebGLRenderTargetCube
} from '../../../src/Three';
export interface CubemapGeneratorOptions {
resolution?: number;
generateMipmaps?: boolean;
magFilter?: TextureFilter;
minFilter?: TextureFilter;
}
export interface EquirectangularToCubeGeneratorOptions {
resolution?: number;
format?: PixelFormat;
type?: TextureDataType;
}
export class CubemapGenerator {
constructor( renderer: WebGLRenderer );
renderer: WebGLRenderer;
fromEquirectangular( texture: Texture, options?: CubemapGeneratorOptions ): WebGLRenderTargetCube;
}
export class EquirectangularToCubeGenerator {
constructor( sourceTexture: Texture, options?: EquirectangularToCubeGeneratorOptions );
......
/**
* @author Richard M. / https://github.com/richardmonette
* @author WestLangley / http://github.com/WestLangley
*/
import {
BackSide,
BoxBufferGeometry,
CubeCamera,
Mesh,
NoBlending,
PerspectiveCamera,
Scene,
ShaderMaterial,
UniformsUtils,
WebGLRenderTargetCube
} from "../../../build/three.module.js";
var CubemapGenerator = function ( renderer ) {
this.renderer = renderer;
};
CubemapGenerator.prototype.fromEquirectangular = function ( texture, options ) {
options = options || {};
var scene = new Scene();
var shader = {
uniforms: {
tEquirect: { value: null },
},
vertexShader:
`
varying vec3 vWorldDirection;
//include <common>
vec3 transformDirection( in vec3 dir, in mat4 matrix ) {
return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );
}
void main() {
vWorldDirection = transformDirection( position, modelMatrix );
#include <begin_vertex>
#include <project_vertex>
}
`,
fragmentShader:
`
uniform sampler2D tEquirect;
varying vec3 vWorldDirection;
//include <common>
#define RECIPROCAL_PI 0.31830988618
#define RECIPROCAL_PI2 0.15915494
void main() {
vec3 direction = normalize( vWorldDirection );
vec2 sampleUV;
sampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;
sampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;
gl_FragColor = texture2D( tEquirect, sampleUV );
}
`
};
var material = new ShaderMaterial( {
type: 'CubemapFromEquirect',
uniforms: UniformsUtils.clone( shader.uniforms ),
vertexShader: shader.vertexShader,
fragmentShader: shader.fragmentShader,
side: BackSide,
blending: NoBlending
} );
material.uniforms.tEquirect.value = texture;
var mesh = new Mesh( new BoxBufferGeometry( 5, 5, 5 ), material );
scene.add( mesh );
var resolution = options.resolution || 512;
var params = {
type: texture.type,
format: texture.format,
encoding: texture.encoding,
generateMipmaps: ( options.generateMipmaps !== undefined ) ? options.generateMipmaps : texture.generateMipmaps,
minFilter: ( options.minFilter !== undefined ) ? options.minFilter : texture.minFilter,
magFilter: ( options.magFilter !== undefined ) ? options.magFilter : texture.magFilter
};
var camera = new CubeCamera( 1, 10, resolution, params );
camera.update( this.renderer, scene );
mesh.geometry.dispose();
mesh.material.dispose();
return camera.renderTarget;
};
//
var EquirectangularToCubeGenerator = ( function () {
var camera = new PerspectiveCamera( 90, 1, 0.1, 10 );
......@@ -248,4 +136,4 @@ var EquirectangularToCubeGenerator = ( function () {
} )();
export { CubemapGenerator, EquirectangularToCubeGenerator };
export { EquirectangularToCubeGenerator };
......@@ -14,8 +14,6 @@
import * as THREE from '../build/three.module.js';
import { CubemapGenerator } from './jsm/loaders/EquirectangularToCubeGenerator.js';
var camera, scene, renderer;
var cube, sphere, torus, material;
......@@ -50,14 +48,12 @@
// background
var options = {
resolution: 1024,
generateMipmaps: true,
minFilter: THREE.LinearMipmapLinearFilter,
magFilter: THREE.LinearFilter
};
scene.background = new CubemapGenerator( renderer ).fromEquirectangular( texture, options );
scene.background = new THREE.WebGLRenderTargetCube( 1024, 1024, options ).fromEquirectangularTexture( renderer, texture );
//
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册