Fix Julia and let gui configure it
This commit is contained in:
parent
8e8fb66873
commit
907100c0a4
4 changed files with 38 additions and 54 deletions
|
@ -8,22 +8,21 @@ in vec2 vertex_pos;
|
||||||
|
|
||||||
out vec4 color;
|
out vec4 color;
|
||||||
|
|
||||||
|
uniform float m;
|
||||||
|
uniform vec2 c;
|
||||||
|
|
||||||
const int i_max = 200;
|
const int i_max = 200;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
float m = 0.3;
|
|
||||||
vec2 c = vec2(0.5, 1.5);
|
|
||||||
|
|
||||||
vec2 z = vertex_pos * m;
|
vec2 z = vertex_pos * m;
|
||||||
|
int i;
|
||||||
|
|
||||||
int i = 0;
|
for(i = 0; i < i_max; i++) {
|
||||||
|
|
||||||
for(; i < i_max; i++) {
|
|
||||||
float x = (z.x * z.x - z.y * z.y) + c.x;
|
float x = (z.x * z.x - z.y * z.y) + c.x;
|
||||||
float y = (z.y * z.x - z.x * z.y) + c.y;
|
float y = (z.y * z.x + z.x * z.y) + c.y;
|
||||||
|
|
||||||
if (x*x + y*y > 4.0) {
|
if ((x*x + y*y) > 4.0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,13 +37,4 @@ void main()
|
||||||
}
|
}
|
||||||
|
|
||||||
color = vec4(alpha, alpha, alpha, alpha) * 10.0 * fragment_color;
|
color = vec4(alpha, alpha, alpha, alpha) * 10.0 * fragment_color;
|
||||||
|
|
||||||
/**** Begin of tasks ***
|
|
||||||
- 1.2.5
|
|
||||||
Implement the pseudo-code for calculating the julia fractal at a point.
|
|
||||||
To get the point you can declare a new "in" variable which contains the
|
|
||||||
position and just use the X- and Y- value.
|
|
||||||
|
|
||||||
*** End of tasks ***/
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -18,18 +18,4 @@ void main()
|
||||||
gl_Position = proj * view * in_position;
|
gl_Position = proj * view * in_position;
|
||||||
|
|
||||||
fragment_color = in_color;
|
fragment_color = in_color;
|
||||||
|
|
||||||
/* - 1.2.2 (b)
|
|
||||||
* Declare a new "in" variable with the name "in_color". Instead of setting
|
|
||||||
* "fragment_color" to the position, set it to "in_color. */
|
|
||||||
|
|
||||||
/* - 1.2.4 (a)
|
|
||||||
* Declare two new "uniform" variables with the type "mat4" (above the main function)
|
|
||||||
* that store the modelview and projection matrix. To apply the transformations
|
|
||||||
* multiply the value of "in_position" before setting "gl_Position". */
|
|
||||||
|
|
||||||
/* - 1.2.5
|
|
||||||
* The algorithm to calculate the julia fractal needs a position as input.
|
|
||||||
* Declare another "out" variable and set it to the untransformed input
|
|
||||||
* position. */
|
|
||||||
}
|
}
|
|
@ -37,6 +37,8 @@ private:
|
||||||
|
|
||||||
GLint view_uniform_id;
|
GLint view_uniform_id;
|
||||||
GLint proj_uniform_id;
|
GLint proj_uniform_id;
|
||||||
|
GLint julia_m_id;
|
||||||
|
GLint julia_c_id;
|
||||||
|
|
||||||
// Read, Compile and link the shader codes to a shader program
|
// Read, Compile and link the shader codes to a shader program
|
||||||
void CreateShaders();
|
void CreateShaders();
|
||||||
|
|
|
@ -26,6 +26,9 @@ Viewer::Viewer()
|
||||||
view_uniform_id = glGetUniformLocation(program_id, "view");
|
view_uniform_id = glGetUniformLocation(program_id, "view");
|
||||||
proj_uniform_id = glGetUniformLocation(program_id, "proj");
|
proj_uniform_id = glGetUniformLocation(program_id, "proj");
|
||||||
|
|
||||||
|
julia_m_id = glGetUniformLocation(program_id, "m");
|
||||||
|
julia_c_id = glGetUniformLocation(program_id, "c");
|
||||||
|
|
||||||
modelViewMatrix.setIdentity();
|
modelViewMatrix.setIdentity();
|
||||||
projectionMatrix.setIdentity();
|
projectionMatrix.setIdentity();
|
||||||
|
|
||||||
|
@ -59,40 +62,40 @@ void Viewer::CreateVertexBuffers()
|
||||||
|
|
||||||
// Define 3 vertices for one face
|
// Define 3 vertices for one face
|
||||||
GLfloat positions[] = {
|
GLfloat positions[] = {
|
||||||
-1, 1, -1, 1,
|
-1, -1, -1, 1, // 1
|
||||||
1, -1, -1, 1,
|
1, -1, 1, 1, // 6
|
||||||
1, 1, 1, 1,
|
-1, 1, 1, 1, // 8
|
||||||
|
|
||||||
-1, 1, -1, 1,
|
-1, -1, -1, 1, // 1
|
||||||
-1, -1, 1, 1,
|
1, 1, -1, 1, // 3
|
||||||
1, -1, -1, 1,
|
1, -1, 1, 1, // 6
|
||||||
|
|
||||||
-1, 1, -1, 1,
|
-1, -1, -1, 1, // 1
|
||||||
-1, -1, 1, 1,
|
-1, 1, 1, 1, // 8
|
||||||
1, 1, 1, 1,
|
1, 1, -1, 1, // 3
|
||||||
|
|
||||||
1, -1, -1, 1,
|
1, 1, -1, 1, // 3
|
||||||
1, 1, 1, 1,
|
-1, 1, 1, 1, // 8
|
||||||
-1, -1, 1, 1,
|
1, -1, 1, 1, // 6
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GLfloat colors[] = {
|
GLfloat colors[] = {
|
||||||
1, 0, 0, 1,
|
1, 0, 0, 1,
|
||||||
|
1, 0, 0, 1,
|
||||||
|
1, 0, 0, 1,
|
||||||
|
|
||||||
0, 1, 0, 1,
|
0, 1, 0, 1,
|
||||||
|
0, 1, 0, 1,
|
||||||
|
0, 1, 0, 1,
|
||||||
|
|
||||||
|
0, 0, 1, 1,
|
||||||
|
0, 0, 1, 1,
|
||||||
0, 0, 1, 1,
|
0, 0, 1, 1,
|
||||||
|
|
||||||
1, 0, 0, 1,
|
1, 1, 0, 1,
|
||||||
0, 1, 0, 1,
|
1, 1, 0, 1,
|
||||||
0, 0, 1, 1,
|
1, 1, 0, 1,
|
||||||
|
|
||||||
1, 0, 0, 1,
|
|
||||||
0, 1, 0, 1,
|
|
||||||
0, 0, 1, 1,
|
|
||||||
|
|
||||||
1, 0, 0, 1,
|
|
||||||
0, 1, 0, 1,
|
|
||||||
0, 0, 1, 1,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Generate the vertex array
|
// Generate the vertex array
|
||||||
|
@ -255,6 +258,9 @@ void Viewer::drawContents()
|
||||||
glUniformMatrix4fv(view_uniform_id, 1, false, modelViewMatrix.data());
|
glUniformMatrix4fv(view_uniform_id, 1, false, modelViewMatrix.data());
|
||||||
glUniformMatrix4fv(proj_uniform_id, 1, false, projectionMatrix.data());
|
glUniformMatrix4fv(proj_uniform_id, 1, false, projectionMatrix.data());
|
||||||
|
|
||||||
|
glUniform1f(julia_m_id, juliaZoom);
|
||||||
|
glUniform2fv(julia_c_id, 1, juliaC.data());
|
||||||
|
|
||||||
// Bind the vertex array
|
// Bind the vertex array
|
||||||
glBindVertexArray(vertex_array_id);
|
glBindVertexArray(vertex_array_id);
|
||||||
// Draw the bound vertex array. Start at element 0 and draw 3 vertices
|
// Draw the bound vertex array. Start at element 0 and draw 3 vertices
|
||||||
|
|
Loading…
Reference in a new issue