Page 1 of 2 12 LastLast
Results 1 to 10 of 12

Thread: Newb : glVertex2fv(vertices[edges[i][1]]);

  1. #1
    Member Contributor
    Join Date
    May 2008
    Posts
    67

    Newb : glVertex2fv(vertices[edges[i][1]]);

    Hi there, I am very new to C and open GL, have spent a good while trying to understand this code segment.

    const float vertices[numVertices][2] = {{0.0,0.0},{100.0,0.0},{0.0,100.0},{100.0,100.0},{ 50.0,150.0}};

    const int edges[numEdges][2] = {{0,1},{1,3},{3,2},{2,0},{2,4},{3,4}};


    I understand the declaration, in that the first dec are point arrays, and the 2nd is line construction between two points. but what I don't get how glVertex2fv works and its args, what does vertices[edges[i][0]] equate to!

    for(int i=0;i<numEdges;i++)
    {
    glVertex2fv(vertices[edges[i][0]]);
    glVertex2fv(vertices[edges[i][1]]);
    }

    This for loop generates a house like (well u get the picture)
    /\
    | |
    -

  2. #2
    Senior Member Frequent Contributor
    Join Date
    Apr 2004
    Posts
    990

    Re: Newb : glVertex2fv(vertices[edges[i][1]]);

    Let's take
    glVertex2fv(vertices[edges[i][0]]);
    as an example.

    glVertex<u>2</u>fv means that you will be passing two values as arguments to the function
    glVertex2<u>f</u>v means that the values you are passing to the function are of type float.
    glVertex2f<u>v</u> means that you will be passing the values for the function as a pointer to an array ( in this case an array of 2 floats)

    vertices[edges[i][0]] is a pointer to the 2-dimensional vertex at position edges[i][0].

  3. #3
    Member Contributor
    Join Date
    May 2008
    Posts
    67

    Re: Newb : glVertex2fv(vertices[edges[i][1]]);

    Okay, right I see how multidimensionals work now. I think I've almost got you, but aren't we only passing the method 1 arg,

    glVertex2fv(vertices[edges[i][0]]);
    i.e : this points to the first subelement in element 0 on the first iteration, which is : 0

    then we run the 2nd method in the loop which is the second subelement in element 0, which is : 1

    So each iteration of the loop outputs one line, this doesn't quite add up to me as it seems the method should accept 2 args, as it would make more sense. But I can't see it...

  4. #4
    Senior Member Frequent Contributor
    Join Date
    Apr 2004
    Posts
    990

    Re: Newb : glVertex2fv(vertices[edges[i][1]]);

    Quote Originally Posted by baconbeastnz
    So each iteration of the loop outputs one line, this doesn't quite add up to me as it seems the method should accept 2 args, as it would make more sense. But I can't see it...
    Why doesn't it add up? you need 4 variables to draw a line. X and Y position of startpoint and X and Y position of endpoint. So you need to call glVertex2f twice, once for each point.

    Pointers are not that hard to understand.
    glVertex2fv(vertices[edges[i][0]]);
    is equivalent to
    glVertex2f(vertices[edges[i][0]][0],vertices[edges[i][0]][1]);

    The only difference is that in the first case you provide a pointer to the first element because vertices[edges[i][0]] is equivalent to &vertices[edges[i][0]][0]


  5. #5
    Member Newbie
    Join Date
    Apr 2008
    Location
    Germany
    Posts
    38

    Re: Newb : glVertex2fv(vertices[edges[i][1]]);

    That's because glVertex2fv takes it's two expected arguments as a vector (array) of two floats. So if you pass a pointer p to such a function, it will in fact access p and p+1.

    So the first call to glVertex2fv() references the vertex at index 0, and the second call references the vertex at index 1.
    Because vertices is in fact a two-dimensional array, using vertices with a single index is of type float[2], which, in your example, comes down to {0.0,0.0} for index 0 and {100.0,0.0} for index 1 respectively.

  6. #6
    Member Contributor
    Join Date
    May 2008
    Posts
    67

    Re: Newb : glVertex2fv(vertices[edges[i][1]]);

    It doesn't add up to me because, its seems odd that a function (drawing the line) would be spread over two method calls.

    How does it save the first point in memory and then when it has 2 points (after 2 method calls) it draws the line?

  7. #7
    Senior Member Frequent Contributor
    Join Date
    Apr 2004
    Posts
    990

    Re: Newb : glVertex2fv(vertices[edges[i][1]]);

    Quote Originally Posted by baconbeastnz
    How does it save the first point in memory and then when it has 2 points (after 2 method calls) it draws the line?
    It only needs to remember the amount of points that is necessary to draw the type of primitive that was passed to glBegin(). So points are drawn immediately. Lines are drawn for every pair and triangles need three points. As soon as it has enough data to draw the primitive type you suggested (or a part of it) the command queue will get processed. e.g. if you want to draw triangles but you only specify 5 points, then the last 2 points will have no affect.

  8. #8
    Member Contributor
    Join Date
    May 2008
    Posts
    67

    Re: Newb : glVertex2fv(vertices[edges[i][1]]);

    oh!!!! Gotcha!!

    This is quite a foreign concept to me coming from Java. Yup, I'm going backwards...

    Excellent, thank you for your time -NiCo-


  9. #9
    Super Moderator OpenGL Lord
    Join Date
    Dec 2003
    Location
    Grenoble - France
    Posts
    5,574

    Re: Newb : glVertex2fv(vertices[edges[i][1]]);

    <nitpicking>

    Quote Originally Posted by -NiCo-
    ... then the last 2 points will have no affect.
    Even of English is not my native language, I am pretty sure it should be "effect"

    http://xkcd.com/326/

  10. #10
    Senior Member Frequent Contributor
    Join Date
    Apr 2004
    Posts
    990

    Re: Newb : glVertex2fv(vertices[edges[i][1]]);

    Idd, that should've been "effect". At least a forum-search for "affect" quickly reveals that I'm not the only one making this mistake by writing too fast

Page 1 of 2 12 LastLast

Similar Threads

  1. selecting edges and vertices with mouse
    By ricfow in forum OpenGL: Basic Coding
    Replies: 1
    Last Post: 04-26-2010, 05:35 PM
  2. more control over vertices, edges and faces
    By bowser in forum OpenGL: Basic Coding
    Replies: 3
    Last Post: 05-23-2002, 01:25 AM
  3. Newb
    By Nial in forum OpenGL: Basic Coding
    Replies: 2
    Last Post: 03-26-2002, 02:36 AM
  4. How many triangles, edges per n vertices
    By rsm_00x in forum OpenGL: Basic Coding
    Replies: 2
    Last Post: 02-13-2002, 09:47 AM
  5. Structure that stores vertices, faces and edges
    By Nico in forum OpenGL: Basic Coding
    Replies: 9
    Last Post: 05-16-2000, 05:31 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Proudly hosted by Digital Ocean