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