Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
车家大少爷
three.js
提交
04326883
T
three.js
项目概览
车家大少爷
/
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,发现更多精彩内容 >>
提交
04326883
编写于
7月 05, 2015
作者:
R
Ricardo Cabello
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #6723 from fordacious/dev
Multiple Renders Fix
上级
c062737c
dfaea633
变更
10
展开全部
隐藏空白更改
内联
并排
Showing
10 changed file
with
504 addition
and
95 deletion
+504
-95
examples/index.html
examples/index.html
+1
-0
examples/webgl_multiple_renderers.html
examples/webgl_multiple_renderers.html
+301
-0
src/core/BufferAttribute.js
src/core/BufferAttribute.js
+2
-0
src/core/InterleavedBuffer.js
src/core/InterleavedBuffer.js
+2
-0
src/core/InterleavedBufferAttribute.js
src/core/InterleavedBufferAttribute.js
+2
-0
src/renderers/WebGLRenderTarget.js
src/renderers/WebGLRenderTarget.js
+2
-0
src/renderers/WebGLRenderer.js
src/renderers/WebGLRenderer.js
+128
-85
src/renderers/webgl/WebGLObjects.js
src/renderers/webgl/WebGLObjects.js
+27
-10
src/renderers/webgl/WebGLProperties.js
src/renderers/webgl/WebGLProperties.js
+38
-0
utils/build/includes/common.json
utils/build/includes/common.json
+1
-0
未找到文件。
examples/index.html
浏览文件 @
04326883
...
...
@@ -313,6 +313,7 @@
"
webgl_multiple_canvases_complex
"
,
"
webgl_multiple_canvases_grid
"
,
"
webgl_multiple_elements
"
,
"
webgl_multiple_renderers
"
,
"
webgl_multiple_views
"
,
"
webgl_nearestneighbour
"
,
"
webgl_octree
"
,
...
...
examples/webgl_multiple_renderers.html
0 → 100644
浏览文件 @
04326883
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<title>
three.js webgl - multiple Renderers - complex
</title>
<meta
charset=
"utf-8"
>
<meta
name=
"viewport"
content=
"width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"
>
<style>
body
{
color
:
#808080
;
font-family
:
Monospace
;
font-size
:
13px
;
text-align
:
center
;
background-color
:
#fff
;
margin
:
0px
;
overflow
:
hidden
;
}
#info
{
position
:
absolute
;
top
:
0px
;
width
:
100%
;
padding
:
5px
;
}
#container1
,
#container2
,
#container3
{
position
:
absolute
;
border-style
:
solid
;
}
#container1
{
width
:
400px
;
height
:
200px
;
left
:
150px
;
}
#container2
{
width
:
400px
;
height
:
200px
;
left
:
150px
;
top
:
400px
;
}
#container3
{
width
:
300px
;
height
:
300px
;
left
:
75px
;
top
:
300px
;
box-shadow
:
0px
0px
100px
0px
#000
;
}
a
{
color
:
#0080ff
;
}
</style>
</head>
<body>
<div
id=
"container"
>
<div
id=
"container1"
></div>
<div
id=
"container2"
></div>
<div
id=
"container3"
></div>
</div>
<div
id=
"info"
><a
href=
"http://threejs.org"
target=
"_blank"
>
three.js
</a>
webgl - multiple canvases - complex
</div>
<script
src=
"../build/three.min.js"
></script>
<script
src=
"js/Detector.js"
></script>
<script
src=
"js/libs/stats.min.js"
></script>
<script>
if
(
!
Detector
.
webgl
)
Detector
.
addGetWebGLMessage
();
var
apps
=
[];
var
scene
=
createScene
();
init
();
animate
();
function
init
()
{
var
container1
=
document
.
getElementById
(
'
container1
'
);
var
container2
=
document
.
getElementById
(
'
container2
'
);
var
container3
=
document
.
getElementById
(
'
container3
'
);
var
WIDTH
=
800
;
var
HEIGHT
=
600
;
apps
.
push
(
new
App
(
container1
,
WIDTH
,
HEIGHT
)
);
apps
.
push
(
new
App
(
container2
,
WIDTH
,
HEIGHT
)
);
apps
.
push
(
new
App
(
container3
,
WIDTH
,
HEIGHT
)
);
document
.
addEventListener
(
'
mousemove
'
,
onDocumentMouseMove
,
false
);
}
function
animate
()
{
for
(
var
i
=
0
;
i
<
apps
.
length
;
++
i
)
{
apps
[
i
].
animate
();
}
requestAnimationFrame
(
animate
);
}
function
onDocumentMouseMove
(
e
)
{
var
container3
=
document
.
getElementById
(
'
container3
'
);
container3
.
style
.
left
=
e
.
pageX
-
container3
.
clientWidth
/
2
+
"
px
"
container3
.
style
.
top
=
e
.
pageY
-
container3
.
clientHeight
/
2
+
"
px
"
}
function
createScene
()
{
var
mesh
,
group1
,
group2
,
group3
,
light
;
scene
=
new
THREE
.
Scene
();
light
=
new
THREE
.
DirectionalLight
(
0xffffff
);
light
.
position
.
set
(
0
,
0
,
1
).
normalize
();
scene
.
add
(
light
);
// shadow
var
canvas
=
document
.
createElement
(
'
canvas
'
);
canvas
.
width
=
128
;
canvas
.
height
=
128
;
var
context
=
canvas
.
getContext
(
'
2d
'
);
var
gradient
=
context
.
createRadialGradient
(
canvas
.
width
/
2
,
canvas
.
height
/
2
,
0
,
canvas
.
width
/
2
,
canvas
.
height
/
2
,
canvas
.
width
/
2
);
gradient
.
addColorStop
(
0.1
,
'
rgba(210,210,210,1)
'
);
gradient
.
addColorStop
(
1
,
'
rgba(255,255,255,1)
'
);
context
.
fillStyle
=
gradient
;
context
.
fillRect
(
0
,
0
,
canvas
.
width
,
canvas
.
height
);
var
shadowTexture
=
new
THREE
.
Texture
(
canvas
);
shadowTexture
.
needsUpdate
=
true
;
var
shadowMaterial
=
new
THREE
.
MeshBasicMaterial
(
{
map
:
shadowTexture
}
);
var
shadowGeo
=
new
THREE
.
PlaneBufferGeometry
(
300
,
300
,
1
,
1
);
mesh
=
new
THREE
.
Mesh
(
shadowGeo
,
shadowMaterial
);
mesh
.
position
.
y
=
-
250
;
mesh
.
rotation
.
x
=
-
Math
.
PI
/
2
;
scene
.
add
(
mesh
);
mesh
=
new
THREE
.
Mesh
(
shadowGeo
,
shadowMaterial
);
mesh
.
position
.
x
=
-
400
;
mesh
.
position
.
y
=
-
250
;
mesh
.
rotation
.
x
=
-
Math
.
PI
/
2
;
scene
.
add
(
mesh
);
mesh
=
new
THREE
.
Mesh
(
shadowGeo
,
shadowMaterial
);
mesh
.
position
.
x
=
400
;
mesh
.
position
.
y
=
-
250
;
mesh
.
rotation
.
x
=
-
Math
.
PI
/
2
;
scene
.
add
(
mesh
);
var
faceIndices
=
[
'
a
'
,
'
b
'
,
'
c
'
];
var
color
,
f1
,
f2
,
f3
,
p
,
vertexIndex
,
radius
=
200
,
geometry1
=
new
THREE
.
IcosahedronGeometry
(
radius
,
1
),
geometry2
=
new
THREE
.
IcosahedronGeometry
(
radius
,
1
),
geometry3
=
new
THREE
.
IcosahedronGeometry
(
radius
,
1
);
for
(
var
i
=
0
;
i
<
geometry1
.
faces
.
length
;
i
++
)
{
f1
=
geometry1
.
faces
[
i
];
f2
=
geometry2
.
faces
[
i
];
f3
=
geometry3
.
faces
[
i
];
for
(
var
j
=
0
;
j
<
3
;
j
++
)
{
vertexIndex
=
f1
[
faceIndices
[
j
]
];
p
=
geometry1
.
vertices
[
vertexIndex
];
color
=
new
THREE
.
Color
(
0xffffff
);
color
.
setHSL
(
(
p
.
y
/
radius
+
1
)
/
2
,
1.0
,
0.5
);
f1
.
vertexColors
[
j
]
=
color
;
color
=
new
THREE
.
Color
(
0xffffff
);
color
.
setHSL
(
0.0
,
(
p
.
y
/
radius
+
1
)
/
2
,
0.5
);
f2
.
vertexColors
[
j
]
=
color
;
color
=
new
THREE
.
Color
(
0xffffff
);
color
.
setHSL
(
0.125
*
vertexIndex
/
geometry1
.
vertices
.
length
,
1.0
,
0.5
);
f3
.
vertexColors
[
j
]
=
color
;
}
}
var
materials
=
[
new
THREE
.
MeshLambertMaterial
(
{
color
:
0xffffff
,
shading
:
THREE
.
FlatShading
,
vertexColors
:
THREE
.
VertexColors
}
),
new
THREE
.
MeshBasicMaterial
(
{
color
:
0x000000
,
shading
:
THREE
.
FlatShading
,
wireframe
:
true
,
transparent
:
true
}
)
];
group1
=
THREE
.
SceneUtils
.
createMultiMaterialObject
(
geometry1
,
materials
);
group1
.
position
.
x
=
-
400
;
group1
.
rotation
.
x
=
-
1.87
;
scene
.
add
(
group1
);
group2
=
THREE
.
SceneUtils
.
createMultiMaterialObject
(
geometry2
,
materials
);
group2
.
position
.
x
=
400
;
group2
.
rotation
.
x
=
0
;
scene
.
add
(
group2
);
group3
=
THREE
.
SceneUtils
.
createMultiMaterialObject
(
geometry3
,
materials
);
group3
.
position
.
x
=
0
;
group3
.
rotation
.
x
=
0
;
scene
.
add
(
group3
);
return
scene
;
}
function
App
(
container
,
fullWidth
,
fullHeight
)
{
var
container
,
stats
;
var
camera
,
renderer
;
var
mouseX
=
0
,
mouseY
=
0
;
var
windowHalfX
=
window
.
innerWidth
/
2
;
var
windowHalfY
=
window
.
innerHeight
/
2
;
init
();
function
init
()
{
camera
=
new
THREE
.
PerspectiveCamera
(
20
,
container
.
clientWidth
/
container
.
clientHeight
,
1
,
10000
);
camera
.
setViewOffset
(
fullWidth
,
fullHeight
,
container
.
offsetLeft
,
container
.
offsetTop
,
container
.
clientWidth
,
container
.
clientHeight
);
camera
.
position
.
z
=
1800
;
renderer
=
new
THREE
.
WebGLRenderer
(
{
antialias
:
true
}
);
renderer
.
setClearColor
(
0xffffff
);
renderer
.
setPixelRatio
(
window
.
devicePixelRatio
);
renderer
.
setSize
(
container
.
clientWidth
,
container
.
clientHeight
);
container
.
appendChild
(
renderer
.
domElement
);
stats
=
new
Stats
();
stats
.
domElement
.
style
.
position
=
'
absolute
'
;
stats
.
domElement
.
style
.
top
=
'
0px
'
;
container
.
appendChild
(
stats
.
domElement
);
document
.
addEventListener
(
'
mousemove
'
,
onDocumentMouseMove
,
false
);
}
function
onDocumentMouseMove
(
event
)
{
mouseX
=
(
event
.
clientX
-
windowHalfX
);
mouseY
=
(
event
.
clientY
-
windowHalfY
);
}
//
this
.
animate
=
function
()
{
render
();
stats
.
update
();
};
function
render
()
{
camera
.
setViewOffset
(
fullWidth
,
fullHeight
,
container
.
offsetLeft
,
container
.
offsetTop
,
container
.
clientWidth
,
container
.
clientHeight
);
camera
.
position
.
x
+=
(
-
mouseX
-
camera
.
position
.
x
)
*
0.5
;
camera
.
position
.
y
+=
(
-
mouseY
-
camera
.
position
.
y
)
*
0.5
;
camera
.
lookAt
(
scene
.
position
);
renderer
.
render
(
scene
,
camera
);
}
}
</script>
</body>
</html>
src/core/BufferAttribute.js
浏览文件 @
04326883
...
...
@@ -4,6 +4,8 @@
THREE
.
BufferAttribute
=
function
(
array
,
itemSize
)
{
this
.
uuid
=
THREE
.
Math
.
generateUUID
();
this
.
array
=
array
;
this
.
itemSize
=
itemSize
;
...
...
src/core/InterleavedBuffer.js
浏览文件 @
04326883
...
...
@@ -4,6 +4,8 @@
THREE
.
InterleavedBuffer
=
function
(
array
,
stride
,
dynamic
)
{
this
.
uuid
=
THREE
.
Math
.
generateUUID
();
this
.
array
=
array
;
this
.
stride
=
stride
;
...
...
src/core/InterleavedBufferAttribute.js
浏览文件 @
04326883
...
...
@@ -4,6 +4,8 @@
THREE
.
InterleavedBufferAttribute
=
function
(
interleavedBuffer
,
itemSize
,
offset
)
{
this
.
uuid
=
THREE
.
Math
.
generateUUID
();
this
.
data
=
interleavedBuffer
;
this
.
itemSize
=
itemSize
;
this
.
offset
=
offset
;
...
...
src/renderers/WebGLRenderTarget.js
浏览文件 @
04326883
...
...
@@ -5,6 +5,8 @@
THREE
.
WebGLRenderTarget
=
function
(
width
,
height
,
options
)
{
this
.
uuid
=
THREE
.
Math
.
generateUUID
();
this
.
width
=
width
;
this
.
height
=
height
;
...
...
src/renderers/WebGLRenderer.js
浏览文件 @
04326883
此差异已折叠。
点击以展开。
src/renderers/webgl/WebGLObjects.js
浏览文件 @
04326883
...
...
@@ -7,6 +7,8 @@ THREE.WebGLObjects = function ( gl, info ) {
var
objects
=
{};
var
objectsImmediate
=
[];
var
webGLProps
=
new
THREE
.
WebGLProperties
();
var
morphInfluences
=
new
Float32Array
(
8
);
var
geometries
=
new
THREE
.
WebGLGeometries
(
gl
,
info
);
...
...
@@ -40,11 +42,10 @@ THREE.WebGLObjects = function ( gl, info ) {
}
delete
object
.
__webglInit
;
delete
object
.
_modelViewMatrix
;
delete
object
.
_normalMatrix
;
delete
object
.
__webglActive
;
delete
webGLProps
.
delete
(
object
)
;
}
...
...
@@ -66,14 +67,17 @@ THREE.WebGLObjects = function ( gl, info ) {
this
.
objects
=
objects
;
this
.
objectsImmediate
=
objectsImmediate
;
this
.
webGLProps
=
webGLProps
;
this
.
geometries
=
geometries
;
this
.
init
=
function
(
object
)
{
if
(
object
.
__webglInit
===
undefined
)
{
var
objectWebglProperties
=
webGLProps
.
get
(
object
);
if
(
objectWebglProperties
.
__webglInit
===
undefined
)
{
object
.
__webglInit
=
true
;
object
WebglProperties
.
__webglInit
=
true
;
object
.
_modelViewMatrix
=
new
THREE
.
Matrix4
();
object
.
_normalMatrix
=
new
THREE
.
Matrix3
();
...
...
@@ -81,9 +85,9 @@ THREE.WebGLObjects = function ( gl, info ) {
}
if
(
object
.
__webglActive
===
undefined
)
{
if
(
object
WebglProperties
.
__webglActive
===
undefined
)
{
object
.
__webglActive
=
true
;
object
WebglProperties
.
__webglActive
=
true
;
if
(
object
instanceof
THREE
.
Mesh
||
object
instanceof
THREE
.
Line
||
object
instanceof
THREE
.
PointCloud
)
{
...
...
@@ -188,10 +192,12 @@ THREE.WebGLObjects = function ( gl, info ) {
var
data
=
(
attribute
instanceof
THREE
.
InterleavedBufferAttribute
)
?
attribute
.
data
:
attribute
;
if
(
data
.
buffer
===
undefined
)
{
var
attributeWebGLProperties
=
webGLProps
.
get
(
data
);
if
(
attributeWebGLProperties
.
__webglBuffer
===
undefined
)
{
data
.
b
uffer
=
gl
.
createBuffer
();
gl
.
bindBuffer
(
bufferType
,
data
.
b
uffer
);
attributeWebGLProperties
.
__webglB
uffer
=
gl
.
createBuffer
();
gl
.
bindBuffer
(
bufferType
,
attributeWebGLProperties
.
__webglB
uffer
);
var
usage
=
gl
.
STATIC_DRAW
;
...
...
@@ -209,7 +215,7 @@ THREE.WebGLObjects = function ( gl, info ) {
}
else
if
(
data
.
needsUpdate
===
true
)
{
gl
.
bindBuffer
(
bufferType
,
data
.
b
uffer
);
gl
.
bindBuffer
(
bufferType
,
attributeWebGLProperties
.
__webglB
uffer
);
if
(
data
.
updateRange
===
undefined
||
data
.
updateRange
.
count
===
-
1
)
{
// Not using update ranges
...
...
@@ -236,6 +242,17 @@ THREE.WebGLObjects = function ( gl, info ) {
};
// returns the webgl buffer for a specified attribute
this
.
getAttributeBuffer
=
function
(
attribute
)
{
if
(
attribute
instanceof
THREE
.
InterleavedBufferAttribute
)
{
return
webGLProps
.
get
(
attribute
.
data
).
__webglBuffer
}
return
webGLProps
.
get
(
attribute
).
__webglBuffer
;
}
this
.
update
=
function
(
renderList
)
{
for
(
var
i
=
0
,
ul
=
renderList
.
length
;
i
<
ul
;
i
++
)
{
...
...
src/renderers/webgl/WebGLProperties.js
0 → 100644
浏览文件 @
04326883
/**
* @author fordacious / fordacious.github.io
*/
THREE
.
WebGLProperties
=
function
()
{
var
properties
=
{};
this
.
deleteAll
=
function
()
{
properties
=
{};
}
this
.
delete
=
function
(
object
)
{
delete
properties
[
object
.
uuid
];
};
this
.
get
=
function
(
object
)
{
initObject
(
object
);
return
properties
[
object
.
uuid
];
};
function
initObject
(
object
)
{
if
(
properties
[
object
.
uuid
]
===
undefined
)
{
properties
[
object
.
uuid
]
=
{};
}
}
};
utils/build/includes/common.json
浏览文件 @
04326883
...
...
@@ -160,6 +160,7 @@
"src/renderers/webgl/WebGLGeometries.js"
,
"src/renderers/webgl/WebGLObjects.js"
,
"src/renderers/webgl/WebGLProgram.js"
,
"src/renderers/webgl/WebGLProperties.js"
,
"src/renderers/webgl/WebGLShader.js"
,
"src/renderers/webgl/WebGLShadowMap.js"
,
"src/renderers/webgl/WebGLState.js"
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录