PDA

View Full Version : Using GL_QUAD_STRIPS to make a cube.



03-28-2001, 08:20 PM
Hey guys. I've finally crawled out of my hole in the ground and have learned that using glBegin/glEnd and 24 vertices is just about the slowest way to draw a simple cube. Since then, I've read up on vertexarrays, gldrawelements, strips, etc. Now.. I would like to use gldrawelements and a quadstrip to draw a full cube.

I have successfully figured out how to draw the right, front, left and back sides. Now I'm kind of confused. Is it possible to fit the top and bottom in the same strip? Like I said.. I'm new to strips.. so I'm not sure if I'm ordering it the correct way.. of if it is just impossible. I understand that I may have to use a strip to draw 4 of the sides, and then use normal quads to cap off the top and bottom. Is this the case?

Please let me know if it is impossible to use one strip to achieve a full cube, or if I need to use an entirely different method that will be just as fast or faster than a quad strip.

Thanks in advance!

Cebu
03-29-2001, 07:33 AM
Anyone? =) Really need to know this stuff before moving on with my engine.. it's pretty low level and determines how I decide to do a bunch of stuff.. thanks!

Oh yeah.. I am "Llama" .. finally got off my butt and registered =P

[This message has been edited by Cebu (edited 03-29-2001).]

Tim Stirling
03-29-2001, 08:15 AM
Another hint: is to use tristrips instead of quadstrips - they are faster as they still only require 4 verts to do a quad but it is already broken down in to triangles which the gfx card would have to do if you used quads. You will have to add 2 extra quads, but preferably tristrips for the top and bottom. http://www.opengl.org/discussion_boards/ubb/smile.gif
Tim

[This message has been edited by Tim Stirling (edited 03-29-2001).]

Cebu
03-29-2001, 02:29 PM
Alright.. I'll try out triangle strips. So there's no way to use a single strip for the whole cube? Hmm just from the top of my head seems like it would be possible to do 5 sides via triangles.. is this correct?

Cebu
03-29-2001, 03:41 PM
Err I'm smoking crack.. nevermind about the 5 sides thing.. I guess it's the same deal as quad strips as far as that goes. I want to post some partial code though.. and make sure I'm doing this the best way. Again.. I'm just trying to make a complete cube.

glDrawElements(GL_TRIANGLE_STRIP, 10, GL_UNSIGNED_BYTE, vertexIndexForSides);

glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, vertexIndexForTop);

glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, vertexIndexForBottom);

Basically.. is this the minimum (of actual drawing code) I can do to make a cube. I'm open to any suggestions that'll consolidate any work or make stuff faster. Thanks again for any suggestions http://www.opengl.org/discussion_boards/ubb/smile.gif

zed
03-29-2001, 04:30 PM
even better use 2 fans.
just pick 2 opposite vertices for the fans center.



___*
/__/|
| | |
*__|/

Cebu
03-29-2001, 04:32 PM
Oh nice.. two fans.. that's a good idea. I'll give that a twirl. Thanks for the suggestion Zed http://www.opengl.org/discussion_boards/ubb/smile.gif

Bob
03-30-2001, 02:30 AM
Or why not go for one strip for the whole cube: top, left, front, right, back, bottom

Won't that one work aswell?

MikeC
03-30-2001, 05:58 AM
Before going any further - did you want to use lighting? If so, you're better off with GL_QUADS or GL_TRIANGLES; stripping/fanning uses the same computed vertex colour for each usage of a vertex by a triangle, and for a cube that's going to look really bad.

Tim Stirling
03-30-2001, 08:36 AM
Originally posted by Bob:
Or why not go for one strip for the whole cube: top, left, front, right, back, bottom

Won't that one work aswell?

The topic question was asking if this is possible and it isn't.

2 triangle fans- thats clever! http://www.opengl.org/discussion_boards/ubb/smile.gif

Cebu
03-30-2001, 12:15 PM
MikeC, at some point I do plan on using lighting.. I'm not sure what you mean by same vertex color etc though. I guess I'll just have to go ahead and throw in a light and see what happens with the strip to see what you mean.

Oh yeah - for the current objects (walls) I've decided to just go with one strip to do all the sides and leave off the tops and bottoms, since they will not be viewable.

Tim - thanks for clearing stuff up a bit..
Bob - if you know a way to use a single strip for all sides of a cube, I think we'd all like to see that source code.. cause I sure as hell don't know how :P

Thanks to everyone for their help so far.. any other input would be greatly appreciated.. I'm learning a lot.