Using OpenGL Shader Language to write a simple shader - c

I'm going to start this off by saying that I am new to GLSL but have a decent amount of experience with OpenGL.
I currently have a project that I want to practice shaders with. I am using gluTeapot and having it rotate around the xyz axis and I want to practice writing a basic shader with it.
I currently have a sample shader and it works so I know that the OpenGL side of things is working well. All I need to do at this point is work with my vertex shader and fragment shader.
I want to start out with something simple. I want to write a shader that makes alternating stripes of red green and blue.
Here's what I know I need to do so far, but I'm not exactly sure how to actually implement it:
1) I know that I need to make constants for red, green, and blue that are of the type vec4
2) I know that I should probably just use mod(ycoord, 3.0) to determine which color belongs at a certain location
3) I know that I am going to have to figure out some way to get this pattern to rotate along with the teapot or else it will just look stupid.
I have tried looking around the internet for some good tutorials for the basics of GLSL but I haven't understood any of the ones that I have read well enough to put them to use. I also haven't been able to find any questions here that I have been able to put to use.
Any help that you can give to a newbie at writing shaders would be appreciated.
Thanks.

Try the Learning WebGL series. It'll give you examples of simple shaders and work you up to advanced topics. Everything uses standard GLSL and you can play with it in your web browser.
http://learningwebgl.com/

Related

How do I implement a cutting plane functionality using HelixToolkit.Wpf.Sharpdx?

I can't find a working example of a cutting plane implementation for HelixToolkit.Wpf.SharpDX.
I hope to achieve something simpler than the HelixToolkit.Wpf cutting plane which can be invoqued by shift+clic anywhere on the displayed model.
I'll be happy if at least I would be able to do cutting planes with axis-oriented normals, I don't have any interest in custom oriented cutting planes.
Edit
After answering to first comment, I add the precision about trying to do something after the CrossPlaneSection example from the github, but couldn't find someting to use on a more complicated scene. Still waiting for tips.
See the cross section example in Sharpdx version
https://github.com/helix-toolkit/helix-toolkit/tree/develop/Source/Examples/WPF.SharpDX/CrossSectionDemo

How to do simple shape drawing in GTK?

I am new to Gtk and want to do simple drawing of shapes like circles and rectangles. I was looking at the gnome tutorial and the hello word example. However the curves section is undocumented. I was wondering if someone could point me in the right direction as to what should I look at, and maybe if I need to include some other supplementary library to draw?
The preferred drawing API in GTK 2 and 3 is Cairo. But if you need to develop a diagram program, with nodes that can react to events, you will need also to use a canvas, like GooCanvas.
Check out http://developer.gnome.org/gtk3/3.2/GtkDrawingArea.html about the GtkDrawingArea, plus http://developer.gnome.org/gdk/stable/gdk-Drawing-Primitives.html about Gdk-Drawing-Primitives and you are on the go.
You might also go a bit further by using this link and check out Cairo directly http://www.cairographics.org

How to make a bending animation with silverlight

Any idea how to make an animation like used on the link below? I want to make a paper effect with animation on silverlight but dont know how to do. The first came to my mind is making a gif or video by some 3d medelling programs like 3dsmax but that is a trick not a solution :) Or pixel shader effects but it's a complex way i think.
http://www.templatemonster.com/silverlight-templates/31855.html
thaks.

Produce bounding box from contour locations

I am new to OpenCV so I apologize if I use incorrect terminology. I am writing a program in C that finds objects in an image (in this case red building blocks) and extracts that part of the image and displays it as a new image. I have thresholded the image to remove everything but red and used cvDilate to blur the results slightly to make the object more distinct. I then used the OpenCV Contour finding and drawing functions to locate and draw the blocks.
How can I access the contour locations stored as CvSeq* and take the upper-most and lower-most contour values from a cluster of contours (there may still be some noise from other red objects) so that I can make a bounding box around it?
Thanks
Actually, you don't have to do this manually because OpenCV provides this type of functionality for you.
Look at the cvMinAreaRect2 and cvBoundingRect. Here are their examples respectively: minarea.c (has some debugging stuff, but should give you the gist of how to use it) and generalContours_demo1.cpp (in C++, but should be easy to translate).
As a side note, I would definitely suggest using the C++ API of OpenCV as it is a bit easier to understand and has more features. Also, you spend a lot less time/code worrying about memory management since the Mat class handles that for you.
Hope that helps!

Image processing..back ground subtraction

I have a sequence of images taken from a camera. The images consists of hand and surroundings. I need to remove everything except the hand.
I am new to Image processing. Would anyone help me in regard with the above Question. I am comfortable using C and Matlab.
A really simple approach if you have a stationary background and a moving hand (and quite a few images!) is simply to take the average of the set of images away from each image. If nothing else, it's a gentle introduction to Matlab.
The name of the problem you are trying to solve is "Image Segmentation". The Wikipedia page here: wiki is a good start.
If lighting consistency isn't a problem for you, I'd suggest starting with simple RGB thresholding and see how far that gets you before trying anything more complicated.
Have a look at OpenCV, a FOSS library for computer vision applications. Specifically, see the Video Surveillance module. For a walk through of background subtraction in MATLAB, see this EETimes article.
Can you specify what kind of images you have. Is the background moving or static? For a static background it is a bit straightforward. You simply need to subtract the incoming image from the background image. You can use some morphological operations to make it look better. They all depend on the quality of images that you have. If you have moving background I would suggest you go for color based segmentation. Convert the image to YCbCr then threshold appropriately. I know there are some papers available on it(However I dont have time to locate them). I suggest reading them first. Here is one link which might help you. Read the skin segmentation part.
http://www.stanford.edu/class/ee368/Project_03/Project/reports/ee368group08.pdf
background subtraction is simple to implement (estimate background as average of all frames, then subtract each frame from background and threshold resulting absolute difference) but unfortunately only works well if 1. camera has manual gain and exposure 2. lighting conditions do not change 3.background is stationary. 4. the background is visible for much longer than the foreground.
given your description i assume these are not the case - so what you can use - as already pointed out - is colour as a means of segmenting foreground from background. as it's a hand you are trying to isolate best bet is to learn the hand colour. opencv provides some means of doing this. if you want to do this yourself you just get the colour of some of the hand pixels (you would need to specify this manually for at least one frame) and convert them to HUE (which encapsulates the colour in a brightness independen way. skin colour has a very constant hue) and then make a HUE histogram. compare this to the rest of the pixels and then decided if the hue is simmilar enough.

Resources