Javascript 查看立方体的内角

Javascript 查看立方体的内角,javascript,webgl,Javascript,Webgl,我将如何修改此代码以生成立方体的内部,并使查看器看到内部的角。我添加了渲染功能 //cube vertices function quad(a, b, c, d) { var vertices = [ vec4( -0.5, -0.5, 0.5, 1.0 ), vec4( -0.5, 0.5, 0.5, 1.0 ), vec4( 0.5, 0.5, 0.5, 1.0 ), vec4( 0.5, -0.5,

我将如何修改此代码以生成立方体的内部,并使查看器看到内部的角。我添加了渲染功能

 //cube vertices
function quad(a, b, c, d)
{
    var vertices = [
        vec4( -0.5, -0.5,  0.5, 1.0 ),
        vec4( -0.5,  0.5,  0.5, 1.0 ),
        vec4(  0.5,  0.5,  0.5, 1.0 ),
        vec4(  0.5, -0.5,  0.5, 1.0 ),
        vec4( -0.5, -0.5, -0.5, 1.0 ),
        vec4( -0.5,  0.5, -0.5, 1.0 ),
        vec4(  0.5,  0.5, -0.5, 1.0 ),
        vec4(  0.5, -0.5, -0.5, 1.0 )
    ];

    var vertexColors = [
        [ 0.0, 0.0, 0.0, 1.0 ],  // black
        [ 1.0, 0.0, 0.0, 1.0 ],  // red
        [ 1.0, 1.0, 0.0, 1.0 ],  // yellow
        [ 0.0, 1.0, 0.0, 1.0 ],  // green
        [ 0.0, 0.0, 1.0, 1.0 ],  // blue
        [ 1.0, 0.0, 1.0, 1.0 ],  // magenta
        [ 0.0, 1.0, 1.0, 1.0 ],  // cyan
        [ 1.0, 1.0, 1.0, 1.0 ]   // white
    ];
如果要查看几何体的“内部”,建议激活面剔除。但使用正面消隐代替背面消隐。
另见

请注意,要使其正确工作,几何图形的所有面必须按顺时针或逆时针方向定向,并且必须按以下任一方向指定方向:

gl.frontFace( gl.CCW ); // counterclockwise 

gl.CCW
为默认值

请参见示例,其中左侧使用背面消隐绘制,右侧使用正面消隐绘制:

(函数loadscene(){
变量大小、总帐、进度图、vp_大小;
var bufCube={};
函数渲染(delteMS){
Camera.create();
Camera.vp=vp_尺寸;
gl.禁用(gl.剪刀试验);
gl.clearColor(0.0,0.0,0.0,1.0);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
//设置绘图着色器
ShaderProgram.Use(progDraw.prog);
SetUniformM44(progDraw.prog,“u_projectionMat44”,Camera.Perspective());
SetUniformM44(progDraw.prog,“u_viewMat44”,Camera.LookAt());
var modelMat=IdentityMat44()
modelMat=旋转轴(modelMat,CalcAng(delteMS,13.0),0);
modelMat=旋转轴(modelMat,CalcAng(delteMS,17.0),1);
ShaderProgram.SetUniformM44(progDraw.prog,“u_modelMat44”,modelMat);
//画场景
总帐启用(总帐深度测试);
总账启用(总账消隐面);
总图正面(总图CCW);
//gl.正面(gl.CW);
gl.启用(gl.剪刀试验);
总图剪刀(0,0,vp_尺寸[0]/2,vp_尺寸[1]);
gl.正面(gl.背面);
VertexBuffer.Draw(bufCube);
总图剪刀(vp_尺寸[0]/2,0,vp_尺寸[0]/2,vp_尺寸[1]);
总图正面(总图正面);
VertexBuffer.Draw(bufCube);
请求动画帧(渲染);
}
函数resize(){
//vp_大小=[gl.drawingBufferWidth,gl.drawingBufferHeight];
//vp_size=[gl.canvas.clientWidth,gl.canvas.clientHeight]
vp_size=[window.innerWidth,window.innerHeight]
canvas.width=vp_大小[0];
canvas.height=vp_大小[1];
总图视口(0,0,vp_大小[0],vp_大小[1]);
}
函数initScene(){
canvas=document.getElementById(“canvas”);
gl=canvas.getContext(“实验性webgl”);
如果(!gl)
返回null;
progDraw={}
progDraw.prog=ShaderProgram.Create(
[{来源:“绘制着色器vs”,阶段:gl.VERTEX_shader},
{来源:“绘制着色器fs”,阶段:gl.FRAGMENT_shader}
] );
如果(!progDraw.prog)
返回null;
progDraw.inPos=gl.getAttribLocation(progDraw.prog,“inPos”);
progDraw.inCol=gl.getAttribLocation(progDraw.prog,“inCol”);
//创建多维数据集
var cubePos=[
-1.0, -1.0,  1.0,  1.0, -1.0,  1.0,  1.0,  1.0,  1.0, -1.0,  1.0,  1.0,
-1.0, -1.0, -1.0,  1.0, -1.0, -1.0,  1.0,  1.0, -1.0, -1.0,  1.0, -1.0 ];
var cubeCol=[1.0,0.0,0.0,1.0,0.5,0.0,1.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0];
var cubeHlpInx=[0,1,2,3,1,5,6,2,5,4,7,6,4,0,3,7,3,2,6,7,1,0,4,5];
变量cubePosData=[];
对于(变量i=0;igl.frontFace( gl.CCW ); // counterclockwise 
gl.frontFace( gl.CW );  // clockwise