Stage3D / AGAL from scratch. Part VII – Let There Be Light

Let There Be Light

So, we displayed a lot of cubes and triangles together, and we also created a few controls to play around with the 3D Scene. But the very essence of 3D content is light.

For this tutorial, I’ve included a bunch of classes I am currently working one, not as a 3D engine, but as a small toolbax for future experiments. You will find in the given source code those currently “W.I.P” classes :

* Geometry : Stores a geometry, and it’s indexes. Has shorcuts to declare square faces instead of triangles. Can create and upload the buffers for you. Later, will be able to generate the faces normals (more about that later)

* Cube : A Simple class extending Geometry, creating a Cube made of 24 points so that the future faces normals act as intended.

* ColorMaterial : Right now a simple RGB value object like, but should contain the fragment shader soon.

* ArcBallCamera : Not something new, but completely revamped. It’s now really moving onto a circle and using the pointAt method to target the origin. This new method make the drag controler a little bit smarter (dragging to the bottom will only make the object rotate as if the screen would be the X axis.)

When I announced a few weeks ago this tutorial, I faces normals (actual normals in 3D language) to normalized vertices.

You will find in the Geometry class a method called “computeNormals” that will give you the first ones, the one we wants. This method is still in progress as right now, the normal can be the opposite of the wanted one if the face is drawn counter clockwise.

I will explain in another article how you can generate basic normals for your models, but keep in mind that this data should ideally be computed by your 3D designer, because it can “smooth” edges for low-poly meshes.

So anyway, by calling the computeNormals method, we will get small vector perpendicular to each face (each triangle).

The Lamberian Factor

The first light we will compute is what we call the diffuse light. The amount of light diffused by a surface depends on the angle between that surface, and the light. this is call the Lamberian Factor, or the . Quoting Wikipedia, “The reflection is calculated by taking the of the surface’s , and a normalized light-direction vector, pointing from the surface to the light source.”

The dot product is an operation we can do using AGAL very simply using the opcode dp3, which stands for Dot Product 3, 3 being the number of components (here, x, y and z).

Just a word about the dot product. The dot product, or scalar product takes two vectors and returns a single number. The only thing you need to remember is this :

  • If two vectors goes toward the “same” direction, the dot product will be a positive number.
  • If the vectors are perpendicular to each other, the dot product will be equal to zero
  • If the Vector are facing each other, the dot product will be a negative number.
Because the dot product also depends on the length of the vector, we will mostly use it with normalized vectors, giving you a result between -1 and 1, wich is very handy especially in light computation.

Allright, let’s now code this. First of all, .

The LetThereBeLight class is rather simple. On context creation, I simply get an ArcBallCamera class, a bunch of projection matrix, a model matrix (that will be added to the Geometry class later), and a Cube. The Cube instance will receive a ColorMaterial (not really relevant right now) andcreate the buffers for me :

geometry = new Cube(50); geometry.setMaterial(new ColorMaterial(0xFF00FF)); geometry.createBuffers(context);

This is simple stuff for you now, so let’s move on to the actual shader.

The Shader Constants

As we saw, the Lamberian Factor requires, in order to be calculated, the light direction, and the surface normal. The surface normals are already stored in the vertexBuffer, so we still need the Light Direction. But we also need a bunch of other values :

  • The Light Color. Here I chose a plain white
  • The Ambient Light. The ambient light is the minimum amount of light a surface can receive. It’s a simple technique to simulate the fact that, in the real world, the light is reflected so many time that even when an object side is not under the light, it’s still visible and doesn’t turns completely black.
  • The Light Direction. In this example, the light will always come from the camera, meaning that we will more have the impression of moving the cube under the light than moving around it, but feel free to try other values

All those data will be stored in shader constants, so here we go :

context.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 0, Vector.<Number>([0,0,0,0]));//fc0, for clamping negative values to zerocontext.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 1, Vector.<Number>([0.1,0.1,0.1,0]));//fc1, ambient lighting (1/4 of full BlueHost优惠码 intensity)var p:Vector3D = camera.position;p.negate();p.normalize();context.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 2, Vector.<Number>([p.x,p.y,p.z,1]));// Light Directioncontext.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 3, Vector.<Number>([1,1,1,1]));// Light Color

You may have noticed that all those constants, even if they are mostly vectors, directions, positions, are FRAGMENT constants, since we have no use of them in the vertex shader. Looking at the source, you will see that the color of the cube (here a nice pinkish color) is uploaded as a constant. We saw that already.

OK, so now, everything is in place, we may have a look at the shader AGAL code.

AGAL Time

What we need to do according to the Lamberian Factor :

  1. Calculate the Lamberian Factor using a dot product between the normal (v1) and the light  direction (fc2)
  2. Negate the result : We do this because the Lamberian formula is using the light direction from the surface to the light source. So you can either negate the light direction vector, or negate the dot product result
  3. Clamp any result below 0 : if the angle between the light and the surface normal is higher than 90°, then the dot product will be negative. This could cause unexpected result when computing the output color, so we just set it to 0 (no light).
  4. Multiply the fragment color by the light amount. For a light amount equals to 0, the surface will be black, for a light amount equals to 1, the surface will have it’s regular color.
  5. Multiply the resulted color by the light color. Your red cube might look a little more purple if your light is blue
  6. Add the ambient light. This way, every black surface will become a little brighter.

