ObJS ==== ## A 3D Wavefront obj file viewer for HTML5 written in JavaScript ### ### Live demo ### https://objs.inigovalentin.com ### Features ### * Object rotation. * Zoom in and out. * Object movement. * Mouse and touch control. * Choose to draw (or not) vertices, edges or faces. * Use mtl files for material color. * Change colors of background, vertices, edges, and faces during runtime. * Change face transparency during runtime, so hidden elements are visible. * Change zoom and rotation speed during runtime. ### How to use ### Just include the *ObJS.js* in your project, create a ObJS object, and initalize its canvas. ```javascript myObJS = new ObJS(); myObJS.initCanvas(canvas); ``` * *canvas* is the canvas element in witch the model will be represented. If this parameter is not specified, the script will try to use a canvas called *ObJSCanvas*. Then you can load any obj model by calling ```javascript myObJS.load(file); ``` * *file* is a character string with the path to the file, relative or absolute. If you want to clear the canvas, just call ```javascript myObJS.clear(); ``` Note that the canvas is automatically cleared when a new object is loaded. ### Transformations ### ##### Rotate the object ##### You can rotate the object by dragging it with the mouse or your finger in a touch screen. Also, you can apply rotation programatically: ```javascript setRotationSpeed(int speed) rotateX(int direction) rotateY(int direction) ``` ##### Move the object ##### You can move the object around by dragging it with the mouse while holding down the *shift* key. Also, you can move it programatically: ```javascript setMovementSpeed(value) moveHorizontal(int direction) moveVertical(int direction) ``` ##### Zoom ##### Zoom in and out can be achieven with the mouse wheel, by pinching the mode if you are using a touch screen, or programatically: ```javascript setZoomSpeed(int speed) zoom(int level) ``` ### Customization ### You can programatically change parameters such as the elements to draw, their color, transparency, rotation speed, zoom speed... ```javascript drawVertices(boolean draw) drawEdges(boolean draw) drawFaces(boolean draw) drawBackground(boolean draw) setVerticesColor(string code) setEdgesColor(string code) setFacesColor(string code) setBackgroundColor(string code) setAlpha(int alpha) linkMaterial(boolean link) ``` ### Full list of methods ### | Method | Return | Description | | -------------------------------------- | ----------------------------------------------------- | ----------- | | ```drawBackground(boolean draw)``` | - | A solid color background is shown in the canvas depending on the value of *draw*. | | ```drawEdges(boolean draw)``` | - | The edges of the model are represented in the canvas depending on the value of *draw*. | | ```drawFaces(boolean draw)``` | - | The faces of the model are represented in the canvas depending on the value of *draw*. | | ```drawVertices(boolean draw)``` | - | The vertizes of the model are represented in the canvas depending on the value of *draw*. | | ```clear()``` | - | Clears the canvas. | ```getBackgroundColor()``` | {'red': int, 'green': int, 'blue': int, 'alpha': int} | Returns the set color of the canvas background, even if it's not being drawn. | ```getEdgeColor()``` | {'red': int, 'green': int, 'blue': int, 'alpha': int} | Returns the set color of the model edges, even if they are not being drawn. | ```getFaceColor()``` | {'red': int, 'green': int, 'blue': int, 'alpha': int} | Returns the set color of the model face, even if they are not being drawn or a material file is being used. | ```getVertexColor()``` | {'red': int, 'green': int, 'blue': int, 'alpha': int} | Returns the set color of the model vertizes, even if they are not being drawn. | ```hasMaterial()``` | boolean | Will return true if a .mtl file exists for the current model. | | ```initCanvas(Canvas canv)``` | - | Initializes the canvas *canv* where the model will be drawn. Must be called before the model can be presented. | | ```isBackgroundDrawn()``` | boolean | Will return true if the canvas background is being drawn. | | ```isEdgeDrawn()``` | boolean | Will return true if the the model edges are being drawn. | | ```isFaceDrawn()``` | boolean | Will return true if the the model faces are being drawn. | | ```isVertexDrawn()``` | boolean | Will return true if the the model vertizes are being drawn. | | ```isMaterialUsed()``` | boolean | Will return true if a material is to be used, even if the material file does not exist. | | ```linkMaterial(boolean link)``` | - | If set to true, it will use a .mtl file in the same directory as the .obj one as material reference. Will have no efect if such file does not exist. | | ```load(string filename)``` | - | Loads a obj file. *filename* must be the name of the file, without path or extension. | | ```moveHorizontal(int direction)``` | - | Moves the model horizontally. A positive value for *direction* will move the model to the right, a negative one will do so to the left. It's recomended to use only values of 1 or -1 to achieve smooth transitions. To control the movements, see the setMovementSpeed(int speed) method.| | ```moveVertical(int direction)``` | - | Moves the model vertically. A positive value for *direction* will move the model up, a negative one will do so down. It's recomended to use only values of 1 or -1 to achieve smooth transitions. To control the movements, see the setMovementSpeed(int speed) method.| | ```rotateX(int direction)``` | - | Rotates the model around the X coordinate. A positive value for *direction* will rotate the model clockwise, a negative one will do so counterclockwise. It's recomended to use only values of 1 or -1 to achieve smooth transitions. To control the speed rotation, see the setRotationSpeed(int speed) method.| | ```rotateY(int direction)``` | - | Rotates the model around the Y coordinate. A positive value for *direction* will rotate the model clockwise, a negative one will do so counterclockwise. It's recomended to use only values of 1 or -1 to achieve smooth transitions. To control the speed rotation, see the setRotationSpeed(int speed) method.| | ```setAlpha(int alpha)``` | - | Sets the transparency of the faces of the model, 0 being fully transparent and 100 fully opaque. | | ```setBackgroundColor(string color)``` | - | Sets the color of the background of the canvas. *color* is a hexadecimal triplet with the color code, including the number sign ('#'), and three or six hexadecimal characters, case insensitive. | | ```setEdgesColor(string color)``` | - | Sets the color of the edges of the model. *color* is a hexadecimal triplet with the color code, including the number sign ('#'), and three or six hexadecimal characters, case insensitive. | | ```setFacesColor(string color)``` | - | Sets the color of the faces of the model. *color* is a hexadecimal triplet with the color code, including the number sign ('#'), and three or six hexadecimal characters, case insensitive. This method will have no efect if a matarial file is enabled. | | ```setMovementSpeed(int speed)``` | - | Sets the speed at which the model will move, between 0 and 10. The greater it is, the greater the movement speed. | | ```setRotationSpeed(int speed)``` | - | Sets the speed at which the model will rotate, between 0 and 10. The greater it is, the greater the rotation speed. | | ```setVerticesColor(string color)``` | - | Sets the color of the vertizes of the model. *color* is a hexadecimal triplet with the color code, including the number sign ('#'), and three or six hexadecimal characters, case insensitive. | | ```setZoomSpeed(int speed)``` | - | Sets the speed at which the model will be zommed in or out, between 0 and 10. The greater it is, the greater the zoom speed. | | ```zoom(int level)``` | - | Zooms in or out of the model. A positive value for *level* will zoom in, a negative one will zoom out. It's recomended to use only values of 1 or -1 to achieve smooth transitions. To control the zoom rotation, see the setZoomSpeed(int speed) method.|