Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Ablesons
three.js
提交
20c96f52
T
three.js
项目概览
Ablesons
/
three.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
three.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
20c96f52
编写于
10月 23, 2011
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Reverted changes, starting again.
上级
330ab778
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
107 addition
and
99 deletion
+107
-99
src/renderers/WebGLRenderer.js
src/renderers/WebGLRenderer.js
+107
-99
未找到文件。
src/renderers/WebGLRenderer.js
浏览文件 @
20c96f52
...
...
@@ -19,10 +19,6 @@ THREE.WebGLRenderer = function ( parameters ) {
_currentGeometryGroupHash
=
null
,
_geometryGroupCounter
=
0
,
_object
,
_objects
=
[],
_renderData
,
_projector
=
new
THREE
.
Projector
(),
_vertexBuffers
=
[],
_textureBuffers
=
[],
// gl state cache
_oldDoubleSided
=
null
,
...
...
@@ -181,7 +177,7 @@ THREE.WebGLRenderer = function ( parameters ) {
//
//
this.context = _gl;
this
.
context
=
_gl
;
var
_supportsVertexTextures
=
(
maxVertexTextures
()
>
0
);
...
...
@@ -254,12 +250,6 @@ THREE.WebGLRenderer = function ( parameters ) {
var
_spriteAttributesEnabled
=
false
;
this
.
getContext
=
function
()
{
return
_gl
;
};
this
.
setSize
=
function
(
width
,
height
)
{
_canvas
.
width
=
width
;
...
...
@@ -335,6 +325,12 @@ THREE.WebGLRenderer = function ( parameters ) {
};
this
.
getContext
=
function
()
{
return
_gl
;
};
this
.
deallocateObject
=
function
(
object
)
{
if
(
!
object
.
__webglInit
)
return
;
...
...
@@ -712,7 +708,7 @@ THREE.WebGLRenderer = function ( parameters ) {
};
function
initMeshBuffers
(
geometryGroup
,
object
)
{
function
initMeshBuffers
(
geometryGroup
,
object
)
{
var
f
,
fl
,
fi
,
face
,
m
,
ml
,
size
,
...
...
@@ -3377,6 +3373,42 @@ THREE.WebGLRenderer = function ( parameters ) {
};
function
computeFrustum
(
m
)
{
_frustum
[
0
].
set
(
m
.
n41
-
m
.
n11
,
m
.
n42
-
m
.
n12
,
m
.
n43
-
m
.
n13
,
m
.
n44
-
m
.
n14
);
_frustum
[
1
].
set
(
m
.
n41
+
m
.
n11
,
m
.
n42
+
m
.
n12
,
m
.
n43
+
m
.
n13
,
m
.
n44
+
m
.
n14
);
_frustum
[
2
].
set
(
m
.
n41
+
m
.
n21
,
m
.
n42
+
m
.
n22
,
m
.
n43
+
m
.
n23
,
m
.
n44
+
m
.
n24
);
_frustum
[
3
].
set
(
m
.
n41
-
m
.
n21
,
m
.
n42
-
m
.
n22
,
m
.
n43
-
m
.
n23
,
m
.
n44
-
m
.
n24
);
_frustum
[
4
].
set
(
m
.
n41
-
m
.
n31
,
m
.
n42
-
m
.
n32
,
m
.
n43
-
m
.
n33
,
m
.
n44
-
m
.
n34
);
_frustum
[
5
].
set
(
m
.
n41
+
m
.
n31
,
m
.
n42
+
m
.
n32
,
m
.
n43
+
m
.
n33
,
m
.
n44
+
m
.
n34
);
var
i
,
plane
;
for
(
i
=
0
;
i
<
6
;
i
++
)
{
plane
=
_frustum
[
i
];
plane
.
divideScalar
(
Math
.
sqrt
(
plane
.
x
*
plane
.
x
+
plane
.
y
*
plane
.
y
+
plane
.
z
*
plane
.
z
)
);
}
};
function
isInFrustum
(
object
)
{
var
distance
,
matrix
=
object
.
matrixWorld
,
radius
=
-
object
.
geometry
.
boundingSphere
.
radius
*
Math
.
max
(
object
.
scale
.
x
,
Math
.
max
(
object
.
scale
.
y
,
object
.
scale
.
z
)
);
for
(
var
i
=
0
;
i
<
6
;
i
++
)
{
distance
=
_frustum
[
i
].
x
*
matrix
.
n14
+
_frustum
[
i
].
y
*
matrix
.
n24
+
_frustum
[
i
].
z
*
matrix
.
n34
+
_frustum
[
i
].
w
;
if
(
distance
<=
radius
)
return
false
;
}
return
true
;
};
function
addToFixedArray
(
where
,
what
)
{
where
.
list
[
where
.
count
]
=
what
;
...
...
@@ -3677,12 +3709,6 @@ THREE.WebGLRenderer = function ( parameters ) {
_this
.
info
.
render
.
vertices
=
0
;
_this
.
info
.
render
.
faces
=
0
;
if
(
this
.
autoClear
||
forceClear
)
{
this
.
clear
(
this
.
autoClearColor
,
this
.
autoClearDepth
,
this
.
autoClearStencil
);
}
if
(
camera
.
parent
==
null
)
{
console
.
warn
(
"
Camera is not on the Scene. Adding it...
"
);
...
...
@@ -3698,35 +3724,20 @@ THREE.WebGLRenderer = function ( parameters ) {
camera
.
projectionMatrix
.
flattenToArray
(
_projectionMatrixArray
);
_projScreenMatrix
.
multiply
(
camera
.
projectionMatrix
,
camera
.
matrixWorldInverse
);
_projector
.
computeFrustum
(
_projScreenMatrix
);
_renderData
=
_projector
.
projectGraph
(
scene
);
// lights = scene.__webglLights;
computeFrustum
(
_projScreenMatrix
);
setRenderTarget
(
renderTarget
);
// TODO: A bit obfuscated
ol
=
_renderData
.
objects
.
length
;
for
(
o
=
0
;
o
<
ol
;
o
++
)
{
this
.
initWebGLObjects
(
scene
);
object
=
_renderData
.
objects
[
o
];
_object
=
_objects
[
object
.
id
]
||
initObject
(
object
);
object
.
matrixWorld
.
flattenToArray
(
_object
.
objectMatrixArray
);
lights
=
scene
.
__webglLights
;
// setupMatrices()
setRenderTarget
(
renderTarget
);
_object
.
modelViewMatrix
.
multiplyToArray
(
camera
.
matrixWorldInverse
,
object
.
matrixWorld
,
_object
.
modelViewMatrixArray
);
THREE
.
Matrix4
.
makeInvert3x3
(
_object
.
modelViewMatrix
).
transposeIntoArray
(
_object
.
normalMatrixArray
);
if
(
this
.
autoClear
||
forceClear
)
{
this
.
clear
(
this
.
autoClearColor
,
this
.
autoClearDepth
,
this
.
autoClearStencil
);
}
/*
// set matrices
ol
=
scene
.
__webglObjects
.
length
;
...
...
@@ -4008,11 +4019,9 @@ THREE.WebGLRenderer = function ( parameters ) {
}
*/
// render 2d
if
(
_renderData
.
s
prites
.
length
)
{
if
(
scene
.
__webglS
prites
.
length
)
{
renderSprites
(
scene
,
camera
);
...
...
@@ -4225,102 +4234,102 @@ THREE.WebGLRenderer = function ( parameters ) {
};
function
initObject
(
object
)
{
function
addObject
(
object
,
scene
)
{
_object
=
_objects
[
object
.
id
]
=
{}
;
var
g
,
geometry
,
geometryGroup
;
_object
.
modelViewMatrix
=
new
THREE
.
Matrix4
();
if
(
!
object
.
__webglInit
)
{
_object
.
normalMatrixArray
=
new
Float32Array
(
9
);
_object
.
modelViewMatrixArray
=
new
Float32Array
(
16
);
_object
.
objectMatrixArray
=
new
Float32Array
(
16
);
object
.
__webglInit
=
true
;
object
.
matrixWorld
.
flattenToArray
(
_object
.
objectMatrixArray
);
object
.
_modelViewMatrix
=
new
THREE
.
Matrix4
(
);
if
(
object
instanceof
THREE
.
Mesh
)
{
object
.
_normalMatrixArray
=
new
Float32Array
(
9
);
object
.
_modelViewMatrixArray
=
new
Float32Array
(
16
);
object
.
_objectMatrixArray
=
new
Float32Array
(
16
);
var
geometry
=
object
.
geometry
;
object
.
matrixWorld
.
flattenToArray
(
object
.
_objectMatrixArray
)
;
if
(
geometry
.
geometryGroups
==
undefined
)
{
if
(
object
instanceof
THREE
.
Mesh
)
{
sortFacesByMaterial
(
geometry
)
;
geometry
=
object
.
geometry
;
}
if
(
geometry
.
geometryGroups
==
undefined
)
{
// create separate VBOs per geometry chunk
sortFacesByMaterial
(
geometry
);
for
(
var
g
in
geometry
.
geometryGroups
)
{
}
var
geometryGroup
=
geometry
.
geometryGroups
[
g
];
// create separate VBOs per geometry chunk
// initialise VBO on the first access
for
(
g
in
geometry
.
geometryGroups
)
{
if
(
!
geometryGroup
.
__webglVertexBuffer
)
{
geometryGroup
=
geometry
.
geometryGroups
[
g
];
createMeshBuffers
(
geometryGroup
);
initMeshBuffers
(
geometryGroup
,
object
);
// initialise VBO on the first access
geometry
.
__dirtyVertices
=
true
;
geometry
.
__dirtyMorphTargets
=
true
;
geometry
.
__dirtyElements
=
true
;
geometry
.
__dirtyUvs
=
true
;
geometry
.
__dirtyNormals
=
true
;
geometry
.
__dirtyTangents
=
true
;
geometry
.
__dirtyColors
=
true
;
if
(
!
geometryGroup
.
__webglVertexBuffer
)
{
}
createMeshBuffers
(
geometryGroup
);
initMeshBuffers
(
geometryGroup
,
object
);
}
geometry
.
__dirtyVertices
=
true
;
geometry
.
__dirtyMorphTargets
=
true
;
geometry
.
__dirtyElements
=
true
;
geometry
.
__dirtyUvs
=
true
;
geometry
.
__dirtyNormals
=
true
;
geometry
.
__dirtyTangents
=
true
;
geometry
.
__dirtyColors
=
true
;
}
else
if
(
object
instanceof
THREE
.
Ribbon
)
{
}
geometry
=
object
.
geometry
;
}
if
(
!
geometry
.
__webglVertexBuffer
)
{
}
else
if
(
object
instanceof
THREE
.
Ribbon
)
{
createRibbonBuffers
(
geometry
);
initRibbonBuffers
(
geometry
);
geometry
=
object
.
geometry
;
geometry
.
__dirtyVertices
=
true
;
geometry
.
__dirtyColors
=
true
;
if
(
!
geometry
.
__webglVertexBuffer
)
{
}
createRibbonBuffers
(
geometry
);
initRibbonBuffers
(
geometry
);
}
else
if
(
object
instanceof
THREE
.
Line
)
{
geometry
.
__dirtyVertices
=
true
;
geometry
.
__dirtyColors
=
true
;
geometry
=
object
.
geometry
;
}
if
(
!
geometry
.
__webglVertexBuffer
)
{
}
else
if
(
object
instanceof
THREE
.
Line
)
{
createLineBuffers
(
geometry
);
initLineBuffers
(
geometry
);
geometry
=
object
.
geometry
;
geometry
.
__dirtyVertices
=
true
;
geometry
.
__dirtyColors
=
true
;
if
(
!
geometry
.
__webglVertexBuffer
)
{
}
createLineBuffers
(
geometry
);
initLineBuffers
(
geometry
);
}
else
if
(
object
instanceof
THREE
.
ParticleSystem
)
{
geometry
.
__dirtyVertices
=
true
;
geometry
.
__dirtyColors
=
true
;
geometry
=
object
.
geometry
;
}
if
(
!
geometry
.
__webglVertexBuffer
)
{
}
else
if
(
object
instanceof
THREE
.
ParticleSystem
)
{
createParticleBuffers
(
geometry
);
initParticleBuffers
(
geometry
,
object
);
geometry
=
object
.
geometry
;
geometry
.
__dirtyVertices
=
true
;
geometry
.
__dirtyColors
=
true
;
if
(
!
geometry
.
__webglVertexBuffer
)
{
}
createParticleBuffers
(
geometry
);
initParticleBuffers
(
geometry
,
object
);
}
geometry
.
__dirtyVertices
=
true
;
geometry
.
__dirtyColors
=
true
;
return
_object
;
}
}
}
function
addObject
(
object
,
scene
)
{
}
if
(
!
object
.
__webglActive
)
{
...
...
@@ -5827,4 +5836,3 @@ THREE.WebGLRenderer = function ( parameters ) {
}
*/
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录