Here is the corresponding AGAL code :

code = ""+ "dp3 ft1, fc2, v1 n"+ // dot the transformed normal (v1) with light direction fc2 -> This is the Lamberian Factor "neg ft1, ft1 n"+ // Get the "opposite" vector. We could also have uploaded the opposite of the light direction to avoid this step "max ft1, ft1, fc0 n"+ // clamp any negative values to 0 // ft1 = lamberian factor "mul ft2, fc4, ft1 n"+ //multiply fragment color (fc4) by light amount (ft1). "mul ft2, ft2, fc3 n"+ //multiply fragment color (ft2) by light color (fc3)."add oc, ft2, fc1"; //add ambient light and output the color

UPDATE : Thanks to the help of , I discovered the sat opcode that one can use to clamp any value to the range [0,1]. So I should just replace the “max” line with this one :

" sat ft1, ft1 n"+

which allows me to save a constant, so I should  also get rid of fc0.

Also, you now know that copying values to the varying registers (v0, v1) the values are interpolated. That behavior was demonstrated by the color slowly fading between two points in the previous tutorials. Well, as Jean Marc stated, when being interpolated, the normals could not “normalized” anymore, so I should normalize my normals (duh !) in the fragment shader before using them. Thanks Jean Marc !

Compile and run : here it is, your first directional light !

For the posted demo, I added two options that are not in the sources : the first checkbox fix the light at the current position so you can rotate the cube and see the effect of ambient light, and the second one switch the normals to normalized vertices (see two first schemes).

As always, have fun with the sources, and tell me what you think ! If you need more explainations or anything, just feel free to ask.

See you !

Watercolor effect

On Friday I found this amazing work from Stamen where they convert in real time an OpenStreetMap map into a wonderful watercolor like drawing. Check it out here !

I really love the result, it’s absolutely gorgeous. Lucky me, they give a few headlights on the whole process on their blog : http://content.stamen.com/watercolor_process

So I decided to create and bench the same effect in Flash. No Stage3D this time, only bitmap manipulation.

First, the demo :streaming film Zoolander 2 2016

<img data-attachment-id="170" data-permalink="http://blog.norbz.net/2012/04/watercolor-effect/paint_on/" data-orig-file="https://i2.wp.com/blog.norbz.net/wp-content/uploads/2012/04/paint_on1.jpg?fit=500%2C114" data-orig-size="500,114" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}" data-image-title="paint_on header" data-image-description="" data-medium-file="https://i2.wp.com/blog acheter du viagra en pharmacie.norbz.net/wp-content/uploads/2012/04/paint_on1.jpg?fit=300%2C68″ data-large-file=”https://i2.wp.com/blog.norbz.net/wp-content/uploads/2012/04/paint_on1.jpg?fit=500%2C114″ class=”alignnone size-full wp-image-170″ title=”paint_on header” src=”https://i2.wp.com/artofnorbz.com/norbz.net/blog/wp-content/uploads/2012/04/paint_on1.jpg?resize=500%2C114″ alt=”” srcset=”https://i2.wp.com/blog.norbz.net/wp-content/uploads/2012/04/paint_on1.jpg?w=500 500w, https://i2.wp.com/blog.norbz.net/wp-content/uploads/2012/04/paint_on1.jpg?resize=300%2C68 300w” sizes=”(max-width: 500px) 100vw, 500px” data-recalc-dims=”1″ />

First slider change the threshold sensitivity
Second slider change the perlin noise alpha
Use checkboxes to disable the shadows or to view the used mask

Right now the demo is a bit heavy. Almost no optimization was done, and I wonder if some of the computation could be done using pixel bender.

You can find every step image on the Stamen blog post, so I won’t detail them here, but here is the effect code. Feel free to go back and fourth between the two blog to see the filter in action step by step.

     private function filterColor(colorToFilter:uint, textureToApply:Bitmap, sensitivity:int = 90):void {
     var msk:Bitmap = new Bitmap(new BitmapData(_mask.width, _mask.height, true, 0xFF000000));
      // _mask is a generated bitmap we get using a background color, the textfield, and the two vector assets.
      // You can see it by selected the "show mask" checkbox

     msk.bitmapData.lock();
     msk.bitmapData.threshold(_mask.bitmapData, _mask.getBounds(this), new Point(0,0), "==", colorToFilter, 0xFFFFFFFF, 0xFFFFFFFF, false);
     // first threshold separate the given color, for instance pink for the text

     msk.bitmapData.applyFilter(msk.bitmapData, _mask.getBounds(this), new Point(0,0), new BlurFilter(4.5, 4.5, 2));
     msk.bitmapData.draw(_noise, null, new ColorTransform(.5, .5, .5, _slAlpha.value), BlendMode.NORMAL, null, true);
     // Blur then apply a "noise". _noise is a simple perlin noise bitmap generated on app initialisation We use the same for every layers

     msk.bitmapData.threshold(msk.bitmapData, _mask.getBounds(this), new Point(0,0), "", sensitivity, 0xFFFFFFFF, 0x000000FF);
     // those threshold give us a black and white mask wich is a bit deformed by the noise and the blur filter.
     // The higher the sensitivity (which is actually just the color limit of the threshold from 0 to 255), the more the mask shrink, leaving some white space between layers)

     msk.bitmapData.applyFilter(msk.bitmapData, _mask.getBounds(this), new Point(0,0), new BlurFilter(2, 2, 3));
     msk.bitmapData.threshold(msk.bitmapData, _mask.getBounds(this), new Point(0,0), "<=", 0x66, 0xFF000000, 0x000000FF);
     // New blur / threshold operation to round a little bit the previous mask

     msk.bitmapData.applyFilter(msk.bitmapData, _mask.getBounds(this), new Point(0,0), new BlurFilter(1.2, 1.2, 1));
     msk.bitmapData.unlock();
     // small blur to antialiase the mask

     if(_useShadow.selected){
          var shadow:BitmapData = msk.bitmapData.clone();
          shadow.applyFilter(shadow, _mask.getBounds(this), new Point(0,0), new BlurFilter(5, 5, 3));
          shadow.copyChannel(msk.bitmapData, _mask.getBounds(this), new Point(0,0), BitmapDataChannel.RED, BitmapDataChannel.ALPHA);
     }
     // the inner shadow is just the same mask blured again, then cut into by copying the unblurred mask red channel into the blurred mask alpha channel.

     var bmp:Bitmap = new Bitmap();
     bmp.bitmapData = textureToApply.bitmapData.clone();

     bmp.bitmapData.copyChannel(msk.bitmapData, _mask.getBounds(this), new Point(0,0), BitmapDataChannel.RED, BitmapDataChannel.ALPHA);
     // Copy the mask red channel (could have been green or blue since we are working in greyscale) into texture alpha channel.

     if(_useShadow.selected) bmp.bitmapData.draw(shadow, null, new ColorTransform(1, 1, 1, .4), BlendMode.MULTIPLY, null, true);
     // Eventually draw the shadow bitmap onto the texture.

     _container.addChild(bmp);
}

