Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
车家大少爷
three.js
提交
cc2fea97
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,发现更多精彩内容 >>
提交
cc2fea97
编写于
3月 11, 2017
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Clean up.
上级
e1be08e4
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
83 addition
and
35 deletion
+83
-35
examples/js/renderers/SoftwareRenderer.js
examples/js/renderers/SoftwareRenderer.js
+83
-34
src/renderers/webgl/WebGLLights.js
src/renderers/webgl/WebGLLights.js
+0
-1
未找到文件。
examples/js/renderers/SoftwareRenderer.js
浏览文件 @
cc2fea97
...
...
@@ -78,7 +78,7 @@ THREE.SoftwareRenderer = function ( parameters ) {
this
.
supportsVertexTextures
=
function
()
{};
this
.
setFaceCulling
=
function
()
{};
this
.
setClearColor
=
function
(
color
,
alpha
)
{
this
.
setClearColor
=
function
(
color
)
{
clearColor
.
set
(
color
);
clearColorBuffer
(
clearColor
);
...
...
@@ -179,7 +179,7 @@ THREE.SoftwareRenderer = function ( parameters ) {
var
material
=
element
.
material
;
var
shader
=
getMaterialShader
(
material
);
if
(
!
shader
)
continue
;
if
(
!
shader
)
continue
;
if
(
element
instanceof
THREE
.
RenderableFace
)
{
...
...
@@ -286,8 +286,8 @@ THREE.SoftwareRenderer = function ( parameters ) {
drawLine
(
element
.
v1
.
positionScreen
,
element
.
v2
.
positionScreen
,
element
.
vertexColors
[
0
],
element
.
vertexColors
[
1
],
element
.
vertexColors
[
0
],
element
.
vertexColors
[
1
],
shader
,
material
);
...
...
@@ -479,6 +479,7 @@ THREE.SoftwareRenderer = function ( parameters ) {
if
(
buffer
[
colorOffset
+
3
]
==
255
)
// Only opaue pixls write to the depth buffer
depthBuf
[
offset
]
=
depth
;
}
}
...
...
@@ -569,7 +570,7 @@ THREE.SoftwareRenderer = function ( parameters ) {
var
texture
=
new
THREE
.
SoftwareRenderer
.
Texture
();
texture
.
fromImage
(
material
.
map
.
image
);
if
(
!
texture
.
data
)
return
;
if
(
!
texture
.
data
)
return
;
textures
[
material
.
map
.
id
]
=
texture
;
...
...
@@ -624,7 +625,7 @@ THREE.SoftwareRenderer = function ( parameters ) {
'
buffer[ colorOffset + 2 ] = material.color.b * (color1.b+color2.b) * 0.5 * 255;
'
,
'
buffer[ colorOffset + 3 ] = 255;
'
,
'
depthBuf[ offset ] = depth;
'
].
join
(
'
\n
'
);
].
join
(
'
\n
'
);
shader
=
new
Function
(
'
buffer, depthBuf, offset, depth, color1, color2, material
'
,
string
);
...
...
@@ -645,12 +646,15 @@ THREE.SoftwareRenderer = function ( parameters ) {
shaders
[
id
]
=
shader
;
material
.
needsUpdate
=
false
;
}
return
shader
;
}
/*
function clearRectangle( x1, y1, x2, y2 ) {
var xmin = Math.max( Math.min( x1, x2 ), 0 );
...
...
@@ -674,6 +678,7 @@ THREE.SoftwareRenderer = function ( parameters ) {
}
}
*/
function
drawTriangle
(
v1
,
v2
,
v3
,
uv1
,
uv2
,
uv3
,
shader
,
face
,
material
)
{
...
...
@@ -700,13 +705,12 @@ THREE.SoftwareRenderer = function ( parameters ) {
var
bHasUV
=
uv1
&&
uv2
&&
uv3
;
var
longestSide
=
Math
.
max
(
Math
.
sqrt
(
(
x1
-
x2
)
*
(
x1
-
x2
)
+
(
y1
-
y2
)
*
(
y1
-
y2
)
),
Math
.
sqrt
(
(
x2
-
x3
)
*
(
x2
-
x3
)
+
(
y2
-
y3
)
*
(
y2
-
y3
)
),
Math
.
sqrt
(
(
x3
-
x1
)
*
(
x3
-
x1
)
+
(
y3
-
y1
)
*
(
y3
-
y1
)
)
Math
.
sqrt
(
(
x1
-
x2
)
*
(
x1
-
x2
)
+
(
y1
-
y2
)
*
(
y1
-
y2
)
),
Math
.
sqrt
(
(
x2
-
x3
)
*
(
x2
-
x3
)
+
(
y2
-
y3
)
*
(
y2
-
y3
)
),
Math
.
sqrt
(
(
x3
-
x1
)
*
(
x3
-
x1
)
+
(
y3
-
y1
)
*
(
y3
-
y1
)
)
);
if
(
!
(
face
instanceof
THREE
.
RenderableSprite
)
&&
(
longestSide
>
100
*
fixscale
)
)
{
if
(
!
(
face
instanceof
THREE
.
RenderableSprite
)
&&
(
longestSide
>
100
*
fixscale
)
)
{
// 1
// |\
...
...
@@ -716,11 +720,13 @@ THREE.SoftwareRenderer = function ( parameters ) {
// |b\|d\
// |__\__\
// 2 3
var
tempFace
=
{
vertexNormalsModel
:
[],
color
:
face
.
color
};
var
tempFace
=
{
vertexNormalsModel
:
[],
color
:
face
.
color
};
var
mpUV12
,
mpUV23
,
mpUV31
;
if
(
bHasUV
)
{
if
(
mpUVPoolCount
===
mpUVPool
.
length
)
{
mpUV12
=
new
THREE
.
Vector2
();
mpUVPool
.
push
(
mpUV12
);
++
mpUVPoolCount
;
...
...
@@ -732,27 +738,37 @@ THREE.SoftwareRenderer = function ( parameters ) {
mpUV31
=
new
THREE
.
Vector2
();
mpUVPool
.
push
(
mpUV31
);
++
mpUVPoolCount
;
}
else
{
mpUV12
=
mpUVPool
[
mpUVPoolCount
];
++
mpUVPoolCount
;
mpUV23
=
mpUVPool
[
mpUVPoolCount
];
++
mpUVPoolCount
;
mpUV31
=
mpUVPool
[
mpUVPoolCount
];
++
mpUVPoolCount
;
}
var
weight
;
weight
=
(
1
+
v2
.
z
)
*
(
v2
.
w
/
v1
.
w
)
/
(
1
+
v1
.
z
);
mpUV12
.
copy
(
uv1
).
multiplyScalar
(
weight
).
add
(
uv2
).
multiplyScalar
(
1
/
(
weight
+
1
)
);
weight
=
(
1
+
v3
.
z
)
*
(
v3
.
w
/
v2
.
w
)
/
(
1
+
v2
.
z
);
mpUV23
.
copy
(
uv2
).
multiplyScalar
(
weight
).
add
(
uv3
).
multiplyScalar
(
1
/
(
weight
+
1
)
);
weight
=
(
1
+
v1
.
z
)
*
(
v1
.
w
/
v3
.
w
)
/
(
1
+
v3
.
z
);
mpUV31
.
copy
(
uv3
).
multiplyScalar
(
weight
).
add
(
uv1
).
multiplyScalar
(
1
/
(
weight
+
1
)
);
weight
=
(
1
+
v2
.
z
)
*
(
v2
.
w
/
v1
.
w
)
/
(
1
+
v1
.
z
);
mpUV12
.
copy
(
uv1
).
multiplyScalar
(
weight
).
add
(
uv2
).
multiplyScalar
(
1
/
(
weight
+
1
)
);
weight
=
(
1
+
v3
.
z
)
*
(
v3
.
w
/
v2
.
w
)
/
(
1
+
v2
.
z
);
mpUV23
.
copy
(
uv2
).
multiplyScalar
(
weight
).
add
(
uv3
).
multiplyScalar
(
1
/
(
weight
+
1
)
);
weight
=
(
1
+
v1
.
z
)
*
(
v1
.
w
/
v3
.
w
)
/
(
1
+
v3
.
z
);
mpUV31
.
copy
(
uv3
).
multiplyScalar
(
weight
).
add
(
uv1
).
multiplyScalar
(
1
/
(
weight
+
1
)
);
}
var
mpV12
,
mpV23
,
mpV31
;
if
(
mpVPoolCount
===
mpVPool
.
length
)
{
mpV12
=
new
THREE
.
Vector4
();
mpVPool
.
push
(
mpV12
);
++
mpVPoolCount
;
...
...
@@ -764,13 +780,18 @@ THREE.SoftwareRenderer = function ( parameters ) {
mpV31
=
new
THREE
.
Vector4
();
mpVPool
.
push
(
mpV31
);
++
mpVPoolCount
;
}
else
{
mpV12
=
mpVPool
[
mpVPoolCount
];
++
mpVPoolCount
;
mpV23
=
mpVPool
[
mpVPoolCount
];
++
mpVPoolCount
;
mpV31
=
mpVPool
[
mpVPoolCount
];
++
mpVPoolCount
;
}
mpV12
.
copy
(
v1
).
add
(
v2
).
multiplyScalar
(
0.5
);
...
...
@@ -778,8 +799,11 @@ THREE.SoftwareRenderer = function ( parameters ) {
mpV31
.
copy
(
v3
).
add
(
v1
).
multiplyScalar
(
0.5
);
var
mpN12
,
mpN23
,
mpN31
;
if
(
bHasNormal
)
{
if
(
bHasNormal
)
{
if
(
mpNPoolCount
===
mpNPool
.
length
)
{
mpN12
=
new
THREE
.
Vector3
();
mpNPool
.
push
(
mpN12
);
++
mpNPoolCount
;
...
...
@@ -791,53 +815,72 @@ THREE.SoftwareRenderer = function ( parameters ) {
mpN31
=
new
THREE
.
Vector3
();
mpNPool
.
push
(
mpN31
);
++
mpNPoolCount
;
}
else
{
mpN12
=
mpNPool
[
mpNPoolCount
];
++
mpNPoolCount
;
mpN23
=
mpNPool
[
mpNPoolCount
];
++
mpNPoolCount
;
mpN31
=
mpNPool
[
mpNPoolCount
];
++
mpNPoolCount
;
}
mpN12
.
copy
(
face
.
vertexNormalsModel
[
0
]
).
add
(
face
.
vertexNormalsModel
[
1
]
).
normalize
();
mpN23
.
copy
(
face
.
vertexNormalsModel
[
1
]
).
add
(
face
.
vertexNormalsModel
[
2
]
).
normalize
();
mpN31
.
copy
(
face
.
vertexNormalsModel
[
2
]
).
add
(
face
.
vertexNormalsModel
[
0
]
).
normalize
();
}
// a
if
(
bHasNormal
)
{
if
(
bHasNormal
)
{
tempFace
.
vertexNormalsModel
[
0
]
=
face
.
vertexNormalsModel
[
0
];
tempFace
.
vertexNormalsModel
[
1
]
=
mpN12
;
tempFace
.
vertexNormalsModel
[
2
]
=
mpN31
;
}
drawTriangle
(
v1
,
mpV12
,
mpV31
,
uv1
,
mpUV12
,
mpUV31
,
shader
,
tempFace
,
material
);
// b
if
(
bHasNormal
)
{
if
(
bHasNormal
)
{
tempFace
.
vertexNormalsModel
[
0
]
=
face
.
vertexNormalsModel
[
1
];
tempFace
.
vertexNormalsModel
[
1
]
=
mpN23
;
tempFace
.
vertexNormalsModel
[
2
]
=
mpN12
;
}
drawTriangle
(
v2
,
mpV23
,
mpV12
,
uv2
,
mpUV23
,
mpUV12
,
shader
,
tempFace
,
material
);
// c
if
(
bHasNormal
)
{
if
(
bHasNormal
)
{
tempFace
.
vertexNormalsModel
[
0
]
=
mpN12
;
tempFace
.
vertexNormalsModel
[
1
]
=
mpN23
;
tempFace
.
vertexNormalsModel
[
2
]
=
mpN31
;
}
drawTriangle
(
mpV12
,
mpV23
,
mpV31
,
mpUV12
,
mpUV23
,
mpUV31
,
shader
,
tempFace
,
material
);
// d
if
(
bHasNormal
)
{
if
(
bHasNormal
)
{
tempFace
.
vertexNormalsModel
[
0
]
=
face
.
vertexNormalsModel
[
2
];
tempFace
.
vertexNormalsModel
[
1
]
=
mpN31
;
tempFace
.
vertexNormalsModel
[
2
]
=
mpN23
;
}
drawTriangle
(
v3
,
mpV31
,
mpV23
,
uv3
,
mpUV31
,
mpUV23
,
shader
,
tempFace
,
material
);
return
;
}
// Z values (.28 fixed-point)
...
...
@@ -964,7 +1007,8 @@ THREE.SoftwareRenderer = function ( parameters ) {
}
var
dnxdx
,
dnzdy
,
cbnz
;
var
dnzdy
,
cbnz
;
if
(
bHasNormal
)
{
// Normal interpolation setup
...
...
@@ -1357,16 +1401,18 @@ THREE.SoftwareRenderer = function ( parameters ) {
function
drawLine
(
v1
,
v2
,
color1
,
color2
,
shader
,
material
)
{
// While the line mode is enable, blockSize has to be changed to 0.
if
(
!
lineMode
)
{
if
(
!
lineMode
)
{
lineMode
=
true
;
blockShift
=
0
;
blockSize
=
1
<<
blockShift
;
setSize
(
canvas
.
width
,
canvas
.
height
);
}
// TODO: Implement per-pixel z-clipping
if
(
v1
.
z
<
-
1
||
v1
.
z
>
1
||
v2
.
z
<
-
1
||
v2
.
z
>
1
)
return
;
if
(
v1
.
z
<
-
1
||
v1
.
z
>
1
||
v2
.
z
<
-
1
||
v2
.
z
>
1
)
return
;
var
halfLineWidth
=
Math
.
floor
(
(
material
.
linewidth
-
1
)
*
0.5
);
...
...
@@ -1410,7 +1456,7 @@ THREE.SoftwareRenderer = function ( parameters ) {
crossVector
.
cross
(
lookVector
);
crossVector
.
normalize
();
while
(
length
>
0
)
{
while
(
length
>
0
)
{
// Get this pixel.
pixelX
=
x2
+
length
*
unitX
;
...
...
@@ -1422,7 +1468,7 @@ THREE.SoftwareRenderer = function ( parameters ) {
pZ
=
(
pixelZ
+
subpixelBias
)
>>
subpixelBits
;
// Draw line with line width
for
(
var
i
=
-
halfLineWidth
;
i
<=
halfLineWidth
;
++
i
)
{
for
(
var
i
=
-
halfLineWidth
;
i
<=
halfLineWidth
;
++
i
)
{
// Compute the line pixels.
// Get the pixels on the vector that crosses to the line vector
...
...
@@ -1430,9 +1476,8 @@ THREE.SoftwareRenderer = function ( parameters ) {
pY
=
Math
.
floor
(
(
pixelY
+
crossVector
.
y
*
i
)
);
// if pixel is over the rect. Continue
if
(
rectx1
>=
pX
||
rectx2
<=
pX
||
recty1
>=
pY
||
recty2
<=
pY
)
continue
;
if
(
rectx1
>=
pX
||
rectx2
<=
pX
||
recty1
>=
pY
||
recty2
<=
pY
)
continue
;
// Find this pixel at which block
var
blockX
=
pX
>>
blockShift
;
...
...
@@ -1452,11 +1497,15 @@ THREE.SoftwareRenderer = function ( parameters ) {
var
offset
=
pX
+
pY
*
canvasWidth
;
if
(
pZ
<
zbuffer
[
offset
]
)
{
shader
(
data
,
zbuffer
,
offset
,
pZ
,
color1
,
color2
,
material
);
}
}
--
length
;
}
}
...
...
@@ -1514,11 +1563,11 @@ THREE.SoftwareRenderer = function ( parameters ) {
};
THREE
.
SoftwareRenderer
.
Texture
=
function
()
{
THREE
.
SoftwareRenderer
.
Texture
=
function
()
{
var
canvas
;
this
.
fromImage
=
function
(
image
)
{
this
.
fromImage
=
function
(
image
)
{
if
(
!
image
||
image
.
width
<=
0
||
image
.
height
<=
0
)
return
;
...
...
src/renderers/webgl/WebGLLights.js
浏览文件 @
cc2fea97
...
...
@@ -5,7 +5,6 @@
import
{
Color
}
from
'
../../math/Color
'
;
import
{
Vector3
}
from
'
../../math/Vector3
'
;
import
{
Vector2
}
from
'
../../math/Vector2
'
;
import
{
Matrix4
}
from
'
../../math/Matrix4
'
;
function
WebGLLights
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录