Help understanding the code

Hi Guys hel please… I’m new to open gl programming and my prof provide this code but im having hardtime in understanding it…Can any body please help me or at least give me idea on what subdivideCircle, normalize, and drawtriangle functions is trying to do? Thanks ina advance!


    // subdivide a triangle recursively, and draw them
    private void subdivideCircle(int radius, float[] v1, float[] v2, int depth)
    {
        float v11[] = new float[3];
        float v22[] = new float[3];
        float v00[] = {0, 0, 0};
        float v12[] = new float[3];
        if (depth==0)
        {
            //5. specify a color related to triangle location
            gl.glColor3f(v1[0]*v1[0], v1[1]*v1[1], v1[2]*v1[2]);
            for (int i = 0; i<3; i++)
            {
                v11[i] = v1[i]*radius;
                v22[i] = v2[i]*radius;
            }
            drawtriangle(v11, v22, v00);
            return;
        }
        v12[0] = v1[0]+v2[0];
        v12[1] = v1[1]+v2[1];
        v12[2] = v1[2]+v2[2];
        normalize(v12);
        // subdivide a triangle recursively, and draw them
        subdivideCircle(radius, v1, v12, depth-1);
        subdivideCircle(radius, v12, v2, depth-1);
    }

    // draw a circle with center at the origin in xy plane
    public void drawCircle(int cRadius, int depth)
    {
        subdivideCircle(cRadius, cVdata[0], cVdata[1], depth);
        subdivideCircle(cRadius, cVdata[1], cVdata[2], depth);
        subdivideCircle(cRadius, cVdata[2], cVdata[3], depth);
        subdivideCircle(cRadius, cVdata[3], cVdata[0], depth);
    }

    // normalize a 3D vector
    public void normalize(float vector[])
    {
        float d = (float)Math.sqrt(vector[0]*vector[0]
        +vector[1]*vector[1] + vector[2]*vector[2]);
        if (d==0)
        {
            System.out.println("0 length vector: normalize().");
            return;
        }
        vector[0] /= d;
        vector[1] /= d;
        vector[2] /= d;
    }

    public void drawtriangle(float[] v1, float[] v2, float[] v3)
    {
        gl.glBegin(GL.GL_TRIANGLES);
        gl.glVertex3fv(v1);
        gl.glVertex3fv(v2);
        gl.glVertex3fv(v3);
        gl.glEnd();
    }

 

What specifically do you have a question about? You can infer from the names what they’re doing.

Do you understand what normalize() is doing? If not, I’d focus on that because it’s the easiest. And if you don’t understand points and vectors, then you need to ASAP. Read up on "unit vector"s and “vector length” in your graphics or linear algebra book.

Well, drawtriangle means… tadààà: draw a triangle.

EDIT: joking… :stuck_out_tongue:

I know that drawtriangle function draw a triangle but what does these code gl.glBegin(GL.GL_TRIANGLES);, gl.glVertex3fv(v1);
, and this code gl.glEnd(); does?

I know that normalize function normalize something but why is it it has something like these "float d = (float)Math.sqrt(vector[0]*vector[0]+vector[1]*vector[1] + vector[2]*vector[2]);
" and this “vector[0] /= d;” why do we need to divide vectorpp0[ with d

I know that subdivideCircle function divided circle but why is that there is this code "


if (depth==0)
        {
            //5. specify a color related to triangle location
            gl.glColor3f(v1[0]*v1[0], v1[1]*v1[1], v1[2]*v1[2]);
            for (int i = 0; i<3; i++)
            {
                v11[i] = v1[i]*radius;
                v22[i] = v2[i]*radius;
            }
            drawtriangle(v11, v22, v00);
            return;
        }

why is that i need to do this


        v12[0] = v1[0]+v2[0];
        v12[1] = v1[1]+v2[1];
        v12[2] = v1[2]+v2[2];

and why is that i need to subdivide a triangle recursively, and draw them with thise code


        subdivideCircle(radius, v1, v12, depth-1);
        subdivideCircle(radius, v12, v2, depth-1);