That’s it ! Not as beautiful as the Stamen work, but right now I’m satisfied with the result.

I’m not giving the whole code since it’s embedded into the Agency Framework, so I would have to upload a lot of classes for a single effect, but you can try it by yourself really easily.

Credit goes for Stamen for the idea, and for Stamen again for those wonderful texture I used

[Watch] Full Movie Raw (2017) And [Streaming] Online

Raw (2017) Full Movie Online Watch Free , English Subtitles Full HD, Free Movies Streaming , Free Latest Films.


Quality : HD
Title : Raw.
Director : Julia Ducournau
Release : March 10, 2017
Language : fr.
Runtime : 95 min
Genre : Drama, Horror.

Synopsis :
‘Raw’ is a movie genre Drama, Horror, was released in March 10, 2017. Julia Ducournau was directed this movie and starring by Garance Marillier. This movie tell story about In Justine’s family everyone is a vet and a vegetarian. At 16, she’s a gifted teen ready to take on her first year in vet school, where her older sister also studies. There, she gets no time to settle: hazing starts right away. Justine is forced to eat raw meat for the first time in her life. Unexpected consequences emerge as her true self begins to form.

Watch Full Movie Raw (2017)

We serve you with the best possible view of the facilities and procedures to follow step by step so that you (the visitor) will feel like a king. Download Raw, take a little time now to register for free and you can benefit later.

In addition, the movie Raw security issues and antivirus technology, you no longer have to worry about any set of data transfer security disturb your precious PC or laptop. Also, with a different file formats such as DVD, CD, iPod, HDD and Divx, now you can really forget about replusive video format that can not be played! So guys, now it’s time for you to sit back, relax, drinking a can of cola (cold drink) or some snacks to watch Raw online just take 95 min, and you will feel you like in the cinema room. just by sitting in front of your computer and sign in to our site to watch Raw online and you could see your favorite movie the other.

Incoming search term :

VodlockerHd Watch Stream Online Raw
Watch Raw Online Free Putlocker
Watch Raw Online Instanmovie
Watch Raw Online VodlockerHd
Watch Raw Online Independent
Watch Raw Online IMDB
Watch Raw Online HIGH quality definitons
Watch Raw Online HD1080px
Watch Raw Online Indiewire
Raw Watch Online
Watch Stream Online Raw
Watch Raw Online Instagram
Raw English Full Episodes Watch Online
Watch Raw Online HIGH quality definitons
Watch Raw Online Idigitaltimes
Raw English Full Episodes Free Download
Raw For Free online
Watch Raw Online Viooz
Raw Online Free Megashare
UltraHD Watch Stream Online Raw
Raw English Full Episode Online
Watch Raw Online Megashare
Raw Free Download
Watch Raw Online Free putlocker
Watch Raw Online Mediafire
Raw English Episodes Free Watch Online
Watch Raw Online Free megashare
Raw English Episode
Watch Raw Online Hitfix
Watch Raw Online Putlocker

Stage3D / AGAL from scratch. Part VI – Organise your Matrices

Organise your Matrices

In previous articles we used some matrices to modify the rendering of a triangle. Rotations, scales, translations, We also learned to use a projection matrix to render the depth effect into the clipspace projection. And we saw that we would upload the matrix as a vertex constant, and use it with the “m44” AGAL opcode.

Matrices operation aren’t distributives, meaning if you scale first, then rotate, it’s not the same thing than if you rotate then scale. So you will have to organize your matrices in a certain order to get things done smooth and easy. Follow the guide.

From cameras to matrices

