不知道这是否可能,但是在three.js中使用ShaderToon.js,有没有办法使uBaseColor值透明?并将uLineColor值保留为不透明?
function createShaderMaterial( id, light, ambientLight ) {
var shader = THREE.ShaderToon[ id ];
var u = THREE.UniformsUtils.clone( shader.uniforms );
var vs = shader.vertexShader;
var fs = s
我正在使用Three.js中的一个场景(Three.js),它将极大地受益于使用点作为渲染原语,因为有大约200000个四边形来表示,用点表示这些四边形需要花费4倍的顶点,这意味着更少的绘制调用和更高的FPS。
现在,我试图使点更大,因为相机越来越接近一个给定的点。如果你在下面的场景中直接放大,你应该可以看到这个效果很好。但是,如果你把相机拖到左边或右边,点会逐渐变小,尽管摄像机与点的距离似乎是恒定的。我的直觉说问题一定是在顶点着色器中,它设置了gl_PointSize
(function() {
/**
* Generate a scene object with a back
简短的问题:我如何将纹理列表传递给着色器并访问片段着色器中的第n个纹理(其中n是一个与顶点着色器不同的值)?
更长的问题:我正在开发一个表示多个图像的Three.js 。每幅图像使用多个纹理中的一个,每个纹理都是包含几个缩略图的地图集。我正致力于实现自定义shaderMaterial来优化性能,但对于如何在着色器中使用多个纹理感到困惑。
我的目标是传递一个纹理列表和一个表示每个纹理的顶点数的数字,这样我就可以识别每个图像的顶点/像素应该使用的纹理。我认为我可以通过传递以下数据来实现这一点:
// Create a texture loader so we can load our image
我正在工作的一个Three.js场景,在其中,我想使用许多点与不同的纹理。然而,到目前为止,我还没有能够改变纹理在我的片段着色器。尽管以下场景中的点应该在纹理0(猫)和1(狗)之间交替,但所有点都显示相同的纹理:
/**
* Generate a scene object with a background color
**/
function getScene() {
var scene = new THREE.Scene();
scene.background = new THREE.Color(0xaaaaaa);
return scene;
}
/**
* Gene
好的,我已经声明了一个新的材质着色器(一个简单的法线映射),我正在尝试把它应用到一个OBJ (一个简单的立方体)上。
当我尝试时,Three.js告诉我:
.WebGLRenderingContext: GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 2
这是加载OBJ并声明材质着色器的代码的一部分:
// texture
var manager = new THREE.LoadingManager();
manager.onProgre
我试图添加一个地图到一个点的材料,有一个彩色纹理在Three.js。我尝试使用加法混合和映射属性来实现圆点,而不是方形点,但是它将纹理的颜色核武器化,并将其与点的白色混合。我想知道是否有更好的方法来混合两者,这样我就可以保持粒子的形状,但也能保持纹理的颜色?
我是particle.png
let pointShape = new THREE.TextureLoader().load("./models/particle.png");
m = new THREE.PointsMaterial({
size: pointSize,
我想用Three.js的法线贴图着色器渲染一个带有置换贴图的球体。我还在我的场景中使用了PointLight。
问题是我不能让我的置换球体被正确地照亮。事实上,如果我省略了纹理,使用法线贴图着色器材质的球体是全黑的,但是使用简单的meshLambertMaterial可以正确地照亮它。(见下图)
我尝试使用法线贴图/置换着色器和meshLambertMaterial创建多材质网格,但结果并不确定。
我是不是在创建着色器材质时做错了什么(参见下面的代码)?
var specularColor = 0xcccccc;
var diffuseColor = 0xffffff;
var ambiant
我很难用threejs的RawShaderMaterial类创建自己的材料。我目前有:
var geometry = new THREE.RingGeometry(/* params */);
//geometry.vertices.length = 441;
var vertexFooAttribs = [/* 441 instances of THREE.Vector3() */];
var material = new THREE.RawShaderMaterial({
uniforms: THREE.UniformsUtils.merge([
THREE.Uni