Commit 5a82e416 authored by wangjianfeng.yz's avatar wangjianfeng.yz

1

parent 553d9a06
......@@ -351,7 +351,13 @@ export enum BUFFER_USAGE {
}
export enum BUFFER_TYPE {
/**
* 索引数据
*/
ELEMENT_ARRAY_BUFFER = "ELEMENT_ARRAY_BUFFER",
/**
* 顶点数据
*/
ARRAY_BUFFER = "ARRAY_BUFFER",
}
//还是存映射,不用gl固定的数值
......
......@@ -261,7 +261,7 @@ export class FilterManager {
filter.uniformsData.projectionMatrix.value = framebufferManager.projectionMatrix;
}
//uniform属性同步下,自定义属性在各自的apply里执行
syncUniforms(shader, filter.uniformsData, renderer)
syncUniforms(shader, filter.uniformsData, renderer,0)
//顶点和uv计算,其实可以放到着色器里,以后再说 TODO
this.quad.map(state.destinationFrame, state.sourceFrame);
//传数据
......
......@@ -6,21 +6,20 @@ import { IShaderUniformData, UniformType } from "./UniformType";
/**
* 对于自行设置了uniforms的着色器,
* @param shader
* @param uniforms
* @param uniformsData
* @param renderer
* @param textureStart
* @param textureStart 不传表示,不绑定特定纹理通道
*/
export function syncUniforms(shader: IWebglShader, uniforms: Dict<IShaderUniformData>, renderer: WebglRenderer, textureStart?: number) {
let textureCount = textureStart || 0;
for (const i in uniforms) {
const { type, value } = uniforms[i];
export function syncUniforms(shader: IWebglShader, uniformsData: Dict<IShaderUniformData>, renderer: WebglRenderer, textureStart?: number) {
for (const i in uniformsData) {
const { type, value } = uniformsData[i];
//以着色器为准
if (!shader.uniforms[i]) continue;
if (type === UniformType.texture) {
//同一个着色器不能覆盖自身的,只能覆盖别人的,但是有没有可能合图集,最后使用的同一个纹理呢?TODO待测试,尽量别这么玩吧
//待测试,同一纹理占用多个通道会不会出问题
shader.uniforms[i] = renderer.textureManager.bind(value.baseTexture, textureCount);
textureCount++;
shader.uniforms[i] = renderer.textureManager.bind(value.baseTexture, textureStart);
if (typeof (textureStart) == "number") textureStart++;
}
else if (type === UniformType.color) {
if (typeof value == "number") {
......
This diff is collapsed.
import { Object3D } from "./Object3D";
import { BaseMaterial, RenderSideType } from "../materials/BaseMaterial";
import { Matrix4 } from "../math/Matrix4";
import { Ray } from "../math/Ray";
import { Sphere } from "../math/Sphere";
import { Vector3 } from "../math/Vector3";
import { Raycaster, IntersectData } from "./Raycaster";
import { Geometry3D } from "./Geometry3D";
import { IMaterial, RenderSideType } from "../materials/IMaterial";
const templeSphere: Sphere = new Sphere();
const tempMatrix: Matrix4 = new Matrix4();
......@@ -24,14 +24,14 @@ export class Mesh3D extends Object3D {
// morphTargetDictionary
constructor(
public geometry: Geometry3D,
public material: BaseMaterial
public material: IMaterial
) {
super();
this._instanceType = "Mesh3D";
this.updateMorphTargets();
}
_render(renderer) {
if (!this.visible || !this.material.alpha) return;//到时加transparent时需要修改 TODO
if (!this.visible) return;
renderer.batchManager.setObjectRenderer(renderer.plugins["d3"]);
renderer.plugins["d3"].render(this)
}
......
......@@ -58,9 +58,17 @@ export class BaseMaterial extends IMaterial {
public reflectivity: number = 1;
// public refractionRatio = 0.98;//先只管反射
// public envMapIntensity = 1.0
/**
* 变形顶点
*/
morphTargets: boolean = false;
/**
* 变形法线
*/
morphNormals: boolean = false;
/**
* 蒙皮
*/
skinning: boolean = false;
/**
* 是否使用顶点颜色
......@@ -71,7 +79,7 @@ export class BaseMaterial extends IMaterial {
*/
useFog: boolean = true;
/**
* 是否光照影响
* 是否光照影响,到时得改下,专门一个pbr材质,不放这里
*/
useLight: boolean = false;
constructor(parameters?: IBaseMaterialParams) {
......
......@@ -41,6 +41,9 @@ export class ShaderMaterial extends IMaterial {
return true;
};
protected _shader: Shader;
public get shader() {
return this._shader
}
public get uniformsData() {
return this._shader.uniformsData;
}
......
......@@ -4,3 +4,5 @@ export * from "./BaseMaterial";
export * from "./ShaderMaterial"
export * from "./Sprite3dMaterial"
export * from "./IMaterial"
\ No newline at end of file
......@@ -272,6 +272,7 @@ const VERT = [
' attribute vec3 morphTarget1;',
' attribute vec3 morphTarget2;',
' attribute vec3 morphTarget3;',
' uniform float morphTargetBaseInfluence;',
' #ifdef USE_MORPHNORMALS',
' attribute vec3 morphNormal0;',
' attribute vec3 morphNormal1;',
......@@ -305,15 +306,16 @@ const VERT = [
" vec3 transformed = vec3( aPosition );",
//考虑变形,顶点位置
" #ifdef USE_MORPHTARGETS",
" transformed += ( morphTarget0 - aPosition ) * morphTargetInfluences[ 0 ];",
" transformed += ( morphTarget1 - aPosition ) * morphTargetInfluences[ 1 ];",
" transformed += ( morphTarget2 - aPosition ) * morphTargetInfluences[ 2 ];",
" transformed += ( morphTarget3 - aPosition ) * morphTargetInfluences[ 3 ];",
" transformed *= morphTargetBaseInfluence;",
" transformed += morphTarget0 * morphTargetInfluences[ 0 ];",
" transformed += morphTarget1 * morphTargetInfluences[ 1 ];",
" transformed += morphTarget2 * morphTargetInfluences[ 2 ];",
" transformed += morphTarget3 * morphTargetInfluences[ 3 ];",
" #ifndef USE_MORPHNORMALS",
" transformed += ( morphTarget4 - aPosition ) * morphTargetInfluences[ 4 ];",
" transformed += ( morphTarget5 - aPosition ) * morphTargetInfluences[ 5 ];",
" transformed += ( morphTarget6 - aPosition ) * morphTargetInfluences[ 6 ];",
" transformed += ( morphTarget7 - aPosition ) * morphTargetInfluences[ 7 ];",
" transformed += morphTarget4 * morphTargetInfluences[ 4 ];",
" transformed += morphTarget5 * morphTargetInfluences[ 5 ];",
" transformed += morphTarget6 * morphTargetInfluences[ 6 ];",
" transformed += morphTarget7 * morphTargetInfluences[ 7 ];",
" #endif",
" #endif",
//使用蒙皮骨骼
......@@ -347,10 +349,11 @@ const VERT = [
" vec3 objectNormal = vec3( aNormal );",
//考虑变形,法线
" #ifdef USE_MORPHNORMALS",
" objectNormal += ( morphNormal0 - aNormal ) * morphTargetInfluences[ 0 ];",
" objectNormal += ( morphNormal1 - aNormal ) * morphTargetInfluences[ 1 ];",
" objectNormal += ( morphNormal2 - aNormal ) * morphTargetInfluences[ 2 ];",
" objectNormal += ( morphNormal3 - aNormal ) * morphTargetInfluences[ 3 ];",
" objectNormal *= morphTargetBaseInfluence;",
" objectNormal += morphNormal0 * morphTargetInfluences[ 0 ];",
" objectNormal += morphNormal1 * morphTargetInfluences[ 1 ];",
" objectNormal += morphNormal2 * morphTargetInfluences[ 2 ];",
" objectNormal += morphNormal3 * morphTargetInfluences[ 3 ];",
" #endif",
//骨骼蒙皮
" #ifdef USE_SKINNING",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment