Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在三角形的顶部画线?_Javascript_Glsl_Webgl_Z Index - Fatal编程技术网

Javascript 如何在三角形的顶部画线?

Javascript 如何在三角形的顶部画线?,javascript,glsl,webgl,z-index,Javascript,Glsl,Webgl,Z Index,有没有一种方法可以在仍然使用相同程序和点的情况下,始终在gl.TRIANGLES的顶部绘制gl.LINE\u LOOP。是,但是gl.LINE\u LOOP将始终连接第一个点和最后一个点,这可能不是您想要的 gl.depthFunc(gl.LEQUAL); 在任何情况下,默认深度函数都是gl.LESS,这意味着在WebGL上进行深度测试时,仅当像素的深度值小于该像素的当前深度值时,才会渲染像素。因此,将其更改为gl.LEQUAL,您应该可以得到您想要的 gl.depthFunc(gl.LEQU

有没有一种方法可以在仍然使用相同程序和点的情况下,始终在
gl.TRIANGLES
的顶部绘制
gl.LINE\u LOOP

是,但是
gl.LINE\u LOOP
将始终连接第一个点和最后一个点,这可能不是您想要的

gl.depthFunc(gl.LEQUAL);
在任何情况下,默认深度函数都是
gl.LESS
,这意味着在WebGL上进行深度测试时,仅当像素的深度值小于该像素的当前深度值时,才会渲染像素。因此,将其更改为
gl.LEQUAL
,您应该可以得到您想要的

gl.depthFunc(gl.LEQUAL);
“严格使用”;
setDefaults({attribPrefix:“a_”});
常数v3=twgl.v3;
常数m4=twgl.m4;
const gl=twgl.getWebGLContext(document.getElementById(“c”);
//编译着色器、链接程序、查找位置
const programInfo=twgl.createProgramInfo(gl,[“vs”,“fs]”);
//调用gl.createBuffer、gl.bindBuffer、gl.bufferData
const bufferInfo=twgl.primitives.createSphereBufferInfo(gl,1,16,8);
变量={
u_lightDir:twgl.v3.normalize([1,20,-10]),
};
函数渲染(时间){
时间*=0.001;
twgl.resizeCanvasToDisplaySize(总图画布);
总图视口(0,0,总图画布宽度,总图画布高度);
总账启用(总账消隐面);
总帐启用(总帐深度测试);
德普丰克总帐(莱夸尔总帐);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
常数fov=30*Math.PI/180;
const aspect=gl.canvas.clientWidth/gl.canvas.clientHeight;
常数zNear=0.5;
常数zFar=10;
var投影=m4.透视图(视野、纵横比、zNear、zFar);
变量眼=[1,3,-5];
var目标=[0,0,0];
var-up=[0,1,0];
var摄像机=m4。注视(眼睛、目标、向上);
var view=m4.反向(摄像机);
var viewProjection=m4.乘法(投影,视图);
var world=m4.旋转Y(时间);
uniforms.u_worldInverseTransfose=m4.transpose(m4.inverse(world));
uniforms.u_worldViewProjection=m4.multiply(viewProjection,world);
总账使用程序(programInfo.program);
//调用gl.bindBuffer、gl.enableVertexAttributeArray、gl.VertexAttributePointer
twgl.setBuffersAndAttributes(总帐、程序信息、缓冲信息);
//呼叫总装
twgl.设置制服(程序信息、制服);
twgl.设置制服(程序信息{
u_环境:[0,0,0],
u_漫反射:[1,0,0],
});
总帐付款人(总帐三角形,缓冲信息,总帐无符号单位短,0);
//呼叫总装
twgl.设置制服(程序信息{
u_环境:[1,1,0],
u_漫反射:[0,0,0],
});
总帐付款人(总帐行循环、缓冲信息项、总帐无符号项、0);
请求动画帧(渲染);
}
请求动画帧(渲染)
body{margin:0;}
画布{显示:块;宽度:100vw;高度:100vh;}

均匀mat4 u_世界视图投影;
统一mat4 u_世界;
均匀mat4-u_-world逆变换;
属性向量4 a_位置;
属性向量3 a_normal;
可变vec3 v_正常;
void main(){
v_normal=(u_WorldInverseTransfose*vec4(a_normal,0)).xyz;
gl_位置=u_世界视图投影*a_位置;
}
精密中泵浮子;
可变vec3 v_正常;
均匀vec3 u_lightDir;
均匀vec3u_扩散;
均匀vec3 u_环境;
void main(){
vec3 a_normal=正常化(v_normal);
浮光=点(a_法线,u_lightDir)*.5+.5;
gl_FragColor=vec4(u_漫反射*光+u_环境光,1);
}