[OpenGL] Outlining functions incorrectly when used with overlapping objects

As seen in this picture:
http://gyazo.com/035b4ebc2bae6ae283c0c9882aa09cf6
This program is creating an outline for each of the tall rectangular prisms that will eventually make up terrain in a game I am making. As you can see in the middle of the picture, the line is not fully connected, and it has smaller lines making up the bigger line like a dotted line. However, this only occurs when two objects overlap (in the part with the dotted lines, the two prisms are touching, as two of their vertices are the same).

How would I make the dotted line go a away and give me a solid line?

Here is my rendering code:
[spoiler]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
glDepthFunc(GL_LESS);
	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
	glBegin(GL_QUADS);
	for (int x = 16; x < 64; x++) {
		for (int y = 16; y < 64; y++) {
			float blockHeight = (float) ((double) this->tiles[x][y].height) / ((double) 2.0f);
			glColor3f(this->tiles[x][y].color.red, this->tiles[x][y].color.green, this->tiles[x][y].color.blue);
			glVertex3f((float) (x + 0), blockHeight, (float) (y + 0));
			glVertex3f((float) (x + 1), blockHeight, (float) (y + 0));
			glVertex3f((float) (x + 1), blockHeight, (float) (y + 1));
			glVertex3f((float) (x + 0), blockHeight, (float) (y + 1));

			glVertex3f((float) (x + 0), blockHeight, (float) (y + 0));
			glVertex3f((float) (x + 1), blockHeight, (float) (y + 0));
			glVertex3f((float) (x + 1), 0.0f, (float) (y + 0));
			glVertex3f((float) (x + 0), 0.0f, (float) (y + 0));

			glVertex3f((float) (x + 1), blockHeight, (float) (y + 0));
			glVertex3f((float) (x + 1), blockHeight, (float) (y + 1));
			glVertex3f((float) (x + 1), 0.0f, (float) (y + 1));
			glVertex3f((float) (x + 1), 0.0f, (float) (y + 0));

			glVertex3f((float) (x + 0), blockHeight, (float) (y + 1));
			glVertex3f((float) (x + 1), blockHeight, (float) (y + 1));
			glVertex3f((float) (x + 1), 0.0f, (float) (y + 1));
			glVertex3f((float) (x + 0), 0.0f, (float) (y + 1));

			glVertex3f((float) (x + 0), blockHeight, (float) (y + 0));
			glVertex3f((float) (x + 0), blockHeight, (float) (y + 1));
			glVertex3f((float) (x + 0), 0.0f, (float) (y + 1));
			glVertex3f((float) (x + 0), 0.0f, (float) (y + 0));
		}
	}
	glEnd();

	glDepthFunc(GL_LEQUAL);
	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
	glLineWidth(1.2f);
	glBegin(GL_QUADS);
	for (int x = 16; x < 64; x++) {
		for (int y = 16; y < 64; y++) {
			float blockHeight = (float) ((double) this->tiles[x][y].height) / ((double) 2.0f);
			glColor3f(0.0f, 0.0f, 0.0f);
			glVertex3f((float) (x + 0), blockHeight, (float) (y + 0));
			glVertex3f((float) (x + 1), blockHeight, (float) (y + 0));
			glVertex3f((float) (x + 1), blockHeight, (float) (y + 1));
			glVertex3f((float) (x + 0), blockHeight, (float) (y + 1));

			glVertex3f((float) (x + 0), blockHeight, (float) (y + 0));
			glVertex3f((float) (x + 1), blockHeight, (float) (y + 0));
			glVertex3f((float) (x + 1), 0.0f, (float) (y + 0));
			glVertex3f((float) (x + 0), 0.0f, (float) (y + 0));

			glVertex3f((float) (x + 1), blockHeight, (float) (y + 0));
			glVertex3f((float) (x + 1), blockHeight, (float) (y + 1));
			glVertex3f((float) (x + 1), 0.0f, (float) (y + 1));
			glVertex3f((float) (x + 1), 0.0f, (float) (y + 0));

			glVertex3f((float) (x + 0), blockHeight, (float) (y + 1));
			glVertex3f((float) (x + 1), blockHeight, (float) (y + 1));
			glVertex3f((float) (x + 1), 0.0f, (float) (y + 1));
			glVertex3f((float) (x + 0), 0.0f, (float) (y + 1));

			glVertex3f((float) (x + 0), blockHeight, (float) (y + 0));
			glVertex3f((float) (x + 0), blockHeight, (float) (y + 1));
			glVertex3f((float) (x + 0), 0.0f, (float) (y + 1));
			glVertex3f((float) (x + 0), 0.0f, (float) (y + 0));
		}
	}
	glEnd();
[/spoiler]
Last edited on
Topic archived. No new replies allowed.