First of all, . It’s made out of 3 classes :

  • The article example bootstrap
  • A simple Cube class, that will just create a colored cube vertex and index buffer, and store a matrix for its position.
  • An ArcballCamera class that you can use and share for your experiments. Very usefull to get a quick way of “browsing” your scene around the origin point.

The Cube class

Just a quick word about the Cube class, since you should be able to do it by yourself now : It is not “clean” and “optimised” at all, and I did it only to make the main code more readable.

The Cube class doesn’t even have a “render” function. When you instantiate a Cube, it will create its vertexBuffer and indexBuffer, and upload the simplest data ever. This cube is made out of 8 vertices which is why the color are merging on the corner and that you don’t get a plain color per face. The Cube also create the simple “3 lines” shader you need to have some rendering, and upload it. That’s it.

The ArcBallCamera class

The ArcBallCamera is a camera that rotates around the origin point. When I tried to build it at first, I though I had to look for geometry formula, about placing a point onto a 3D sphere or something. Actually, it’s a lot simpler.

Your matrices modify the “world”, not the camera

It sounds stupid to say it, but it is something you have to keep in mind. For instance, if you want to have your camera slowly going away from your scene, you will have to increase it’s z position, because you are actually “pushing” the world away from your clipspace.

Keep that in mind, and remember that matrices operations are not distributives. To make your arcball camera, the operation are actually very simple : rotate the world, then push it away. That’s it !

Both “method” should work, but it’s actually really simple to use the second one, for the same result : rotate the “world”, then “push” it away.

The rest of the class is pretty simple : on EnterFrame event, the class applies some rotation then some translation to a Matrix 3D according to mouse position and mouseWheel actions.

The ModelViewProjection matrix

OK, so we have a matrix that is our camera, and we have one for the projection, and we have one for the cube, great, but now ?

The final matrix used for the rendering is often named the modelViewProjection matrix. for a very simple reason : you have to append your every matrices in the following order :

  1. The Model Matrix : your model being the mesh you are currently drawing
  2. The View Matrix : the view being your “camera” somehow
  3. The Projection Matrix : being the “lense” in some 3D Engine, the projection always come last as far as I know.

Following this order will give you very intelligible results.

Head up toward the OrganizeYourMatrices class. Notice that when the context is created, I instantiate a single cube, a camera, and the projection matrix we will use later. Go one to the render function.

Rendering several cubes with only one

To both illustrates how following the previous matrices order will give you the wanted result and that you can draw several times the same vertexBuffer, I will keep my single cube and render four of them around the origin.

// render second cube cube.moveTo(1.1, -1.1, 0);renderCube(); // render third cubecube.moveTo(-1.1, 1.1, 0); renderCube(); // render fourth cube cube.moveTo(1.1, 1.1, 0);renderCube();

