PDA

View Full Version : Triangle culling problem ... ATI



Andrew Jameson
02-02-2004, 10:12 AM
Hi,
Small apologies for Xposting but I need an answer ...

It's been reported by a few users of our application that the faces of our objects are not been drawn properly and that triangles are missing.
I've narrowed it down to ATI cards but before chasing this problem with them directly I'd appreciate comments about the following code snippet.

Essentially, I use the following piece of code to draw a square face in a glList ... it's based on Delphi but that shouldn't matter :

TopFace : array[0..3] of TGLArrayf3 =
((-1, 0, -1), (-1, 0, 1), (1, 0, -1), (1, 0, 1));
TopFaceTex : array[0..3] of TGLArrayi2 =
((0, 0), (0, 1), (1, 0), (1, 1));

glNormal3f(0.0, 1.0, 0.0);
glBegin(GL_TRIANGLE_STRIP);
for lp1 := 0 to 3 do begin
glTexCoord2iv(@TopFaceTex[lp1]);
glVertex3fv(@TopFace[lp1]);
end; {for}
glEnd;

It appears that one of the triangles is being culled. Is this an ATI driver problem as the code works on everything else ?

Many thanks

Andrew

Relic
02-03-2004, 08:37 AM
If this is the top face of some box and the coordinate system is as default with right handed model coordinates, the vertices are doing the correct counterclickwise ordering zig-zag shape.
I would have expected the textures to have (0,0) at vertex[1] with an xz-plane.
E.g. (0,1), (0,0), (1,1), (1,0).
If this is only one of the triangles maybe the driver has incorrectly converted it to a quad inside the display list. Does it work in immediate mode?
Try if it works with a GL_QUADS, exchange vertex order accordingly.
If you have more of these faces, use quads to batch them.
What's your viewing frustum, maybe you fell off a clip plane?

[This message has been edited by Relic (edited 02-03-2004).]

AdrianD
02-04-2004, 04:04 AM
do you use VBO/VAO ?
if yes:
do you change them on a per-frame basis ?
if yes:
do you lock the buffers for updates (ie.glMapBufferARB) ?
if yes:
which catalyst do you use ?
if the answer is 4.1, please report this KNOWN bug to ATI, because they don't want to accept the existence of this bug. see also:
http://www.opengl.org/discussion_boards/ubb/Forum3/HTML/011352-2.html

btw. a simple workaround for this problem is to use glFinish() before you change the vertex arrays...