我正在寻找一些简单的(免费!)入门级软件,它允许我创建简单的3D模型并以格式(JSON?)导出它们,然后可以将其读入webGL程序.
简单的几何形状将是一个开始,然后纹理也会很好......我看过Blender,它对我来说太高级了,我发现的教程是没有希望的.
像sketchup这样简单的东西会很好,但是你不能用JSON导出.我发现了一些将.dae转换为.json的转换器,但我发现的转换器似乎适用于高级用户.
编辑
好的,我尝试过使用四元数的相机:
qyaw = [Math.cos(rot[0]/2), 0, Math.sin(rot[0]/2), 0];
qpitch = [Math.cos(rot[1]/2), 0, 0, Math.sin(rot[1]/2)];
rotQuat = quat4.multiply (qpitch, qyaw);
camRot = quat4.toMat4(rotQuat);
camMat = mat4.multiply(camMat,camRot);
Run Code Online (Sandbox Code Playgroud)
我得到完全相同的问题.所以我猜它不是万向节锁.我已经尝试改变我乘以矩阵的顺序,但它只是相机矩阵*模型视图矩阵,然后是对象矩阵*模型视图.那是对的不是吗?
我正在尝试在webGL中构建一个可以在世界各地移动并围绕x和y(向右和向上)轴旋转的3d相机.
我遇到了熟悉的问题(可能是万向节锁?),一旦其中一个轴旋转,另一个轴的旋转就会被拧紧; 例如,当您围绕Y轴旋转90度时,围绕x的旋转变为绕z旋转.
我很欣赏这是一个常见的问题,并且有很多指南来构建一个避免这个问题的相机,但据我所知,我已经实现了两个不同的解决方案,我仍然遇到同样的问题.坦率地说,它正在努力......
我正在使用的一个解决方案是这个(改编自http://www.toymaker.info/Games/html/camera.html):
function updateCam(){
yAx = [0,1,0];
xAx = [1,0,0];
zAx = [0,0,1];
mat4.identity(camMat);
xRotMat = mat4.create();
mat4.identity(xRotMat)
mat4.rotate(xRotMat,rot[0],xAx);
mat4.multiplyVec3(xRotMat,zAx);
mat4.multiplyVec3(xRotMat,yAx);
yRotMat = mat4.create();
mat4.identity(yRotMat)
mat4.rotate(yRotMat,rot[1],yAx);
mat4.multiplyVec3(yRotMat,zAx);
mat4.multiplyVec3(yRotMat,xAx);
zRotMat = mat4.create();
mat4.identity(zRotMat)
mat4.rotate(zRotMat,rot[2],zAx);
mat4.multiplyVec3(zRotMat,yAx);
mat4.multiplyVec3(zRotMat,xAx);
camMat[0] = xAx[0];
camMat[1] = yAx[0];
camMat[2] = zAx[0];
//camMat[3] =
camMat[4] = xAx[1] …Run Code Online (Sandbox Code Playgroud) [编辑 - 一个问题几乎修复,改变了问题以反映它]
我正在研究Chrome中的点云webGL项目,它一次显示数百万个点.
为了使之更有效率,我已经试过包装我的数据 - 6辆XYZ和RGB花车 - 成两个64位整数(XY&zrgb),并计划解压它们在着色器.
我正在使用Chrome进行开发,而且,即使使用Canary,webkit也不支持任何类型的64位阵列类型.另外,Firefox确实支持64位阵列,但我仍然遇到错误.
这一行出现了问题:
gl.bufferData(gl.ARRAY_BUFFER, new Float64Array(data.xy), gl.DYNAMIC_DRAW);
Run Code Online (Sandbox Code Playgroud)
在Chrome中我得到的ArrayBufferView不是一个足够小的正整数,在FF中我得到'无效参数'.
所以我的问题是,有没有办法将64位数字发送到着色器,最好是使用Chrome,如果没有,在FF?
包装这样的数据是个好主意吗?有小费吗?!
谢谢,
约翰