A Pipeline From COLLADA to WebGL for Skeletal Animation

Size: px
Start display at page:

Download "A Pipeline From COLLADA to WebGL for Skeletal Animation"

Transcription

1 A Pipeline From COLLADA to WebGL for Skeletal Animation Jeffery McRiffey, Ralph M. Butler, and Chrisila C. Pettey Computer Science Department, Middle Tennessee State University, Murfreesboro, TN, USA Abstract - Effective use of HTML5's canvas and its access to WebGL for rendering 3D content requires knowledge of how to import externally developed 3D content. Additionally, in order to efficiently reuse 3D content in various different browser applications, it is convenient to have a data format that can be rendered directly by the JavaScript program with WebGL. To that end, we have provided a process for extracting data from COLLADA files using Python's elementtree, storing it in a JSON format, and rendering it with JavaScript and WebGL. This process works for skeletal animation as well as other, less complicated, 3D data. Keywords: WebGL, COLLADA, Skeletal Animation, Maya, HTML5 In this paper we show how the power of Python's elementtree can be used to extract skeletal animation data from a COLLADA file converting it to a JSON format that can be rendered by WebGL. We begin with a discussion of the data that is needed by showing an example JSON file. We then show where the data can be found in a COLLADA file and how it can be extracted with Python's elementtree. We end with an explanation of how to render the JSON data with JavaScript and WebGL. Figures 1 and 2 show examples of screenshots of skeletal animation done with the process described in this paper. However, these two examples contain more triangles and joints than can be easily described here. Therefore, we will use the example shown in Figure 3 of a cube with nine joints where joints 3 and 4 are animated. 1 Introduction In the past, browser-based 3D graphics have been dependent on cumbersome plug-ins that were deficient in customization, sometimes relied on less efficient softwarebased rendering, required frequent plug-in related updates, and lacked support for mobile systems [3]. HTML5's canvas and its access to WebGL overcome these deficiencies. However, effective use of these technologies requires knowledge of how to import externally developed 3D content. For static geometry this process is fairly straightforward. The real challenge comes with rendering of skeletal animation. Our goal was to get a 3D object into our existing engine without altering the game engine code so that it could parse 3D files. To do this we decided to develop an external utility that would create an intermediate file using the JSON format. This would allow us to keep the game engine small, and at the same time allow us to investigate what data needed to be extracted. There are several file formats for 3D objects (e.g., dae, fbx, and obj). Since dae seemed to be an industry standard, we started with that. However, the interpretations of the standard were inconsistent (for example we could not move dae files between Blender and Maya). Since the standard was hard to interpret, we looked for software to help us. Surprisingly, at the time we began this, all the software that existed only dealt with static geometry. There were some packages that could understand animations for instance Maya can import a dae file but for the most part these were proprietary and did not export the file in a format that we could use. Figure 1. Three frames of a hand opening animation Figure 2. Three frames of a human jumping animation Figure 3. Three frames of an animated cube

