Skip to content Skip to sidebar Skip to footer

Translating 3d Objects With Webgl And Glmatrix

I want to translate two 3D objects separately in WebGl, right now my code changes only the position and rotation of the camera. I'm using glMatrix for vector math.'buffers' is an

Solution 1:

Your code should be structured to compute matrices for each object separately

A typical program is

renderloop
  set viewport
  clear
  compute projection matrix
  compute view matrix
  foreachobject
    use program forobjectset buffers and attributes (or vertex array object)
    compute a modelView matrix
    set uniforms 
    draw

In your case you have this outside the for each object loop

mat4.translate(modelViewMatrix,modelViewMatrix,[-0.0 + cubeTranslate, 0.0, -6.0]);
mat4.rotate(modelViewMatrix,modelViewMatrix,cubeRotation,[0, 0, 1]);

That's computing a camera matrix really. To get view matrix take the inverse

m4.invert(modelViewMatrix, modelViewMatrix);

Then inside your loop start with that matrix

for each objectconst mat = mat4.clone(modelViewMatrix);

     // now do something specific for each this object// for example
     mat4.translate(mat, mat, [objectNdx, 0, 0]);

Honestly I'd rename your matrices like this

   camera = mat4.create();

    // Camera Movement
    mat4.translate(camera,camera,[-0.0 + cubeTranslate, 0.0, -6.0]);
    mat4.rotate(camera,camera,cubeRotation,[0, 0, 1]);

    view = mat4.create();
    mat4.invert(view, camera);

    modelViewMatrix = mat4.create();

    for( i = 0; i < 2; i++ ){

        mat4.copy(modelViewMatrix, view);

        // now manipulate the matrix in ways specific to this model// example
        mat4.translate(modelViewMatrix, modelViewMatrix, [i, 0, 0]);

You might find this article helpful

Note that often the "compute modelView matrix" part is separated into a scene graph or at least partially separated. the scene graph returns "world matrices" which are then combined with the view matrix either in code or in the shader.

Post a Comment for "Translating 3d Objects With Webgl And Glmatrix"