我正在试图弄清楚如何正确使用Three.js'内置ShaderChunk
用于照明和雾等等,我认为第一步就是复制其中一个ShaderLib
着色器'建立。所以从我开始使用:
customMaterial = new ShaderMaterial({
lights: true,
uniforms: UniformsUtils.merge( [
UniformsLib.common,
UniformsLib.specularmap,
UniformsLib.envmap,
UniformsLib.aomap,
UniformsLib.lightmap,
UniformsLib.emissivemap,
UniformsLib.fog,
UniformsLib.lights,
{
emissive: { value: new Color( 0x000000 ) },
diffuse: { value: new Color( 1,1,1 ) }
}
]),
vertexShader: document.getElementById("vertexShader").textContent,
fragmentShader: document.getElementById("fragmentShader").textContent
})
着色器代码只是直接从meshlambert_vert.glsl和meshlambert_frag.glsl复制,而该部分基于this entry in the ShaderLib
然而,我正在同时从两个不同的相机/渲染器渲染我的测试场景,我立刻发现了一个问题。对于已应用此customMaterial
的对象,更改一个摄像机的透视图会更改第二个摄像机的照明角度。
我认为这是因为其他地方引用了这些UniformLib
个对象?
我不确定我应该在这里传递什么,也不知道为什么这不起作用,但标准材料确实如此。我想我跳过了一步,但我不明白它会是什么。
这是一个codepen,我尽可能地解决了这个问题。现在它几乎是ShaderLib
来源的直接副本。在这一点上,我认为这是一个传递参考,它应该是WebGLRenderer
内的某个副本。 https://codepen.io/cl4ws0n/pen/dVewdZ
无论它的价值如何,我还尝试添加第二个场景,并在它们之间移动对象。这并没有解决它,也没有在单独的场景中共享材料的单独对象。
答案 0 :(得分:1)
WebGLRenderer对某些材料有一些硬编码逻辑。在这种情况下,它正在寻找一个名为isMeshLambertMaterial的标志:https://github.com/mrdoob/three.js/blob/r87/src/renderers/WebGLRenderer.js#L1780
因此,请尝试在材料中设置#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
int main()
{
char a[26];
a[0]='a';
a[1]='b';
a[2]='c';
a[3]='d';
a[4]='e';
a[5]='f';
a[6]='g';
a[7]='h';
a[8]='i';
a[9]='j';
a[10]='k';
a[11]='l';
a[12]='m';
a[13]='n';
a[14]='o';
a[15]='p';
a[16]='q';
a[17]='r';
a[18]='s';
a[19]='t';
a[20]='u';
a[21]='v';
a[22]='w';
a[23]='x';
a[24]='y';
a[25]='z';
char b[10];
b[0]='0';
b[1]='1';
b[2]='2';
b[3]='3';
b[4]='4';
b[5]='5';
b[6]='6';
b[7]='7';
b[8]='8';
b[9]='9';
printf("Enter the character of your choice-");
char c[1];
scanf("%c",&c);
int i =0;
for(i=0;i<26;i++)
{
if (c==a[i])
printf("The character is an alphabet");
}
int j;
for(j=0;j<10;j++)
{
if (c==b[j])
printf("The character is an number");
}
return 0;
}
。
答案 1 :(得分:0)
正如Matjaz Drolc所说,这是三个r87中的一个错误。 needsUpdate
ShaderMaterials
标记无法正常运行select min(p.start_timestamp AT TIME ZONE p.timezone AT TIME ZONE 'America/Phoenix') as Date,
'America/Phoenix' AS Timezone, sum(GREATEST(0, p.value)) as Value, p.uom as UnitOfMeasurement
from main.production_ts_2017_10 p
where p.start_timestamp AT TIME ZONE p.timezone >= to_date('2017-09-30','YYYY-MM-DD') + INTERVAL '2 day'
and p.start_timestamp AT TIME ZONE p.timezone <= '2017-10-30'
and p.serial_number = '5T7842974Z'
group by date_trunc('hour', p.start_timestamp AT TIME ZONE p.timezone AT TIME ZONE 'America/Phoenix'), p.uom
order by Date
。您可以在我的codepen链接中的每个渲染过程之前强制更新,它将正确呈现。请参阅前叉https://codepen.io/cl4ws0n/pen/qPYwzp
我在回购中遇到了问题,如果有人想跟踪它的进展,可以找到here。