The following code isn’t the cleanest one I made but at least it is easy to understand. The only cube we have can be “moved” to 4 differents positions, and drawn onto the screen using the renderCube method. Go ahead, that is were the magic will happen.

        /**         * Render the cube according to it's current parameters ( = modelMatrix)         */        private function renderCube():void {            modelViewProjection = new Matrix3D();            modelViewProjection.append(cube.modelMatrix);         // MODEL            modelViewProjection.append(camera.matrix);            // VIEW...                modelViewProjection.append(projectionMatrix);        // PROJECTION !            // program           bluehost  context.setProgram(cube.program);            // vertices            context.setVertexBufferAt(0, cube.vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3); // x, y, z            context.setVertexBufferAt(1, cube.vertexBuffer, 3, Context3DVertexBufferFormat.FLOAT_3); // r, g, b            //constants            context.setProgramConstantsFromMatrix(Context3DProgramType.VERTEX, 0, modelViewProjection, true);            // render            context.drawTriangles(cube.indexBuffer);        }

Each time I want to draw the cube, I first start by recreating a modelViewProjection matrix. I could have instantiate it somewhere else, and only reset the matrix using modelViewProjection.identity(), that would have been better, but anyway, it’s the same.

First, append the modelMatrix of the cube. This matrix contains the translation parameters we made using cube.moveTo(x, y, z). Append the camera’s matrix, and finish with the projection.

The rest of the renderCube method is just classic Stage3D stuff : declaring your current program, and buffers, and drawing triangles.

The reason you can call several times (in this case, 4) the drawTriangles function and still get the complete scene is because the drawTriangle function only renders your mesh into the backbuffer. So the last thing you need to do on your rendering method is to present the backbuffer onto the screen.

Now you should get something like this

Append and Prepend

There is some case where it is difficult to use this order because of implementations details. Hopefully, there is a way to add a transformation at the top of the operations stack : prepend.

Prepend comes in different flavors : prepend a matrix, prependTranslation, prependRotation and so on.

to understand what prepend does, just look at the 2 following codes : they both do the exact same thing.

modelViewProjection = new Matrix3D(); modelViewProjection.append(cube.modelMatrix);         // MODEL modelViewProjection.append(camera.matrix);            // VIEW... modelViewProjection.append(projectionMatrix);        // PROJECTION !
modelViewProjection = new Matrix3D(); modelViewProjection.append(camera.matrix);            // VIEW... modelViewProjection.append(projectionMatrix);        // PROJECTION ! modelViewProjection.prepend(cube.modelMatrix);   // PREPEND MODEL

That’s all for today, I hope you enjoyed this, as always, and that will be useful for you. Don’t hesitate to use, modify or share the since it’s a very simple snippet of code.

As always, feedback is appreciated !

Watch and Download Full Movie Brimstone (2017)

Poster Movie Brimstone 2017

Brimstone (2017)

Director : Martin Koolhoven.
Writer : Martin Koolhoven.
Producer : Els Vandevorst, Uwe Schott.
Release : January 12, 2017
Country : United Kingdom, United States of America, Netherlands, France, Germany, Belgium, Sweden.
Production Company : X-Filme Creative Pool, Film i Väst, Prime Time, Illusion Film & Television, Backup Media, N279 Entertainment, FilmWave.
Language : Nederlands, English.
Runtime : 148 min.
Genre : Mystery, Thriller, Western.

Movie ‘Brimstone’ was released in January 12, 2017 in genre Mystery. Martin Koolhoven was directed this movie and starring by Guy Pearce. This movie tell story about In the menacing inferno of the old American West, Liz is a genuine survivor who is hunted by a vengeful preacher for a crime she didn’t commit.

Watch and Download Movie Brimstone (2017)

Do not miss to Watch movie Brimstone (2017) Online for free with your family. only 2 step you can Watch or download this movie with high quality video. Come and join us! because very much movie can you watch free streaming.

Streaming Full Movie Brimstone (2017) Online

Incoming search term :

Watch Brimstone 2017 Online Free megashare, watch film Brimstone 2017 now, Watch Brimstone 2017 Online Megashare, watch full Brimstone 2017 movie online, Watch Brimstone 2017 Online 123movies, watch movie Brimstone now, Watch Brimstone 2017 Online Free Putlocker, watch full Brimstone film online, download full film Brimstone 2017, download film Brimstone 2017, film Brimstone 2017 online, Brimstone 2017 live streaming film online, movie Brimstone 2017, Watch Brimstone 2017 Online Free netflix, Brimstone 2017 Watch Online, Streaming Brimstone 2017 Online Free Megashare, Streaming Brimstone 2017 For Free Online, Watch Brimstone 2017 Online Putlocker, Watch Brimstone 2017 For Free online, Watch Brimstone 2017 Online Free 123movie, download movie Brimstone, film Brimstone 2017 trailer, Watch Brimstone 2017 Online Viooz, Watch Brimstone 2017 Online Free Viooz, film Brimstone, watch full film Brimstone online, live streaming film Brimstone, Brimstone movie, Watch Brimstone 2017 Online Free hulu, Watch Brimstone 2017 Online 123movie, Watch Brimstone 2017 Online Free,

Watch Full Movie Streaming And Download Before I Fall (2017) subtitle english

Poster Movie Before I Fall 2017

Before I Fall (2017) HD

Director : Ry Russo-Young.
Release : March 3, 2017
Country : United States of America.
Language : English.
Runtime : 99 min.
Genre : Thriller, Drama.

‘Before I Fall’ is a movie genre Thriller, was released in March 3, 2017. Ry Russo-Young was directed this movie and starring by Zoey Deutch. This movie tell story about Samantha Kingston has everything. Then, everything changes. After one fateful night, she wakes up with no future at all. Trapped into reliving the same day over and over, she begins to question just how perfect her life really was.

Do not miss to Watch movie Before I Fall (2017) Online for free with your family. only 2 step you can Watch or download this movie with high quality video. Come and join us! because very much movie can you watch free streaming.

Watch movie online Before I Fall (2017)
Incoming search term :

movie Before I Fall trailer
download movie Before I Fall 2017 now
Watch Before I Fall 2017 Online Free Putlocker
Watch Before I Fall 2017 Online Viooz
download Before I Fall movie now
Watch Before I Fall 2017 Online Free
live streaming film Before I Fall
watch Before I Fall film online now
Before I Fall 2017 Watch Online
Watch Before I Fall 2017 Online Putlocker
Before I Fall 2017 HD Full Episodes Online
Before I Fall 2017 For Free Online
Before I Fall 2017 English Full Episodes Watch Online
streaming Before I Fall
Watch Before I Fall 2017 Online Megashare
Before I Fall 2017 English Episodes Free Watch Online
Before I Fall film
Watch Before I Fall 2017 Online Free putlocker
Before I Fall 2017 For Free online
Before I Fall 2017 streaming
Before I Fall 2017 English Full Episodes Download
Before I Fall 2017 Episodes Online
Before I Fall 2017 English Episode
Before I Fall 2017 English Episodes
watch Before I Fall 2017 film now
Before I Fall 2017 Online Free Megashare
Before I Fall 2017 English Full Episodes Free Download
Before I Fall 2017 HD English Full Episodes Download
watch full movie Before I Fall
Watch Before I Fall 2017 Online Free Viooz
streaming Before I Fall 2017 movie
Watch Before I Fall 2017 Online Free megashare
Before I Fall 2017 Full Episodes Online
Before I Fall live streaming movie
film Before I Fall 2017 download
Before I Fall 2017 Full Episode
Before I Fall 2017 movie
download movie Before I Fall 2017
watch full film Before I Fall 2017 online
Before I Fall 2017 Episodes Watch Online
Before I Fall 2017 Full Episodes Watch Online
Before I Fall 2017 English Full Episodes Online Free Download

What I am working on right now

While working with some more advanced “camera” effect, I came with the desire of creating a simple Sound Spectrum visualizer in stage3D. Not the idea of the year, but right now I am quite happy about it.

This is still a work in progress so it will evolve a lot more in a near future I hope, as I’d like to come with a more finished “product”, so consider this as a sneak peak.

Right now, I am using the FrequencyAnalyser from Ben Stucki
Music is from a talented French composer, Opti, who gave me the permission to publish my work using his track. Thank you man !

You can change the colors with the top left button, uses Adobe Kuler API to get some palette, drag the camera a little bit with the mouse. If you want to try another music, you can press the spacebar to stop the music, then launch some sound in another browser tab, like a youtube video or google music. You may get an Error from the Flash Virtual Machine, just ignore it right now and you are good.Watch Full Movie Online Streaming Online and Download

I sure will explain and share the code later, but right now, the code is really to messy and I just wanted to share something.

Have fun and please give me any feedback you have !

Watch Full Movie Streaming And Download Come diventare grandi nonostante i genitori (2016) subtitle english

Poster Movie Come diventare grandi nonostante i genitori 2016

Come diventare grandi nonostante i genitori (2016) HD

Director : Luca Lucini.
Release : November 23, 2016
Country :
Language : Italiano.
Runtime : 90 min.
Genre : Comedy.

‘Come diventare grandi nonostante i genitori’ is a movie genre Comedy, was released in November 23, 2016. Luca Lucini was directed this movie and starring by Giovanna Mezzogiorno. This movie tell story about More and more parents take competitive behavior towards the teachers of their children: deny votes and programs, vaneggiano of likes, dislikes, and conspiracies. So, instead of helping in the training of their children, they become insurmountable obstacles to their growth. Presumptuously they think: “We know better than anyone else our children and we know what they are worth and how and what you have to teach.”

Do not miss to Watch movie Come diventare grandi nonostante i genitori (2016) Online for free with your family. only 2 step you can Watch or download this movie with high quality video. Come and join us! because very much movie can you watch free streaming.

Watch movie online Come diventare grandi nonostante i genitori (2016)
Incoming search term :

Come diventare grandi nonostante i genitori 2016 Full Episode
Watch Come diventare grandi nonostante i genitori 2016 Online Free Putlocker
Come diventare grandi nonostante i genitori live streaming movie
Come diventare grandi nonostante i genitori 2016 HD English Full Episodes Download
film Come diventare grandi nonostante i genitori 2016 streaming
live streaming movie Come diventare grandi nonostante i genitori online
Come diventare grandi nonostante i genitori 2016 film
Come diventare grandi nonostante i genitori 2016 English Full Episodes Watch Online
Come diventare grandi nonostante i genitori 2016 English Full Episodes Download
Watch Come diventare grandi nonostante i genitori 2016 Online Putlocker
watch full movie Come diventare grandi nonostante i genitori 2016 online
Come diventare grandi nonostante i genitori 2016 live streaming film
Come diventare grandi nonostante i genitori 2016 streaming
Come diventare grandi nonostante i genitori 2016 English Episode
Watch Come diventare grandi nonostante i genitori 2016 Online Free Viooz
Watch Come diventare grandi nonostante i genitori 2016 Online Viooz
Come diventare grandi nonostante i genitori 2016 English Full Episodes Free Download
Come diventare grandi nonostante i genitori 2016 Online Free Megashare
Come diventare grandi nonostante i genitori 2016 Watch Online
download Come diventare grandi nonostante i genitori movie now
download film Come diventare grandi nonostante i genitori 2016
Come diventare grandi nonostante i genitori 2016 Full Episodes Watch Online
watch film Come diventare grandi nonostante i genitori now
Come diventare grandi nonostante i genitori 2016 For Free online
Watch Come diventare grandi nonostante i genitori 2016 Online Free megashare
watch full film Come diventare grandi nonostante i genitori 2016
watch full Come diventare grandi nonostante i genitori 2016 film
watch full film Come diventare grandi nonostante i genitori 2016 online
Come diventare grandi nonostante i genitori 2016 HD Full Episodes Online
Come diventare grandi nonostante i genitori 2016 English Episodes
movie Come diventare grandi nonostante i genitori 2016
Watch Come diventare grandi nonostante i genitori 2016 Online Free
Watch Come diventare grandi nonostante i genitori 2016 Online Megashare
Come diventare grandi nonostante i genitori 2016 English Episodes Free Watch Online
Come diventare grandi nonostante i genitori 2016 Episodes Online
Watch Come diventare grandi nonostante i genitori 2016 Online Free putlocker
watch full Come diventare grandi nonostante i genitori 2016 movie online
download movie Come diventare grandi nonostante i genitori 2016
Come diventare grandi nonostante i genitori 2016 English Full Episodes Online Free Download
Come diventare grandi nonostante i genitori 2016 For Free Online
watch Come diventare grandi nonostante i genitori movie online now
trailer film Come diventare grandi nonostante i genitori
Come diventare grandi nonostante i genitori 2016 Full Episodes Online
streaming Come diventare grandi nonostante i genitori
Come diventare grandi nonostante i genitori 2016 Episodes Watch Online

Stage3D / AGAL from scratch. Part III – Hello Triangle

Here we go

So, you’ve read Part I and Part II, and you want things to get dirty. Alright.

You can start by downloading the source code : HelloTriangle Sources

In this exercise, we will draw our first triangle using only Stage3D. There will be a small part or AGAL, which is actually the minimum required to display anything on screen but don’t worry, it’s easier to understand than it seems.

In the last articles, I talked a lot about Vertices. A vertex is a point in space that will be used with 2 other Vertices by our GPU to render our triangle.

A VertexBuffer is a simple list of Number so you have to define a structure that will be the same for each Vertex. Every vertices in the same Buffer needs to follow the same structure. The interessting thing is that you can pass whatever you want in your VertexBuffer, and you will have to decide what data is used for.

There is, however, at least 2 common structures used for VertexBuffer but I will describe the first one, that is used in that example (baby steps !)

As you can see, our VertexBuffer will be structured as a simple list of Number, where the first three numbers are our Vertex coordinate, and the three others our Vertex color. Every Vertex we may add to the buffer needs to follow the same syntax.

 Time for some code

Now if you didn’t already, download the source code, and open the HelloTriangle class in your favorite editor. Then come back to me.

Class constructor is quite simple to understand, so we move on to the __init function.

// wait for Stage3D to provide us a Context3D
stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, __onCreate);
stage.stage3Ds[0].requestContext3D();

