Talk:Tutorial3: Rendering 3D Objects (C /SDL): Difference between revisions
No edit summary |
|||
(6 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
Has any one managed to successfully compile/link this code under windows. I tried getting this to run using SDL 1.3 and GLEW 1.53 on the VC++ 2008 compiler it seemingly | Has any one managed to successfully compile/link this code under windows. I tried getting this to run using SDL 1.3 and GLEW 1.53 on the VC++ 2008 compiler it seemingly compiles fine however all that I manage to see is a white background in the spawned window. | ||
== Solved my issue with Tutorial3 == | |||
After some debugging I narrowed down the issue to an issue with the fragment shader. I believe the issue was caused by the shader compiler supplied by the driver was being strict, possibly because of the original use of the gl_FragColor which is now depreciated. | |||
Changes I made to fix the issue for my uses. | |||
File: tutorial3.frag | |||
<pre> | |||
#version 150 | |||
in vec3 ex_Color; | |||
out vec4 fragColor; | |||
void main(void) | |||
{ | |||
fragColor = vec4(ex_Color, 1.0); | |||
} | |||
</pre> | |||
== Matrix Multiplication Order Question == | |||
I've been trying to catch up on OpenGL3+ and have a little trouble understanding the matrix multiplication order for creating the modelviewmatrix. In many vertex shaders i've seen something like | |||
<pre> | |||
vertex_out = projection * modelview * vertex_in | |||
</pre> | |||
which (I think) could also be written as | |||
<pre> | |||
vertex_out = projection * view * model * vertex_in | |||
</pre> | |||
In this tutorial you multiply the modelview matrix with the projection matrix | |||
<pre> | |||
multiply4x4(modelmatrix, projectionmatrix); | |||
</pre> | |||
and in the end use the resulting matrix in the shader. To me this looks like | |||
<pre> | |||
vertex_out = modelmatrix * projectionmatrix * vertex_in | |||
</pre> | |||
Could someone please clearify this for me? | |||
:Yes, you're right. The vertex data usually is in an abstract model space (e.g. from the modelling tool) and is moved into a common world space by the model matrix. Then it is moved into eye/camera space by the view matrix. These two steps are often combined in the modelviewmatrix. Now it's moved from a 3d world into a normalized space ( x,y and z have to be in range [-1;1] to be visible later ) by the projection matrix. So it's <pre>Position = Projection*View*Model*Vertex</pre>[[User:MasterOfGhosts|MasterOfGhosts]] 07:19, 29 August 2010 (UTC) |
Latest revision as of 07:19, 29 August 2010
Has any one managed to successfully compile/link this code under windows. I tried getting this to run using SDL 1.3 and GLEW 1.53 on the VC++ 2008 compiler it seemingly compiles fine however all that I manage to see is a white background in the spawned window.
Solved my issue with Tutorial3
After some debugging I narrowed down the issue to an issue with the fragment shader. I believe the issue was caused by the shader compiler supplied by the driver was being strict, possibly because of the original use of the gl_FragColor which is now depreciated.
Changes I made to fix the issue for my uses.
File: tutorial3.frag
#version 150 in vec3 ex_Color; out vec4 fragColor; void main(void) { fragColor = vec4(ex_Color, 1.0); }
Matrix Multiplication Order Question
I've been trying to catch up on OpenGL3+ and have a little trouble understanding the matrix multiplication order for creating the modelviewmatrix. In many vertex shaders i've seen something like
vertex_out = projection * modelview * vertex_in
which (I think) could also be written as
vertex_out = projection * view * model * vertex_in
In this tutorial you multiply the modelview matrix with the projection matrix
multiply4x4(modelmatrix, projectionmatrix);
and in the end use the resulting matrix in the shader. To me this looks like
vertex_out = modelmatrix * projectionmatrix * vertex_in
Could someone please clearify this for me?
- Yes, you're right. The vertex data usually is in an abstract model space (e.g. from the modelling tool) and is moved into a common world space by the model matrix. Then it is moved into eye/camera space by the view matrix. These two steps are often combined in the modelviewmatrix. Now it's moved from a 3d world into a normalized space ( x,y and z have to be in range [-1;1] to be visible later ) by the projection matrix. So it's
Position = Projection*View*Model*Vertex
MasterOfGhosts 07:19, 29 August 2010 (UTC)