Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 17 Dec 2006
Offline Last Active Dec 07 2013 08:48 AM

Topics I've Started

Light trail using GLSL

21 January 2013 - 10:53 AM



Im currently trying to make a light trail effect using GLSL. But its more like a comet tail. I did it by mixing the current frame and the previous frame. Here are the steps I'm using: 


1. render the current frame normally to a texture

2. mix the texture from current frame and the previous frame (texture4) using the max value, this is the GLSL for this part:

uniform sampler2D tex1;
uniform sampler2D tex2;

uniform float deltaTime;

void main()
    vec4 color = vec4(0.0, 0.0, 0.0, 1.0);
    color.r = texture2D(tex2, gl_TexCoord[0].st).r;
    color.g = texture2D(tex2, gl_TexCoord[0].st).g;
    color.b = texture2D(tex2, gl_TexCoord[0].st).b;
    color.r = color.r - deltaTime * 0.3;
    color.g = color.g - deltaTime * 0.3;
    color.b = color.b - deltaTime * 0.3;
    color.r = max( texture2D(tex1, gl_TexCoord[0].st).r, color.r );
    color.g = max( texture2D(tex1, gl_TexCoord[0].st).g, color.g );
    color.b = max( texture2D(tex1, gl_TexCoord[0].st).b, color.b );
    gl_FragColor = color;


since the light fades out by time, i reduce the rgb value by 0.3 per second (deltaTime is the difference between current frame and the previous, sent form c++ code. Draw the result on texture3


3. Redraw texture3 to texture4 since we are going to use this as texture4. No special code used in this one, just a normal texture rendering


texture3 would be the result to render a proper light trail effect and here is the result I have (link to youtube)




You might notice that when the object is moving, the trail looks normal. but when it stops, there's a weird fading behaviour on the tail side. Its hard to describe it, since I'm not a native, but you can easily notice it when the object stops moving. 


Any idea why it happens? Any info how to render a proper light trail/comet tail effect?



Thanks in advance. 

Mutiple Viewport size for texture

22 December 2012 - 02:33 AM



I'm trying to use 2 buffers: the first buffer renders a texture for shadows, the size of the texture is 1300*800

The second buffer renders the final program with size 1200*700.


The problem is I cant find a way to change my viewport size to 1300*800 during the texture rendering so it can render the whole texture. Is there a way to change my viewport size during program so the fragment shader can draw the whole texture?

Help on SDL sound

17 March 2012 - 06:23 AM


Im trying to create a machine gun sound. So I have a gunshot.wav (about 1 second) that contains the gun sound and the echo. now since its a machine gun, i want to repeat the gunshot.wav every 0.5 second so the echo only heard at the last shot.

I've tried it with SDL but its not working. So I use one channel only (for test):

void SoundManager::playSound(int index) {
    if (index != 0) {
    Mix_PlayChannel(0, mixChunkArr[index], 0);

each time the machine gun fire (2 shot per second) it call the playSound method, sending the same mixChunk index and playing at the same channel 0. But apparently this is not working properly. The sound only played when the previous song is finished. So its like hearing 1 shot per second machine gun rather than 2 shot per second.

How can I do this in SDL? Thanks in advance

GLSL: adding color from previous drawing

15 February 2012 - 06:39 AM


I'm trying to simulate lighting effect on my 2D scene. so for example i have a objects drawn in a flat plane, and then i want to give a lighting effect on the scene by highlighting a specific area. so if the light source position is at (0, 0), every pixel at distance less than radius (let say 4) has a brighter color.

Let say I draw the plane and objects with rgb (0.1, 0.1, 0.1). If its highlighted (based on the position and light radius) I want to update the color to (0.2, 0.2, 0.2). Is it possible to do that in openGL? How can I get the value of the current pixel on the fragment without using 2 buffers?

thanks in advance.

Binding textures to GLSL

18 January 2012 - 02:44 AM


im trying to send multiple texture ids to glsl via this code:

glBindTexture(GL_TEXTURE_2D, textureId[]);
glUniform1i(glGetUniformLocation(6, "tex1"), 0);
glBindTexture(GL_TEXTURE_2D, textureId[2]);
glUniform1i(glGetUniformLocation(6, "tex2"), 1);   

but somehow it slows the program (a lot) and sometimes fail to render. im not sure what happened. when i send only one texture, it works perfectly. but when i send both with the code above, it crashes. there's nothing wrong with the texture: they both successfully sent to gpu and can be rendered. there is no change in the glsl since im not yet using the second texture. anyone know why this happens?

thanks in advance