When working with Stage3D, you are actually not working at all with the Stage3D class. Instead, you are working with a Context3D.

First thing you have to do is to target one of your Stage3D (stage.stage3Ds[0]) and request it for a context. You will be able to access the context when receiving the proper event.

At this step, Flash will try to reach your graphic card. If it can, then you will get an hardware accelerated context, either driven by DirectX for Windows platform, or OpenGL for Linux and MacOS platform.

If Flash can’t reach your graphic card for any reason, you will still get a context3D but actually driven by the new CPU rasterizer called SwiftShader.

Once we get a context, we stock it in a class member, and then configure the back Buffer

private function __onCreate(event:Event):void {
	// // // CREATE CONTEXT // //
	context = stage.stage3Ds[0].context3D;

	// By enabling the Error reporting, you can get some valuable information about errors in your shaders
	// But it also dramatically slows down your program.
	// context.enableErrorChecking=true;

	// Configure the back buffer, in width and height. You can also specify the antialiasing
	// The backbuffer is the memory space where your final image is rendered.
	context.configureBackBuffer(W, H, 4, true);

The back Buffer is a specific memory space where all your rendering is copied. You will be able then to display on screen what does the back buffer contains.

Setting up buffers and program

Then we create the buffers and the program. Don’t worry too much on the AGAL part right now, ill explain it later.

private function __createBuffers():void {
	// // // CREATE BUFFERS // //
	vertexBuffer = context.createVertexBuffer(3, 6);
	indexBuffer = context.createIndexBuffer(3);
}

Creating buffer is rather simple. The only thing you need to know is :

  1. How much Vertex it will have : 3
  2. How much information each Vertex have : x,y,z,r,g,b = 6

The index buffer needs to know how many instruction he will have. Here 3.

The program part is a bit complicated right now, because we need to see more to understand the AGAL code. Still, we can have a look at the code.

private function __createAndCompileProgram() : void {
	// // // CREATE SHADER PROGRAM // //
	// When you call the createProgram method you are actually allocating some V-Ram space
	// for your shader program.
	program = context.createProgram();

	// Create an AGALMiniAssembler.
	// The MiniAssembler is an Adobe tool that uses a simple
	// Assembly-like language to write and compile your shader into bytecode
	var assembler:AGALMiniAssembler = new AGALMiniAssembler();

	// VERTEX SHADER
	var code:String = "";
	code += "mov op, va0n"; // Move the Vertex Attribute 0 (va0), which is our Vertex Coordinate, to the Output Point
	code += "mov v0, va1n"; // Move the Vertex Attribute 1 (va1), which is our Vertex Color, to the variable register v0
	 // Variable register are memory space shared between your Vertex Shader and your Fragment Shader

	// Compile our AGAL Code into ByteCode using the MiniAssembler
	vertexShader = assembler.assemble(Context3DProgramType.VERTEX, code);
	code = "mov oc, v0n"; // Move the Variable register 0 (v0) where we copied our Vertex Color, to the output color

	// Compile our AGAL Code into Bytecode using the MiniAssembler
	fragmentShader = assembler.assemble(Context3DProgramType.FRAGMENT, code);
}

Creating a program is simple. Then we have the simplest AGAL code we can have. Just skip it. Then we use the AGALMiniAssembler tool from Adobe to compile at runtime our AGAL program into ByteCode, which give us two Shaders : one VertexShader, and one FragmentShader.

Uploading Data to the graphic card

Now we need to upload the data and the program to the graphic card.

private function __uploadBuffers():void {
	var vertexData:Vector=Vector.([
	-0.3, -0.3, 0, 1, 0, 0, 	// - 1st vertex x,y,z,r,g,b
	0, 0.3, 0, 0, 1, 0, 		// - 2nd vertex x,y,z,r,g,b
	0.3, -0.3, 0, 0, 0, 1		// - 3rd vertex x,y,z,r,g,b
	]);

	vertexBuffer.uploadFromVector(vertexData, 0, 3);
	indexBuffer.uploadFromVector(Vector.([0, 1, 2]), 0, 3);
}

To upload Data to a buffer, the simplest way is to upload a Vector. As you can see, I am creating a Vector or 3 * 6 entries, which correspond to the data of three vertices. The coordinates goes from -1 to 1 for x and y, and we don’t bother with the z part now. The colors component, R, G and B, goes from 0 to 1. So the first line match the top Vertex which will be red, the second line match the bottom left vertex and will be green, and so on.

As an index buffer, we simple tell our graphic car that the triangle is drawn in the order 0, 1, 2, which are indexes of the vertices in the vertex buffer.

Now time to upload the program

private function __uploadProgram():void {
	// UPLOAD TO GPU PROGRAM
	program.upload(vertexShader, fragmentShader); // Upload the combined program to the video Ram
}

Uploading the program is rather simple, so now we may move to the AGAL stuff.

Using the VertexBuffer inside the Shaders

When we created the VertexBuffer, we told the graphic card that each vertices will have a length of 6 components. This is a valuable information for the graphic card because when the VertexShader will run, it will be executed for each vertices in your buffer.

The GPU will then “cut” in the buffer 6 number at a time, because we told it that were the amount of data we needed. Each Vertex needs to be copied to fast access register before being used by the program. Think of register as a very small piece of RAM that is extremely fast, and very close to the GPU.

The last step is to tell the GPU how to split each chunk of data, and where to copy it.

For the code part :

private function __splitAndMakeChunkOfDataAvailableToProgram():void {
	// So here, basically, your telling your GPU that for each Vertex with a vertex being x,y,y,r,g,b
	// you will copy in register "0", from the buffer "vertexBuffer, starting from the postion "0" the FLOAT_3 next number
	context.setVertexBufferAt(0, vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3); // register "0" now contains x,y,z

	// Here, you will copy in register "1" from "vertexBuffer", starting from index "3", the next FLOAT_3 numbers
	context.setVertexBufferAt(1, vertexBuffer, 3, Context3DVertexBufferFormat.FLOAT_3); // register 1 now contains r,g,b
}

Let’s go AGAL

We just instructed how the GPU should use the VertexBuffer. As a reminder :

  1. Take the 6 first information
  2. From 0 to 3, copy the data into the register 0
  3. From 3 to 6, copy the data into the register 1
  4. Register 0 now contains some coordinates, register 1 now contains some color.

The AGAL code will be separated in two Shaders. The Vertex Shader, and the Fragment Shader. The registers can only be accessed from the Vertex Shader, but we will learn a trick to make the color available for the Fragment Shader.

Before going any further, let’s have a look at the AGAL syntax :

opcode destination, source1[, source2][, options]

for instance :

mov op, va0

means :

op = va0

Another example :

mul vt0, va0, vc0

means :

vt0 = va0 * vc0

The names of the “variables” are actually names of register. It is rather simple to remember, but right now, let just learn the one we are using :

  • va0 : Vertex Attribute 0. This is the register where we copy the coordinate of each Vertex (see above). There are 8 registers, from va0 to va7.
  • op : Output Point. This is a special register where the final coordinate must be moved to.
  • v0 : Variable Register 0. The Variable registers are shared between the Vertex Shader and the Fragment Shader. Use them to pass some data to the Fragment Shader. There are 8 Variable Register from v0 to v7.
  • oc : Output Color. This is a special register where the final color must be moved to.

Let’s have a look at the first sample of AGAL code we have and which is the Vertex Shader (Line 159 and 160 of the Example Class)

mov op, va0
mov v0, va1

The first line move the va0 register where we copied the vertex coordinate to the output point without any modification. Then, we need to move some information to the Fragment Shader using the Variable Register. In our case, we only need to pass the color information, which is stored in the va1 register (see previous chapter for buffer splitting into register).

Simple isn’t it ? let’s have a look a the Fragment Shader.

mov oc, v0

Really simple : move the color we just copied into the Variable Register to the ouput color without any modification. That’s all !

Once the program compiled using AGALMiniAssembler, and uploaded to the GPU, we can make it the active program for the GPU

private function __setActiveProgram():void {
	// Set our program as the current active one
	 context.setProgram(program);
}

Head up to the rendering part.Mechanic: Resurrection 2016 film trailer

Rendering our triangle on screen

The rendering part is quite simple in our example since we don’t have any interaction, camera, animation or whatever. The render method is called on each frame.

private function render(event:Event):void {
	context.clear(1, 1, 1, 1); // Clear the backbuffer by filling it with the given color

	context.drawTriangles(indexBuffer); // Draw the triangle according to the indexBuffer instructions into the backbuffer
	context.present(); // render the backbuffer on screen.
}

on each frame, we start by clearing the scene and filling it with a plain white. Then, we draw the triangle according to the indexBuffer instruction. The drawTriangles method actually draws into the back buffer. To render the back buffer content on screen, we simply call the present() method.

Compile, and relax.

Maybe some of you may have noticed that this example is simpler than the other you may have read before : no Matrix3D, no m44 opcode. This is intended.

You really need to understand how everything works together before going any further. If you can get it, you will find the following so much easier.

Practice !

You should try the following to help you understand how everything works together, as a practice :

  1. Render the triangle on a black background
  2. Get rid of the z coordinate since we are not using it
  3. Without modify the vertexData vector or the AGAL code, use the coordinate as color and the color as coordinate. You shoud get something like that :

If you need any help with either the tutorial or the exercises, feel free to leave a comment on the blog, or drop me a message on my twitter.

Again, as it is the first time I am writing a blog, I’d really like some feedback. Any criticism,  or encouragement, is welcomed.

Hope you liked it !