2 2 Required data in JSON format The JSON format is a text based standard used for efficient information serialization and transmission [8]. Specifically, JSON is space efficient and eliminates the need for parsing COLLADA files within the rendering engine. The organization of the final JSON file is a series of key-value pairs. Figure 4 shows a subset of the JSON file for the animated cube shown in Figure 3. All 3D models have vertices that have positions, normals, and texture coordinates. The three attributes POSITION, NORMAL, and TEXCOORD can be seen as keys in Figure 4. The actual floating point values for the vertex attributes are stored in large arrays (represented as the values [] in Figure 4). Since each vertex has three values for position, three values for normal, and two values for texture coordinate, each vertex has eight numbers associated with it. Additionally all meshes are ultimately represented as triangles because that is currently required by WebGL. Since a vertex can belong to multiple triangles, the triangles are represented by an array of indices (another key-value pair with INDEX as the key). The key-value pairs directly related to animation are: JOINT_ID (a list of the joint names), WEIGHT (a list of joints that affect each vertex), BIND_SHAPE_MATRIX (a 4x4 matrix that allows for the mesh to be transformed by the skeleton s coordinate system [2]), JOINT (a description of each joint including the joint's id, parent, and the two 4X4 bind pose and inverse bind pose matrices), and ANIMATION (a dictionary containing a 4X4 matrix for each frame for each joint). 3 COLLADA COLLADA is an open, XML-based 3D asset format maintained by the Khronos Group [5]. There are a few comments that need to be made about creating the COLLADA files. First, all geometry should be triangulated before exporting because WebGL requires it [3]. Second, all animations should be baked before exporting as COLLADA. Finally, it is necessary to export the transformations as a single matrix (i.e., scale, rotation, and translation information is a single 4X4 matrix for all transformed portions of the model). To produce the appropriate JSON file we need to scan a COLLADA file for tags that define the elements associated with the JSON keys that were described in the preceding section. This sounds like an easy task, however COLLADA files are typically very large and the data for a single element is scattered throughout the tree hierarchy, sometimes with logical pointers from one portion of the tree into another. In the remainder of this section we will briefly describe the location of the various necessary elements within a Maya generated dae file. While all 3D content packages do produce dae files that conform to the standard, they do not typically produce the same dae file. So we concentrated on dae files produced by Maya. model = "Cube": "POSITION": [ ], "NORMAL": [ ], "TEXCOORD": [ ], "WEIGHT": [ ], "JOINT_ID": [ ], "INDEX": [ ], "BIND_SHAPE_MATRIX": [ ], "IMAGE_LOCATION": "textures/box.jpg", "JOINT": "joint1": "ID": 0,"PARENT": -1,"BIND_POSE": [ ],"INVERSE_BIND_POSE": [ ], "joint2": "ID": 1,"PARENT": joint1,"bind_pose": [ ],"INVERSE_BIND_POSE": [ ], "joint8": "ID": 7,"PARENT": joint1,"bind_pose": [ ],"INVERSE_BIND_POSE": [ ], "joint9": "ID": 8,"PARENT": joint1,"bind_pose": [ ],"INVERSE_BIND_POSE": [ ], "ANIMATION": "FRAME_LENGTH": 24, "FRAMES": "joint3": 1: [ ], 2: [ ], 3: [ ], 4: [ ], 5: [ ], 6: [ ], 19: [ ],20: [ ],21: [ ],22: [ ],23: [ ],24: [ ], "joint4": 1: [ ], 2: [ ], 3: [ ], 4: [ ], 5: [ ], 6: [ ], 19: [ ],20: [ ],21: [ ],22: [ ],23: [ ],24: [ ], Figure 4. Animated cube JSON model file 3.1 Static geometry The elements related to vertices, positions, normals, texture coordinates, and indices are located within the <library_geometries> element. Arnaud and Barnes [2] mention that the <library_geometries> element may contain numerous <geometry> elements. Furthermore, each <geometry> element includes a <mesh> element. The <mesh> element is the most interesting, as it holds one or more <source> elements and exactly one <vertices> element [2]. Once a <mesh> element is discovered, it must be examined for <source> elements. A typical <source> element will contain a <float_array> and a <technique_common> element. The <float_array> element s content contains a great deal of relevant data, and the <technique_common> element will hold <accessor> information for clarification. The <float_array> count attribute discloses the number of values within the array. Since a <mesh> may contain more than one

3 <source> element, the <source> id attribute must be checked against the <input> children of the appropriate parent element. As an example of the fact that the data for a single element is scattered throughout the COLLADA tree hierarchy, sometimes with logical pointers from one portion of the tree into another, the parent element for position is the <vertices> element, and it is necessary to compare the source attribute of the <input> child of <vertices> that has a semantic attribute equivalent to POSITION with the id attribute from the proposed <source> element. If the two attributes match, then the <source> element actually does contain vertex position information. For normals and texture coordinates, the <source> id attribute must be matched to an <input> source attribute within <triangles> instead of <vertices>. The <triangles> element links to the texture value for the texture coordinates with its material attribute, and the actual indices are stored within the <p> child of the <triangles> element. An <input> child of the <triangles> element with a VERTEX semantic requires an extra step, as its source attribute points back to the <vertices> element. The <input> child of the <vertices> element will be the final reference to the positions array. The offset attributes give starting points for each <input> element s indices. 3.2 Skeletal animation data Skeletal animation data can be divided into three major parts: joints, weights, and animation frames. The joint names are located within the <library_controllers> element. The <library_controllers> element will contain one or more <controller> elements with a <skin> element. Each joint needs an inverse bind matrix to correctly represent its location [5]. The inverse bind matrices can be extracted from the same <skin> element that contains joint names. The <joints> element should be searched for an <input> with a semantic attribute of INV_BIND_MATRIX. This <input> source attribute points to a <source> that contains a <float_array> element. The <float_array> contains 16 times the number of joints, which represents a 4x4 matrix for each joint. The information in <float_array> will ultimately be stored as separate 4x4 matrices for each joint. An initial transformation for each joint and a skeleton hierarchy must be determined. Within the <library_visual_scenes> element, a <visual_scene> element will represent joint information as a <node> with a type attribute of JOINT. The id attribute of each found joint should match a name in the relevant <Name_array> element. The first joint <node> found will be considered a root joint, which means the joint has no parent and is not influenced by other joints. Every joint found may have <node> children with JOINT types. Any child joint <node> will have the current parent <node> as its skeleton parent. Each joint <node> should also contain a <matrix> element. The <matrix> element represents a 4x4 initial transformation matrix. Figure 5 depicts a skeleton hierarchy for the cube in Figure 3 where joint1 is the parent of 8 other joints. <?xml version="1.0" encoding="utf-8"?> <COLLADA xmlns="" version=""> <asset></asset> <library_visual_scenes> <node name="joint1" id="joint1" type="joint"> <matrix></matrix> <node name="joint2" id="joint2" type="joint"> <matrix></matrix> <node name="joint9" id="joint9" type="joint"> <matrix></matrix> </library_visual_scenes> <scene></scene> </COLLADA> Figure 5. Joint hierarchy and initial transformation matrices <?xml version="1.0" encoding="utf-8"?> <COLLADA xmlns="" version=""> <asset></asset> <library_controllers> <bind_shape_matrix> </bind_shape_matrix> <source id="cubecontroller-joints"> <Name_array id="cubecontroller-joints-array" count="9"> joint1 joint2 joint3 joint4 joint5 joint6 joint7 joint8 joint9 </Name_array> </source> <source id="cubecontroller-weights"> <float_array id="cubecontroller-weights-array" count="17"> </float_array> </source> <vertex_weights count="8"> <input semantic="joint" offset="0" source="#cubecontroller-joints"/> <input semantic="weight" offset="1" source="#cubecontroller-weights"/> <vcount> </vcount> <v> //vertex //vertex //vertex //vertex //vertex //vertex //vertex //vertex 7 </v> </vertex_weights> </library_controllers> <scene></scene> </COLLADA> Figure 6. Weights and bind shape matrix

4 Inside the same <controller> element that contains joint information, weight information can also be found. First, a <bind_shape_matrix> element contains a 4x4 matrix that allows for the mesh to be transformed by the skeleton s coordinate system [2]. Next, a single <vertex_weights> contains <input> elements labeled with the semantic attributes JOINT and WEIGHT. The source attribute of the JOINT <input> should match the source attribute associated with the corresponding joint names, while the WEIGHT <input> points to a new <source> element. That <source> has a <float_array> child that contains all possible weights for the skin. Figure 6 shows the weight information for the skinned animated cube. All information for animation frames is located in the <library_animations> element. This element contains an <animation> element for each animated joint. The name attribute for each <animation> ties it to a specific joint. There is an <input> for a <sampler> for each <animation> that has an OUTPUT semantic attribute with a source attribute that points to a <source> element containing animation transform matrices. That <source> element contains a <float_array> with a count attribute equal to 16 times the number of frames since there are 16 elements in each frame matrix. Figure 7 shows a <library_animations> element for joint3 with all but the first two frames (32 elements) of the float arrays removed for readability. The joint joint3 is animated for 24 frames in this example, so there are 384 values total. <?xml version="1.0" encoding="utf-8"?> <COLLADA xmlns="" version=""> <asset></asset> <library_animations> <animation id="joint3-anim" name="joint3"> <animation> <source id="joint3-animation-output-transform"> <float_array id="joint3-matrix-animation-outputtransform-array" count="384"> </float_array> </source> <sampler id="joint3-animation-transform"> <input semantic="output" source="#joint3-animationoutput-transform" /> </sampler> </animation> </animation> </library_animations> <scene></scene> </COLLADA> Figure 7. Animation frame data for joint3 4 Python for COLLADA to JSON elementtree is a Python wrapper that allows the programmer to load XML files and store them as trees of elements. These trees can then be easily searched for the needed information. Figure 8 shows four examples of the simplicity and power of elementtree. The find method returns the first child of the current element, while findall returns all direct children of the current element. Using / specifies the path to the descendant element of the current element, while []'s can be used to specify attributes. For example #1 in Figure 8 will find the first <input> child of the <triangles> child of the current <mesh> that has a semantic attribute of VERTEX. A // can be used to search the entire subtree of the current element. For example #2 in Figure 8 will find all <node>'s that are descendants of <visualscene> while example #3 will find all <nodes>'s of type JOINT that are descendants of <visualscene>. Example #4 will return the first <material> descendant of the <library_materials> child of <root> that has an id of materialname. 1. vertexpossrc = mesh.find("./triangles/input[@semantic='vertex']") 2. allnodes = visualscene.findall(".//node") 3. jointnodes = visualscene.findall(".//node[@type='joint']") 4. material = root.find("./library_materials//material[@id='%s']" % (materialname) ) Figure 8. Sample elementtree code for extracting data from XML After the data has been extracted, it may have to be massaged in up to three different ways. First, each matrix extracted from the COLLADA file must be converted from row-major to column-major order. Second, since WebGL can only utilize a single index array, the separate position, normal, and texcoord arrays from the COLLADA file must be altered [3][7]. This index mapping for positions, normals, and texcoords works by examining inline indices in groups of three. For example, if the first indices examined were 3, 0, and 3, then the three elements in the third row of the COLLADA position array should be written to the JSON position array, the three elements in row 0 of the normal array should be written to the JSON normal array, and the two elements of the texcoord array found in row 3 should be written to the JSON texcoord array. The final index for all of these values is now stored as 0. This method is continued with increasing final indices until a repeating group of three original indices is encountered. Third, each vertex can have zero to n direct joint influences, so weight padding is required. Since WebGL will read a single weight array sequentially, zero weights must be appended to all vertices until they are associated with n weights. In our example n = 3. 5 WebGL There are four major steps for rendering a JSON model: initializing the WebGL context, compiling the shader program, pushing content from JSON to the GPU, and finally starting the rendering loop. In this paper we will not discuss initializing the WebGL context or the rendering loop as they are basic techniques described in [3] that are independent of what you might be rendering. The other two steps described in

5 this section build on techniques written by Rowell [9], Thomas [11], and Seidelin [10]. Rowell s base code was augmented to support skeletal animation [9]. 5.1 Shader program WebGL uses a subset of the OpenGL Shading Language for rendering known as GLSL ES [3]. Cantor and Jones [3] explain that GLSL ES is a lightweight, C-like language with specialized facilities for handling vectors and matrices. A shader program, consisting of a vertex and fragment shader, is required for rendering [1]. Anyuru [1] goes on to mention that a vertex shader handles geometric data one vertex at a time. The resulting information is converted to fragments and passed to the fragment shader; each fragment has the potential to ultimately become a pixel on the screen [1]. A major goal of this project was to support skeletal animation and basic lighting, which requires more complex shaders. New attributes for normals, joint identifiers, and joint weights must be sent to the vertex shader. Additionally, each vertex uses extra uniforms for all joint transform matrices, a normal matrix, and lighting information. A new varying variable for light weighting is also passed to the fragment shader. Figure 9 shows a commented and extensively altered fragment of a vertex shader for skeletal animation and lighting. 5.2 JSON to GPU Once the shader program has been initialized, data can be accessed from the JSON model and sent to the shaders. First the IMAGE_LOCATION is used to a load the texture image; the image must finish loading before any information is pushed to the GPU (Figure 10 shows how to initialize a texture). Next the POSITION, NORMAL, TEXTCOORD, JOINT_ID, WEIGHT, and INDEX arrays from the JSON model must be put into buffers for the vertex shader (see Figure 11). After the texture has loaded and the buffers have been filled, they can be pushed to the GPU. This requires setting up a vertex attribute pointer and binding each buffer [9] (Figure 12). The final step before drawing the scene is setting the uniforms based on the current projection, modelview, normal, and joint matrices (Figure 13). The projection, model-view, and lighting uniforms only need to be updated when the perspective changes, the camera moves, or the model is transformed, so they do not need to be updated for every frame. Since the joint matrices are meant for animation, they have the potential to change for each frame and should be handled differently than the other uniforms. To calculate the joint matrices, a float array of size 16 times the maximum number of joints should be populated with JSON data. Every joint has a name, parent name, bind matrix, and inverse bind matrix in the JSON file. Since a joint can influence other joints, a set of world joint transformations must be calculated. A joint s world matrix is equal to the product of its parent s world matrix and its own bind pose matrix; if a joint has no parent, its world matrix is simply its own bind pose matrix. A joint s world matrix is then multiplied by its inverse bind matrix and the skin s bind shape matrix. The resulting 4x4 matrix can then be stored before being sent to the shader. If the model has associated animations, then the current frame s joint matrix takes the place of the joint s bind pose matrix for world matrix calculation. Figure 14 gives pseudocode for calculating the skinning and animation matrices for joints. attribute vec3 avertexposition; //positions x,y,z attribute vec3 avertexnormal; //normals x,y,z attribute vec3 ajointid; //joint ids padded to 3 attribute vec3 ajointweight; //joint weights padded to 3 uniform mat4 ujmatrix[30]; //up to 30 4x4 joint matrices uniform mat4 umvmatrix; //4x4 model-view matrix uniform mat4 upmatrix; //4x4 projection matrix uniform vec3 ulightingdirection; //light direction void main(void) vec4 newvertex; //vertex after joint transformations vec4 newnormal; //normal after joint transformations //if no joint influences still render the vertex //calculate the new vertex based on the corresponding joint matrices newvertex = ujmatrix[int(ajointid[0])] * vec4(avertexposition, 1.0) * ajointweight[0]; newvertex = ujmatrix[int(ajointid[1])] * vec4(avertexposition, 1.0) * ajointweight[1] + newvertex; newvertex = ujmatrix[int(ajointid[2])] * vec4(avertexposition, 1.0) * ajointweight[2] + newvertex; newvertex[3] = 1.0; //calculate the new normal based on the corresponding joint matrices newnormal = ujmatrix[int(ajointid[0])] * vec4(avertexnormal, 0.0) * ajointweight[0]; newnormal = ujmatrix[int(ajointid[1])] * vec4(avertexnormal, 0.0) * ajointweight[1] + newnormal; newnormal = ujmatrix[int(ajointid[2])] * vec4(avertexnormal, 0.0) * ajointweight[2] + newnormal; //calculate final vertex position gl_position = upmatrix * umvmatrix * newvertex; //send textcoords to frag shader //if no lighting, send frag weights of 1.0 // //calculate final normal from the normal matrix and xyz //coordinates of newnormal //set dirlightweighting to the dot product of //transformednormal and ulightingdirection or 0.0, return the //largest value //calculate light weighting and send to frag shader Figure 9. Vertex shader for skeletal animation and lighting 6 Conclusions and future work The work presented here provides a brief overview of a process for extracting the 3D skeletal animation content from a COLLADA file generated by Maya, summarizing that data in a JSON file, and rendering the JSON data with JavaScript and WebGL. The topic for this work was specifically chosen due to a lack of applicable literature on the process. It should be noted that due to the length requirements for the paper, it is impossible to give a detailed description of the entire process. Interested readers can get a more detailed description by checking out the the subversion directory (svn co vw3). The thesis

6 directory contains a detailed description of the process. The dae2json.py files are in the utils directory. A short tutorial and demo are located at While the COLLADA files used in this work were generated from Maya, we believe that the Python program would work with COLLADA files generated from other 3D content development packages such as Blender. This would provide us with a stable pipeline for extracting 3D data from any existing COLLADA file for rendering in any HTML5/WebGL browser application without altering the browser application. //The following algorithm is from [11] //creat a texture, and image, and load the image var objecttexture = glcontext.createtexture(); objecttexture.image = new Image(); objecttexture.image.src = model['cube']['image_location']; objecttexture.image.onload = function () //wait for image to load //set the texture as the current texture glcontext.bindtexture(glcontext.texture_2d, objecttexture); //flip the data along the vertical axis glcontext.pixelstorei(glcontext.unpack_flip_y_webgl, true); //upload the image to the GPU glcontext.teximage2d(glcontext.texture_2d, 0, glcontext.rgba, glcontext.rgba, glcontext.unsigned_byte, objecttexture.image); //fast image scaling up close glcontext.texparameteri(glcontext.texture_2d, glcontext.texture_mag_filter, glcontext.nearest); //fast image scaling far away glcontext.texparameteri(glcontext.texture_2d, glcontext.texture_min_filter, glcontext.nearest); //set current texture to null so the previous texture //isn t accidentally altered glcontext.bindtexture(glcontext.texture_2d, null); Figure 10. Texture initialization //function createarraybuffer(values) and function //createelementarraybuffer(values) come from //Rowell's class [10] var objectbuffers = ; //Create the position buffer objectbuffers.positionbuffer = createarraybuffer(model['cube']['position']); //Similar calls for normal, texture, joint weight, and joint id buffers //Finally create the element array buffer for indices objectbuffers.indexbuffer = createelementarraybuffer(model['cube']['index']); Figure 11. Creating data buffers //push index buffer and bind the buffer glcontext.bindbuffer(glcontext.element_array_buffer, objectbuffers.indexbuffer); //push position buffer, //bind the buffer and set the vertex attribute pointer glcontext.bindbuffer(glcontext.array_buffer, objectbuffers.positionbuffer); glcontext.vertexattribpointer( shaderprogram.vertexpositionattribute, 3, glcontext.float, false, 0, 0); //normals,joint ids, joint weights are all bound in the same manner //as positions the code has been omitted to save space //texture buffer is bound like the other data glcontext.bindbuffer(glcontext.array_buffer, objectbuffers.texturebuffer); glcontext.vertexattribpointer(shaderprogram.texturecoordattribute, 2, glcontext.float, false, 0, 0); //activate current texture, bind it, and send it to the frag shader glcontext.activetexture(glcontext.texture0); glcontext.bindtexture(glcontext.texture_2d, texture); glcontext.uniform1i(shaderprogram.sampleruniform, 0); Figure 12. Sending attributes to the vertex shader //set up pmatrix var view = 45; //vertical field of view var aspectratio = glcontext.viewportwidth / glcontext.viewportheight; var mindist = 1; var maxdist = 500; var pmatrix = mat4.create(); //empty 4x4 matrix mat4.perspective(view, aspectratio, mindist, maxdist, pmatrix); //set up mvmatrix var mvmatrix = mat4.create(); //empty 4x4 matrix mat4.idenity(mvmatrix); //no transforms yet mat4.translate(mvmatrix, [1, -5, -10]); //trans mvmatrix for x, y, z mat4.rotate(mvmatrix,.75, [0, 1, 0]); //rotate 0.75 radians for y mat4.rotate(mvmatrix,.25, [1, 0, 0]); //rotate 0.25 radians for x var lighting = true; //turn lighting on or off var lightingdirection = [-0.3, -0.3, -1.0]; //set lighting direction var lightingcolor = [0.1, 0.1, 0.1]; //set ambient lighting color rgb var directionalcolor = [0.9, 0.9, 0.9]; //set directional lighting rgb //normalize lighting direction var ald = vec3.create(); vec3.normalize(lightingdirection, ald); vec3.scale(ald, -1); if(lighting) //enable lighting and pass ambient lighting color to shader glcontext.uniform1(shaderprogram.uselightinguniform, true); glcontext.uniform3fv(shaderprogram.ambientcoloruniform, lightingcolor); //similarly pass directional lighting color and direction to the shader //pass pmatrix to the shader as mat4 glcontext.uniformmatrix4fv(shaderprogram.pmatrixuniform, false, pmatrix); //similarly pass mvmatrix //create and pass a normal matrix for proper lighting var normalmatrix = mat3.create(); mat4.toinversemat3(mvmatrix, normalmatrix); mat3.transpose(normalmatrix); glcontext.uniformmatrix3fv(shaderprogram.nmatrixuniform, false, normalmatrix); Figure 13. Sending uniforms to the shaders

7 function setuniformjointmatrix for(each joint) store parent name; set world_matrix to an empty 4x4 matrix; if(animation frame exists) if(not a root joint) set world_matrix to parent_world_matrix * frame_matrix; set world_matrix to frame_matrix; if(not a root joint) set world_matrix to parent_world_matrix * bind_pose_matrix; set world_matrix to bind_pose_matrix; set new_matrix to world_matrix * inverse_bind_pose_matrix; set final_matrix to bind_shape_matrix * new_matrix; store final_matrix; send all matrices to the shader; Figure 14. Psuedocode for calculating joint matrices 7 References [1] Anyuru, A Professional WebGL Programming: Developing 3D Graphics for the Web. Wrox, Chichester, UK. [2] Arnaud, R., and Barnes, M COLLADA: Sailing the Gulf of 3D Digital Content Creation. A K Peters, Wellesley, MA. [3] Cantor, D., and Jones, B WebGL Beginner s Guide. Packt, Birmingham, UK. [4] Irish, P., Möller E., and Zijdel, T requestanimationframe for Smart Animating. Oct [5] Khronos, 2012, COLLADA 3D Asset Exchange Schema. Sept [6] Khronos, WebGL Specification. Sept [7] Milivojec, M., Antolovic, I., and Rancic, D Evaluation and Visualization of 3D Models Using COLLADA Parser and WebGL Technology. In International Conference on Computers and Computing (Lanzarote, Canary Islands, Spain, May 2011), [8] Mozilla, JavaScript Reference. US/docs/JavaScript/Reference, Sept [9] Rowell, E HTML5 Canvas Cookbook. Packt, Birmingham, UK. [10] Seidelin, J HTML5 Games: Creating Fun with HTML5, CSS3, and WebGL. John Wiley and Sons. Chichester, UK. [11] Thomas, G. Learning WebGL. Sept

Programming 3D Applications with HTML5 and WebGL

Programming 3D Applications with HTML5 and WebGL Programming 3D Applications with HTML5 and WebGL Tony Parisi Beijing Cambridge Farnham Köln Sebastopol Tokyo Table of Contents Preface ix Part I. Foundations 1. Introduction 3 HTML5: A New Visual Medium

More information

Game Development in Android Disgruntled Rats LLC. Sean Godinez Brian Morgan Michael Boldischar

Game Development in Android Disgruntled Rats LLC. Sean Godinez Brian Morgan Michael Boldischar Game Development in Android Disgruntled Rats LLC Sean Godinez Brian Morgan Michael Boldischar Overview Introduction Android Tools Game Development OpenGL ES Marketing Summary Questions Introduction Disgruntled

More information

3D Graphics and Cameras

3D Graphics and Cameras 3D Graphics and Cameras Kari Pulli Senior Director Overview OpenGL ES 1.x OpenGL ES 2.0 WebGL OpenCV FCam All examples on this session on Android OpenGL: Project vertices to camera connect them to triangles

More information

Silverlight for Windows Embedded Graphics and Rendering Pipeline 1

Silverlight for Windows Embedded Graphics and Rendering Pipeline 1 Silverlight for Windows Embedded Graphics and Rendering Pipeline 1 Silverlight for Windows Embedded Graphics and Rendering Pipeline Windows Embedded Compact 7 Technical Article Writers: David Franklin,

More information

Image Processing and Computer Graphics. Rendering Pipeline. Matthias Teschner. Computer Science Department University of Freiburg

Image Processing and Computer Graphics. Rendering Pipeline. Matthias Teschner. Computer Science Department University of Freiburg Image Processing and Computer Graphics Rendering Pipeline Matthias Teschner Computer Science Department University of Freiburg Outline introduction rendering pipeline vertex processing primitive processing

More information

CSE 564: Visualization. GPU Programming (First Steps) GPU Generations. Klaus Mueller. Computer Science Department Stony Brook University

CSE 564: Visualization. GPU Programming (First Steps) GPU Generations. Klaus Mueller. Computer Science Department Stony Brook University GPU Generations CSE 564: Visualization GPU Programming (First Steps) Klaus Mueller Computer Science Department Stony Brook University For the labs, 4th generation is desirable Graphics Hardware Pipeline

More information

Web Based 3D Visualization for COMSOL Multiphysics

Web Based 3D Visualization for COMSOL Multiphysics Web Based 3D Visualization for COMSOL Multiphysics M. Jüttner* 1, S. Grabmaier 1, W. M. Rucker 1 1 University of Stuttgart Institute for Theory of Electrical Engineering *Corresponding author: Pfaffenwaldring

More information

Introduction to Computer Graphics

Introduction to Computer Graphics Introduction to Computer Graphics Version 1.1, January 2016 David J. Eck Hobart and William Smith Colleges This is a PDF version of a free, on-line book that is available at http://math.hws.edu/graphicsbook/.

More information

Color correction in 3D environments Nicholas Blackhawk

Color correction in 3D environments Nicholas Blackhawk Color correction in 3D environments Nicholas Blackhawk Abstract In 3D display technologies, as reviewers will say, color quality is often a factor. Depending on the type of display, either professional

More information

Introduction to Computer Graphics

Introduction to Computer Graphics Introduction to Computer Graphics Torsten Möller TASC 8021 778-782-2215 torsten@sfu.ca www.cs.sfu.ca/~torsten Today What is computer graphics? Contents of this course Syllabus Overview of course topics

More information

Shader Model 3.0. Ashu Rege. NVIDIA Developer Technology Group

Shader Model 3.0. Ashu Rege. NVIDIA Developer Technology Group Shader Model 3.0 Ashu Rege NVIDIA Developer Technology Group Talk Outline Quick Intro GeForce 6 Series (NV4X family) New Vertex Shader Features Vertex Texture Fetch Longer Programs and Dynamic Flow Control

More information

2: Introducing image synthesis. Some orientation how did we get here? Graphics system architecture Overview of OpenGL / GLU / GLUT

2: Introducing image synthesis. Some orientation how did we get here? Graphics system architecture Overview of OpenGL / GLU / GLUT COMP27112 Computer Graphics and Image Processing 2: Introducing image synthesis Toby.Howard@manchester.ac.uk 1 Introduction In these notes we ll cover: Some orientation how did we get here? Graphics system

More information

Tutorial 9: Skeletal Animation

Tutorial 9: Skeletal Animation Tutorial 9: Skeletal Animation Summary In the last couple of tutorials, you ve seen how to create a scene graph, and implemented a simple animating cube robot using them. You re probably wondering how

More information

Introduction to Computer Graphics. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012

Introduction to Computer Graphics. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012 CSE 167: Introduction to Computer Graphics Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012 Today Course organization Course overview 2 Course Staff Instructor Jürgen Schulze,

More information

How To Teach Computer Graphics

How To Teach Computer Graphics Computer Graphics Thilo Kielmann Lecture 1: 1 Introduction (basic administrative information) Course Overview + Examples (a.o. Pixar, Blender, ) Graphics Systems Hands-on Session General Introduction http://www.cs.vu.nl/~graphics/

More information

Plug-in Software Developer Kit (SDK)

Plug-in Software Developer Kit (SDK) Updated February 2, 2012 2 modo 601 Plug-in Development Kit for PC and Mac The modo 601 Plug-in Software Development Kit provides a set of Application Programming Interfaces (APIs) and numerous source

More information

3D Augmented Reality Mobile Application Prototype for Visual Planning Support

3D Augmented Reality Mobile Application Prototype for Visual Planning Support 3D Augmented Reality Mobile Application Prototype for Visual Planning Support Arnau Fombuena Valero Master s of Science Thesis in Geoinformatics TRITA-GIT EX 11-010 School of Architecture and the Built

More information

Performance Optimization and Debug Tools for mobile games with PlayCanvas

Performance Optimization and Debug Tools for mobile games with PlayCanvas Performance Optimization and Debug Tools for mobile games with PlayCanvas Jonathan Kirkham, Senior Software Engineer, ARM Will Eastcott, CEO, PlayCanvas 1 Introduction Jonathan Kirkham, ARM Worked with

More information

GUI GRAPHICS AND USER INTERFACES. Welcome to GUI! Mechanics. Mihail Gaianu 26/02/2014 1

GUI GRAPHICS AND USER INTERFACES. Welcome to GUI! Mechanics. Mihail Gaianu 26/02/2014 1 Welcome to GUI! Mechanics 26/02/2014 1 Requirements Info If you don t know C++, you CAN take this class additional time investment required early on GUI Java to C++ transition tutorial on course website

More information

Parallel Web Programming

Parallel Web Programming Parallel Web Programming Tobias Groß, Björn Meier Hardware/Software Co-Design, University of Erlangen-Nuremberg May 23, 2013 Outline WebGL OpenGL Rendering Pipeline Shader WebCL Motivation Development

More information

CMSC 425: Lecture 13 Animation for Games: Basics Tuesday, Mar 26, 2013

CMSC 425: Lecture 13 Animation for Games: Basics Tuesday, Mar 26, 2013 CMSC 425: Lecture 13 Animation for Games: Basics Tuesday, Mar 26, 2013 Reading: Chapt 11 of Gregory, Game Engine Architecture. Game Animation: Most computer games revolve around characters that move around

More information

Blender Notes. Introduction to Digital Modelling and Animation in Design Blender Tutorial - week 9 The Game Engine

Blender Notes. Introduction to Digital Modelling and Animation in Design Blender Tutorial - week 9 The Game Engine Blender Notes Introduction to Digital Modelling and Animation in Design Blender Tutorial - week 9 The Game Engine The Blender Game Engine This week we will have an introduction to the Game Engine build

More information

Using WPF for Computer Graphics

Using WPF for Computer Graphics Using WPF for Computer Graphics Matthew Jacobs, 2008 Evolution of (Graphics) Platforms 1/2 Graphics platforms have been going through the same evolution from low-level to high-level that programming languages

More information

Dashboard Skin Tutorial. For ETS2 HTML5 Mobile Dashboard v3.0.2

Dashboard Skin Tutorial. For ETS2 HTML5 Mobile Dashboard v3.0.2 Dashboard Skin Tutorial For ETS2 HTML5 Mobile Dashboard v3.0.2 Dashboard engine overview Dashboard menu Skin file structure config.json Available telemetry properties dashboard.html dashboard.css Telemetry

More information

Interactive Data Visualization for the Web Scott Murray

Interactive Data Visualization for the Web Scott Murray Interactive Data Visualization for the Web Scott Murray Technology Foundations Web technologies HTML CSS SVG Javascript HTML (Hypertext Markup Language) Used to mark up the content of a web page by adding

More information

Introduction to Computer Graphics with WebGL

Introduction to Computer Graphics with WebGL Introduction to Computer Graphics with WebGL Ed Angel Professor Emeritus of Computer Science Founding Director, Arts, Research, Technology and Science Laboratory University of New Mexico 1 Programming

More information

INTRODUCTION TO RENDERING TECHNIQUES

INTRODUCTION TO RENDERING TECHNIQUES INTRODUCTION TO RENDERING TECHNIQUES 22 Mar. 212 Yanir Kleiman What is 3D Graphics? Why 3D? Draw one frame at a time Model only once X 24 frames per second Color / texture only once 15, frames for a feature

More information

Computer Graphics on Mobile Devices VL SS2010 3.0 ECTS

Computer Graphics on Mobile Devices VL SS2010 3.0 ECTS Computer Graphics on Mobile Devices VL SS2010 3.0 ECTS Peter Rautek Rückblick Motivation Vorbesprechung Spiel VL Framework Ablauf Android Basics Android Specifics Activity, Layouts, Service, Intent, Permission,

More information

JavaFX 3D Animation: Bringing Duke to Life

JavaFX 3D Animation: Bringing Duke to Life JavaFX 3D : Bringing Duke to Life John Yoon Interaction, Visual, and 3D Designer Oracle October 1, 2014 Safe Harbor Statement The following is intended to outline our general product direction. It is intended

More information

VIRTUAL TRIAL ROOM USING AUGMENTED REALITY

VIRTUAL TRIAL ROOM USING AUGMENTED REALITY VIRTUAL TRIAL ROOM USING AUGMENTED REALITY Shreya Kamani, Neel Vasa, Kriti Srivastava, D. J. Sanghvi College of Engineering, Mumbai 53 Abstract This paper presents a Virtual Trial Room application using

More information

Surface and Volumetric Data Rendering and Visualization

Surface and Volumetric Data Rendering and Visualization Surface and Volumetric Data Rendering and Visualization LAB: Blender integration with OpenGL/Qt Massimo Mauro Department of Information Engineering Faculty of Engineering University of Brescia Via Branze,

More information

Visualizing Data: Scalable Interactivity

Visualizing Data: Scalable Interactivity Visualizing Data: Scalable Interactivity The best data visualizations illustrate hidden information and structure contained in a data set. As access to large data sets has grown, so has the need for interactive

More information

Monash University Clayton s School of Information Technology CSE3313 Computer Graphics Sample Exam Questions 2007

Monash University Clayton s School of Information Technology CSE3313 Computer Graphics Sample Exam Questions 2007 Monash University Clayton s School of Information Technology CSE3313 Computer Graphics Questions 2007 INSTRUCTIONS: Answer all questions. Spend approximately 1 minute per mark. Question 1 30 Marks Total

More information

Introduction to WebGL

Introduction to WebGL Introduction to WebGL Alain Chesnais Chief Scientist, TrendSpottr ACM Past President chesnais@acm.org http://www.linkedin.com/in/alainchesnais http://facebook.com/alain.chesnais Housekeeping If you are

More information

by Przemysław Króliszewski & Sebastian Korczak. itechnologie Sp. z o. o. p.kroliszewski@itechnologie.com.pl, s.korczak@itechnologie.com.

by Przemysław Króliszewski & Sebastian Korczak. itechnologie Sp. z o. o. p.kroliszewski@itechnologie.com.pl, s.korczak@itechnologie.com. T he game developers often faces the font problem - especially when they use the Blender Game Engine. Since 2.5 series, the BGE has got the feature to display fonts, with some settings applied in Blender.

More information

Chapter 6 - The Scene Graph

Chapter 6 - The Scene Graph Chapter 6 - The Scene Graph Why a scene graph? What is stored in the scene graph? objects appearance camera lights Rendering with a scene graph Practical example 1 The 3D Rendering Pipeline (our version

More information

NVPRO-PIPELINE A RESEARCH RENDERING PIPELINE MARKUS TAVENRATH MATAVENRATH@NVIDIA.COM SENIOR DEVELOPER TECHNOLOGY ENGINEER, NVIDIA

NVPRO-PIPELINE A RESEARCH RENDERING PIPELINE MARKUS TAVENRATH MATAVENRATH@NVIDIA.COM SENIOR DEVELOPER TECHNOLOGY ENGINEER, NVIDIA NVPRO-PIPELINE A RESEARCH RENDERING PIPELINE MARKUS TAVENRATH MATAVENRATH@NVIDIA.COM SENIOR DEVELOPER TECHNOLOGY ENGINEER, NVIDIA GFLOPS 3500 3000 NVPRO-PIPELINE Peak Double Precision FLOPS GPU perf improved

More information

10CS73:Web Programming

10CS73:Web Programming 10CS73:Web Programming Question Bank Fundamentals of Web: 1.What is WWW? 2. What are domain names? Explain domain name conversion with diagram 3.What are the difference between web browser and web server

More information

3D Modeling and Simulation using Image Stitching

3D Modeling and Simulation using Image Stitching 3D Modeling and Simulation using Image Stitching Sean N. Braganza K. J. Somaiya College of Engineering, Mumbai, India ShubhamR.Langer K. J. Somaiya College of Engineering,Mumbai, India Pallavi G.Bhoite

More information

Computer Graphics Hardware An Overview

Computer Graphics Hardware An Overview Computer Graphics Hardware An Overview Graphics System Monitor Input devices CPU/Memory GPU Raster Graphics System Raster: An array of picture elements Based on raster-scan TV technology The screen (and

More information

Lab7 : Putting Everything Together

Lab7 : Putting Everything Together 1 Lab7 : Putting Everything Together Introduction In the previous six OpenGL tutorials you ve learned to use textures, programmable shaders, basic shading, cube-mapping, render-to-texture and shadow maps.

More information

Institutionen för systemteknik Department of Electrical Engineering

Institutionen för systemteknik Department of Electrical Engineering Institutionen för systemteknik Department of Electrical Engineering Examensarbete 3D Graphics Technologies for Web Applications An Evaluation from the Perspective of a Real World Application Master thesis

More information

A Proposal for OpenEXR Color Management

A Proposal for OpenEXR Color Management A Proposal for OpenEXR Color Management Florian Kainz, Industrial Light & Magic Revision 5, 08/05/2004 Abstract We propose a practical color management scheme for the OpenEXR image file format as used

More information

Visualizing a Neo4j Graph Database with KeyLines

Visualizing a Neo4j Graph Database with KeyLines Visualizing a Neo4j Graph Database with KeyLines Introduction 2! What is a graph database? 2! What is Neo4j? 2! Why visualize Neo4j? 3! Visualization Architecture 4! Benefits of the KeyLines/Neo4j architecture

More information

OpenGL Shading Language Course. Chapter 5 Appendix. By Jacobo Rodriguez Villar jacobo.rodriguez@typhoonlabs.com

OpenGL Shading Language Course. Chapter 5 Appendix. By Jacobo Rodriguez Villar jacobo.rodriguez@typhoonlabs.com OpenGL Shading Language Course Chapter 5 Appendix By Jacobo Rodriguez Villar jacobo.rodriguez@typhoonlabs.com TyphoonLabs GLSL Course 1/1 APPENDIX INDEX Using GLSL Shaders Within OpenGL Applications 2

More information

Team Members: Christopher Copper Philip Eittreim Jeremiah Jekich Andrew Reisdorph. Client: Brian Krzys

Team Members: Christopher Copper Philip Eittreim Jeremiah Jekich Andrew Reisdorph. Client: Brian Krzys Team Members: Christopher Copper Philip Eittreim Jeremiah Jekich Andrew Reisdorph Client: Brian Krzys June 17, 2014 Introduction Newmont Mining is a resource extraction company with a research and development

More information

Interactive 3D Architectural Visualization with Semantics in Web Browsers

Interactive 3D Architectural Visualization with Semantics in Web Browsers JOURNAL OF APPLIED COMPUTER SCIENCE Vol. 20 No. 2 (2012), pp. 59-70 Interactive 3D Architectural Visualization with Semantics in Web Browsers Marcin Ksiażek, Maria Pietruszka Lodz University of Technology

More information

Two hours UNIVERSITY OF MANCHESTER SCHOOL OF COMPUTER SCIENCE. M.Sc. in Advanced Computer Science. Friday 18 th January 2008.

Two hours UNIVERSITY OF MANCHESTER SCHOOL OF COMPUTER SCIENCE. M.Sc. in Advanced Computer Science. Friday 18 th January 2008. COMP60321 Two hours UNIVERSITY OF MANCHESTER SCHOOL OF COMPUTER SCIENCE M.Sc. in Advanced Computer Science Computer Animation Friday 18 th January 2008 Time: 09:45 11:45 Please answer any THREE Questions

More information

Masters of Science in Software & Information Systems

Masters of Science in Software & Information Systems Masters of Science in Software & Information Systems To be developed and delivered in conjunction with Regis University, School for Professional Studies Graphics Programming December, 2005 1 Table of Contents

More information

Visualizing Information with HTML5. @synodinos

Visualizing Information with HTML5. @synodinos Visualizing Information with HTML5 @synodinos 35,000 years ago Chauvet cave, southern France By far the oldest paintings ever discovered Hundreds of paintings At least 13 different species Desktop Visualizations

More information

Android and OpenGL. Android Smartphone Programming. Matthias Keil. University of Freiburg

Android and OpenGL. Android Smartphone Programming. Matthias Keil. University of Freiburg Android and OpenGL Android Smartphone Programming Matthias Keil Institute for Computer Science Faculty of Engineering 16. Dezember 2013 Outline 1 OpenGL Introduction 2 Displaying Graphics 3 Interaction

More information

Character Animation Tutorial

Character Animation Tutorial Character Animation Tutorial 1.Overview 2.Modelling 3.Texturing 5.Skeleton and IKs 4.Keys 5.Export the character and its animations 6.Load the character in Virtools 7.Material & texture tuning 8.Merge

More information

Introduction Computer stuff Pixels Line Drawing. Video Game World 2D 3D Puzzle Characters Camera Time steps

Introduction Computer stuff Pixels Line Drawing. Video Game World 2D 3D Puzzle Characters Camera Time steps Introduction Computer stuff Pixels Line Drawing Video Game World 2D 3D Puzzle Characters Camera Time steps Geometry Polygons Linear Algebra NURBS, Subdivision surfaces, etc Movement Collisions Fast Distances

More information

Web Design & Development - Tutorial 04

Web Design & Development - Tutorial 04 Table of Contents Web Design & Development - Tutorial 04... 1 CSS Positioning and Layout... 1 Conventions... 2 What you need for this tutorial... 2 Common Terminology... 2 Layout with CSS... 3 Review the

More information

Finger Paint: Cross-platform Augmented Reality

Finger Paint: Cross-platform Augmented Reality Finger Paint: Cross-platform Augmented Reality Samuel Grant Dawson Williams October 15, 2010 Abstract Finger Paint is a cross-platform augmented reality application built using Dream+ARToolKit. A set of

More information

Beginning Android 4. Games Development. Mario Zechner. Robert Green

Beginning Android 4. Games Development. Mario Zechner. Robert Green Beginning Android 4 Games Development Mario Zechner Robert Green Contents Contents at a Glance About the Authors Acknowledgments Introduction iv xii xiii xiv Chapter 1: Android, the New Kid on the Block...

More information

JavaFX Session Agenda

JavaFX Session Agenda JavaFX Session Agenda 1 Introduction RIA, JavaFX and why JavaFX 2 JavaFX Architecture and Framework 3 Getting Started with JavaFX 4 Examples for Layout, Control, FXML etc Current day users expect web user

More information

OpenGL Insights. Edited by. Patrick Cozzi and Christophe Riccio

OpenGL Insights. Edited by. Patrick Cozzi and Christophe Riccio OpenGL Insights Edited by Patrick Cozzi and Christophe Riccio Browser Graphics Analysis and Optimizations 36 Chris Dirks and Omar A. Rodriguez 36.1 Introduction Understanding performance bottlenecks in

More information

Realtime 3D Computer Graphics Virtual Reality

Realtime 3D Computer Graphics Virtual Reality Realtime 3D Computer Graphics Virtual Realit Viewing and projection Classical and General Viewing Transformation Pipeline CPU Pol. DL Pixel Per Vertex Texture Raster Frag FB object ee clip normalized device

More information

Chapter 2 - Graphics Programming with JOGL

Chapter 2 - Graphics Programming with JOGL Chapter 2 - Graphics Programming with JOGL Graphics Software: Classification and History JOGL Hello World Program 2D Coordinate Systems in JOGL Dealing with Window Reshaping 3D Coordinate Systems in JOGL

More information

3D Modelling in Blender Based on Polygonal Data

3D Modelling in Blender Based on Polygonal Data 3D Modelling in Blender Based on Polygonal Data James Ribe MSCS Department St. Olaf College 1500 St. Olaf Ave Northfield, MN 55438 ribe@stolaf.edu Alora Killian MSCS Department St. Olaf College 1500 St.

More information

Multiresolution 3D Rendering on Mobile Devices

Multiresolution 3D Rendering on Mobile Devices Multiresolution 3D Rendering on Mobile Devices Javier Lluch, Rafa Gaitán, Miguel Escrivá, and Emilio Camahort Computer Graphics Section Departament of Computer Science Polytechnic University of Valencia

More information

Vertex and fragment programs

Vertex and fragment programs Vertex and fragment programs Jon Hjelmervik email: jonmi@ifi.uio.no 1 Fixed function transform and lighting Each vertex is treated separately Affine transformation transforms the vertex by matrix multiplication

More information

GearVRf Developer Guide

GearVRf Developer Guide GearVRf Developer Guide Welcome to GearVRf development! The Gear VR Framework (GearVRf) allows you, the Android developer, to write your own stereoscopic 3D virtual reality Java applications for the Samsung

More information

Writing Applications for the GPU Using the RapidMind Development Platform

Writing Applications for the GPU Using the RapidMind Development Platform Writing Applications for the GPU Using the RapidMind Development Platform Contents Introduction... 1 Graphics Processing Units... 1 RapidMind Development Platform... 2 Writing RapidMind Enabled Applications...

More information

Introduction to NaviGenie SDK Client API for Android

Introduction to NaviGenie SDK Client API for Android Introduction to NaviGenie SDK Client API for Android Overview 3 Data access solutions. 3 Use your own data in a highly optimized form 3 Hardware acceleration support.. 3 Package contents.. 4 Libraries.

More information

1. Definition of the project. 2. Initial version (simplified texture) 3. Second version (full textures) 5. Modelling and inserting 3D objects

1. Definition of the project. 2. Initial version (simplified texture) 3. Second version (full textures) 5. Modelling and inserting 3D objects Index 1. Definition of the project 2. Initial version (simplified texture) 3. Second version (full textures) 4. Final version in C++ 5. Modelling and inserting 3D objects 6. Interface design 7. Additional

More information

Visualization of Semantic Windows with SciDB Integration

Visualization of Semantic Windows with SciDB Integration Visualization of Semantic Windows with SciDB Integration Hasan Tuna Icingir Department of Computer Science Brown University Providence, RI 02912 hti@cs.brown.edu February 6, 2013 Abstract Interactive Data

More information

A Virtual Environment for Review and Annotation of Character Animation

A Virtual Environment for Review and Annotation of Character Animation A Virtual Environment for Review and Annotation of Character Animation Project Report CMPS 615 Virtual Reality, Spring 2008 Jan-Phillip Tiesel University of Louisiana at Lafayette jpt4246@cacs.louisiana.edu

More information

Introduction to GPGPU. Tiziano Diamanti t.diamanti@cineca.it

Introduction to GPGPU. Tiziano Diamanti t.diamanti@cineca.it t.diamanti@cineca.it Agenda From GPUs to GPGPUs GPGPU architecture CUDA programming model Perspective projection Vectors that connect the vanishing point to every point of the 3D model will intersecate

More information

C Compiler Targeting the Java Virtual Machine

C Compiler Targeting the Java Virtual Machine C Compiler Targeting the Java Virtual Machine Jack Pien Senior Honors Thesis (Advisor: Javed A. Aslam) Dartmouth College Computer Science Technical Report PCS-TR98-334 May 30, 1998 Abstract One of the

More information

IT 386: 3D Modeling and Animation. Review Sheet. Notes from Professor Nersesian s IT 386: 3D Modeling and Animation course

IT 386: 3D Modeling and Animation. Review Sheet. Notes from Professor Nersesian s IT 386: 3D Modeling and Animation course IT 386: 3D Modeling and Animation Review Sheet Sources: Notes from Professor Nersesian s IT 386: 3D Modeling and Animation course Notes from CannedMushrooms on YouTube Notes from Digital Tutors tutorial

More information

15.062 Data Mining: Algorithms and Applications Matrix Math Review

15.062 Data Mining: Algorithms and Applications Matrix Math Review .6 Data Mining: Algorithms and Applications Matrix Math Review The purpose of this document is to give a brief review of selected linear algebra concepts that will be useful for the course and to develop

More information

COMP175: Computer Graphics. Lecture 1 Introduction and Display Technologies

COMP175: Computer Graphics. Lecture 1 Introduction and Display Technologies COMP175: Computer Graphics Lecture 1 Introduction and Display Technologies Course mechanics Number: COMP 175-01, Fall 2009 Meetings: TR 1:30-2:45pm Instructor: Sara Su (sarasu@cs.tufts.edu) TA: Matt Menke

More information

Skinned Mesh Character Animation with Direct3D 9.0c

Skinned Mesh Character Animation with Direct3D 9.0c Skinned Mesh Character Animation with Direct3D 9.0c Frank Luna www.moon-labs.com Copyright 2004. All rights reserved. Created on Monday, February 20, 2004 Update 1 on Friday, September 10, 2004 Real-Time

More information

Recent Advances and Future Trends in Graphics Hardware. Michael Doggett Architect November 23, 2005

Recent Advances and Future Trends in Graphics Hardware. Michael Doggett Architect November 23, 2005 Recent Advances and Future Trends in Graphics Hardware Michael Doggett Architect November 23, 2005 Overview XBOX360 GPU : Xenos Rendering performance GPU architecture Unified shader Memory Export Texture/Vertex

More information

Graphics Cards and Graphics Processing Units. Ben Johnstone Russ Martin November 15, 2011

Graphics Cards and Graphics Processing Units. Ben Johnstone Russ Martin November 15, 2011 Graphics Cards and Graphics Processing Units Ben Johnstone Russ Martin November 15, 2011 Contents Graphics Processing Units (GPUs) Graphics Pipeline Architectures 8800-GTX200 Fermi Cayman Performance Analysis

More information

Geo-Scale Data Visualization in a Web Browser. Patrick Cozzi pcozzi@agi.com

Geo-Scale Data Visualization in a Web Browser. Patrick Cozzi pcozzi@agi.com Geo-Scale Data Visualization in a Web Browser Patrick Cozzi pcozzi@agi.com About Me Developer Lecturer Author Editor http://www.seas.upenn.edu/~pcozzi/ About Cesium A WebGL virtual globe and map engine

More information

Chapter 6 - The Scene Graph

Chapter 6 - The Scene Graph Chapter 6 - The Scene Graph Why a scene graph? What is stored in the scene graph? objects appearance camera lights Rendering with a scene graph Practical example 1 The 3D Rendering Pipeline (our version

More information

Co-Creation of Models and Metamodels for Enterprise. Architecture Projects.

Co-Creation of Models and Metamodels for Enterprise. Architecture Projects. Co-Creation of Models and Metamodels for Enterprise Architecture Projects Paola Gómez pa.gomez398@uniandes.edu.co Hector Florez ha.florez39@uniandes.edu.co ABSTRACT The linguistic conformance and the ontological

More information

CUDAMat: a CUDA-based matrix class for Python

CUDAMat: a CUDA-based matrix class for Python Department of Computer Science 6 King s College Rd, Toronto University of Toronto M5S 3G4, Canada http://learning.cs.toronto.edu fax: +1 416 978 1455 November 25, 2009 UTML TR 2009 004 CUDAMat: a CUDA-based

More information

Lab 2: Visualization with d3.js

Lab 2: Visualization with d3.js Lab 2: Visualization with d3.js SDS235: Visual Analytics 30 September 2015 Introduction & Setup In this lab, we will cover the basics of creating visualizations for the web using the d3.js library, which

More information

State Propagation of Process in Microsoft PowerPoint 2

State Propagation of Process in Microsoft PowerPoint 2 Universität Stuttgart Fakultät Informatik, Elektrotechnik und Informationstechnik Propagation of States from BPEL Process Instances to Chevron Models David Schumm, Dimka Karastoyanova, Frank Leymann, and

More information

WIRIS quizzes web services Getting started with PHP and Java

WIRIS quizzes web services Getting started with PHP and Java WIRIS quizzes web services Getting started with PHP and Java Document Release: 1.3 2011 march, Maths for More www.wiris.com Summary This document provides client examples for PHP and Java. Contents WIRIS

More information

Animation (-4, -2, 0 ) + (( 2, 6, -4 ) - (-4, -2, 0 ))*.75 = (-4, -2, 0 ) + ( 6, 8, -4)*.75 = (.5, 4, -3 ).

Animation (-4, -2, 0 ) + (( 2, 6, -4 ) - (-4, -2, 0 ))*.75 = (-4, -2, 0 ) + ( 6, 8, -4)*.75 = (.5, 4, -3 ). Animation A Series of Still Images We Call Animation Animation needs no explanation. We see it in movies and games. We grew up with it in cartoons. Some of the most popular, longest-running television

More information

Outline. 1.! Development Platforms for Multimedia Programming!

Outline. 1.! Development Platforms for Multimedia Programming! Outline 1.! Development Platforms for Multimedia Programming! 1.1.! Classification of Development Platforms! 1.2.! A Quick Tour of Various Development Platforms! 2.! Multimedia Programming with Python

More information

CS 378: Computer Game Technology

CS 378: Computer Game Technology CS 378: Computer Game Technology http://www.cs.utexas.edu/~fussell/courses/cs378/ Spring 2013 University of Texas at Austin CS 378 Game Technology Don Fussell Instructor and TAs! Instructor: Don Fussell!

More information

Visualizing an OrientDB Graph Database with KeyLines

Visualizing an OrientDB Graph Database with KeyLines Visualizing an OrientDB Graph Database with KeyLines Visualizing an OrientDB Graph Database with KeyLines 1! Introduction 2! What is a graph database? 2! What is OrientDB? 2! Why visualize OrientDB? 3!

More information

An Interactive method to control Computer Animation in an intuitive way.

An Interactive method to control Computer Animation in an intuitive way. An Interactive method to control Computer Animation in an intuitive way. Andrea Piscitello University of Illinois at Chicago 1200 W Harrison St, Chicago, IL apisci2@uic.edu Ettore Trainiti University of

More information

International Journal of Software Engineering and Knowledge Engineering c World Scientific Publishing Company

International Journal of Software Engineering and Knowledge Engineering c World Scientific Publishing Company International Journal of Software Engineering and Knowledge Engineering c World Scientific Publishing Company Rapid Construction of Software Comprehension Tools WELF LÖWE Software Technology Group, MSI,

More information

CSCI 3136 Principles of Programming Languages

CSCI 3136 Principles of Programming Languages CSCI 3136 Principles of Programming Languages Faculty of Computer Science Dalhousie University Winter 2013 CSCI 3136 Principles of Programming Languages Faculty of Computer Science Dalhousie University

More information

Alexander Wood is a Senior So/ware Engineer at Analy5cal Graphics Inc (AGI). At AGI, he is a contributor to Cesium and Technical Lead on the STK

Alexander Wood is a Senior So/ware Engineer at Analy5cal Graphics Inc (AGI). At AGI, he is a contributor to Cesium and Technical Lead on the STK Alexander Wood is a Senior So/ware Engineer at Analy5cal Graphics Inc (AGI). At AGI, he is a contributor to Cesium and Technical Lead on the STK Terrain Server, a streaming terrain solu5on that transforms

More information

WEBfactory 2010. Silverlight vs. HTML 5 Version 1.0. July 2012. www.webfactory-world.de

WEBfactory 2010. Silverlight vs. HTML 5 Version 1.0. July 2012. www.webfactory-world.de WEBfactory 2010 Silverlight vs. HTML 5 Version 1.0 July 2012 www.webfactory-world.de 2 This whitepaper is a product of the company WEBfactory GmbH. WEBfactory GmbH Hollergasse 15 74722 Buchen Germany Tel:

More information

OpenGL Performance Tuning

OpenGL Performance Tuning OpenGL Performance Tuning Evan Hart ATI Pipeline slides courtesy John Spitzer - NVIDIA Overview What to look for in tuning How it relates to the graphics pipeline Modern areas of interest Vertex Buffer

More information

Web-Based Enterprise Data Visualization a 3D Approach. Oleg Kachirski, Black and Veatch

Web-Based Enterprise Data Visualization a 3D Approach. Oleg Kachirski, Black and Veatch Web-Based Enterprise Data Visualization a 3D Approach Oleg Kachirski, Black and Veatch Contents - Introduction - Why 3D? - Applications of 3D - 3D Content Authoring - 3D/4D in GIS - Challenges of Presenting

More information

A. OPENING POINT CLOUDS. (Notepad++ Text editor) (Cloud Compare Point cloud and mesh editor) (MeshLab Point cloud and mesh editor)

A. OPENING POINT CLOUDS. (Notepad++ Text editor) (Cloud Compare Point cloud and mesh editor) (MeshLab Point cloud and mesh editor) MeshLAB tutorial 1 A. OPENING POINT CLOUDS (Notepad++ Text editor) (Cloud Compare Point cloud and mesh editor) (MeshLab Point cloud and mesh editor) 2 OPENING POINT CLOUDS IN NOTEPAD ++ Let us understand

More information

4VATARS PROJECT. Standard avatar specification for content creation in RealXtend

4VATARS PROJECT. Standard avatar specification for content creation in RealXtend 4VATARS PROJECT Standard avatar specification for content creation in RealXtend In partnership with the development team under opensource realxtend, the research program ENER of Ecole Nationale des Arts

More information

Introduction to Game Programming. Steven Osman sosman@cs.cmu.edu

Introduction to Game Programming. Steven Osman sosman@cs.cmu.edu Introduction to Game Programming Steven Osman sosman@cs.cmu.edu Introduction to Game Programming Introductory stuff Look at a game console: PS2 Some Techniques (Cheats?) What is a Game? Half-Life 2, Valve

More information

Character Creation You can customize a character s look using Mixamo Fuse:

Character Creation You can customize a character s look using Mixamo Fuse: Using Mixamo Fuse, Mixamo, and 3ds Max, you can create animated characters for use with FlexSim. Character Creation You can customize a character s look using Mixamo Fuse: After creating the character,

More information

Solving Simultaneous Equations and Matrices

Solving Simultaneous Equations and Matrices Solving Simultaneous Equations and Matrices The following represents a systematic investigation for the steps used to solve two simultaneous linear equations in two unknowns. The motivation for considering

More information