<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mahisorn Wongphati &#187; Works</title>
	<atom:link href="http://mahisorn.com/category/works/feed/" rel="self" type="application/rss+xml" />
	<link>http://mahisorn.com</link>
	<description>The best way to make your dreams come true is to wake up!&#34; -- Paul Valery</description>
	<lastBuildDate>Thu, 20 May 2010 05:05:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>3D LUT using GLSL</title>
		<link>http://mahisorn.com/2009/01/11/3d-lut-using-glsl/</link>
		<comments>http://mahisorn.com/2009/01/11/3d-lut-using-glsl/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 10:45:00 +0000</pubDate>
		<dc:creator>mahisorn</dc:creator>
				<category><![CDATA[Works]]></category>
		<category><![CDATA[glsl]]></category>
		<category><![CDATA[glut]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[shader]]></category>

		<guid isPermaLink="false">http://mahisorn.com/2009/01/11/3d-lut-using-glsl/</guid>
		<description><![CDATA[Vertex Shader
[c]
varying vec2 pos;
void main(void) {
    pos = vec2(gl_Vertex.xy);
    gl_Position = ftransform();
}
[/c]
Fragment Shader
[c]
uniform   sampler2D  image;
uniform   sampler3D  lookup;
uniform   float      imageWidth;
uniform   float      imageHeight;
varying   vec2      [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Vertex Shader</strong><br />
[c]<br />
varying vec2 pos;<br />
void main(void) {<br />
    pos = vec2(gl_Vertex.xy);<br />
    gl_Position = ftransform();<br />
}<br />
[/c]</p>
<p><strong>Fragment Shader</strong><br />
[c]<br />
uniform   sampler2D  image;<br />
uniform   sampler3D  lookup;<br />
uniform   float      imageWidth;<br />
uniform   float      imageHeight;<br />
varying   vec2       pos;</p>
<p>void main(void)<br />
{<br />
    //find the texture coordinate corresponding to this fragment<br />
    vec2 texCoord = vec2(pos.x/imageWidth, pos.y/imageHeight);</p>
<p>    //get the corresponding color<br />
    vec4 colorIn = texture2D(image, texCoord);</p>
<p>    //apply look up tables<br />
    vec4 colorOut;<br />
    colorOut.rgb = texture3D(lookup, colorIn.rgb).rgb;</p>
<p>    //final color<br />
    gl_FragColor = colorOut;<br />
}<br />
[/c]</p>
<p><strong>Multitexturing</strong><br />
[c]<br />
glActiveTexture(GL_TEXTURE0);<br />
glBindTexture(GL_TEXTURE_2D, imageName);</p>
<p>glActiveTexture(GL_TEXTURE1);<br />
glBindTexture(GL_TEXTURE_3D, lutName);<br />
[/c]</p>
<p><strong>Set Texture in Shader Program</strong><br />
[c]<br />
texLoc = glGetUniformLocation(programObj, &#8220;image&#8221;);<br />
glUniform1i(texLoc, 0); //texture0<br />
texLoc = glGetUniformLocation(programObj, &#8220;lookup&#8221;);<br />
glUniform1i(texLoc, 1); //texture1<br />
[/c]</p>
<p><strong>Note:</strong></p>
<ul>
<li> Test in orthographic mode is more easier</li>
<li>Easy <a href="http://">GLUT base code</a></li>
<li>Easy <a href="http://www.clockworkcoders.com/oglsl/">GLSL wrapper</a></li>
<li>Good OpenGL book <a href="http://www.amazon.com/OpenGL-Programming-Guide-Official-Learning/dp/0321481003/ref=pd_bxgy_b_img_b">RedBook</a> and <a href="http://www.amazon.com/OpenGL-R-Shading-Language-2nd/dp/0321334892/ref=pd_bxgy_b_img_b">OrangeBook</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mahisorn.com/2009/01/11/3d-lut-using-glsl/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
