Hello,
I keep running into a problem with depth in the viewport (i assume) when trying to draw just simple lines. I want to draw a set of lines parallel to each other and I am using a loop to do that. The problem that arises though, is when I use glRotatef() function to rotate my “camera”, which is technically just rotating everything drawn, the lines that I drew are only appearing to be extended to a certain value, I assume it’s 1 but I have no idea if that’s what’s happening… So basically, what is happening, I think, is the lines just stop being drawn at that point, and when I rotate the view, I get an unpleasant effect of the lines just cut-off there, when I would like to see them go further down, hence creating an effect of further depth… unfortunately this is not happening. As you can see from the piece of code, all I am doing is drawing a bunch of horizontal lines parallel to each other…
I would greatly appreciate if somebody could explain why this is happening and even more if there is a solution to this and how I should fix it
I assume this has to do something with the viewport and the min and max depth ranges but I am really not sure
I also hope I explained this enough and clearly enough I realize the explanation might be confusing
glBegin(GL_LINES);
glColor3f(0.5, 0.5, 0.5);
for(float i = -100; i < 100; i+=0.005){
glVertex3f(i, 0, 1);
glVertex3f(i, 0, -1);
}
glEnd();
Thank you very much in advance
Seems like you have just discovered that the cameras in computer graphics have a far clipping plane against which all the geometry is clipped (not drawn). Check your projection matrix. Here are the functions used to construct such matrices:
http://www.opengl.org/sdk/docs/man2/xhtml/gluPerspective.xml
http://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml
The legacy OpenGL maintains two matrices, modelview and projection, so ensure you switch between them depending which one you want to modify (see glMatrixMode).
Thanks for your reply. I read over even more tutorials and documentation on the two matrices and the two modes. I tried to modify my code to construct such matrices but all I keep getting is a black screen every time… I think I may be missing something important here. As I mentioned before, my graphics are “destroyed” / “hidden” when I rotate using glRotatef() and I would like them to display appropriately. I would appreciate if you could post a code snippet of the order of method calls that I need to do to properly set up my matrices so that my geometry is clipped the right way.
Thanks a lot
Haha Thanks for your replies. Sure I can post some code. Sorry it’s been a while since I logged in last time, but here is the code that I have so far:
for(float theta = 0; theta < 360; theta +=((float)rand() / RAND_MAX) * 10){
for(float phi = 0; phi < 360; phi +=((float)rand() / RAND_MAX) * 10){
float x = 1.1 * sinf(theta * 3.14 / 180) * cosf(phi * 3.14 / 180);
float y = 1.1 * sinf(theta * 3.14 / 180) * sinf(phi * 3.14 / 180);
float z = 1.1 * cosf(theta * 3.14 / 180);
Point3D *point = [[Point3D alloc] initWithX:x Y:y Z:z];
[points addObject:point];
}
}
So I am trying to draw something like a sphere but only with a little ‘randomized’ coordinates meaning its not completely filled but has some ‘gaps’. This is my code and it works so I do get what I want to draw. I generate a bunch of vertices and store them in an array. The problem though, is once this is done, I have the following code where I try to retrieve the vertices and draw them. That works too except that when I try to use glScale() to ‘zoom in’ a little or glRotatef() to rotate the view, i get this black cutoff thing in a middle of the viewport that messes up the graphics.
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glScalef(0.5, 0.5, 0.5);
glRotatef(rotationX,1,0,0);
glRotatef(rotationY, 0, 1, 0);
glBegin(GL_POINTS);
for(int i = 0; i < points.count; i++){
Point3D *point = [points objectAtIndex:i];
glVertex3f(point.x, point.y, point.z);
}
glEnd();
glFlush();
The sphere just cuts off and there is like a hole. I don’t know how to fix this, but I think it has something to do with my projection matrix…then again maybe not… As you said though, I would greatly appreciate and explanation from you guys:)
Thanks everyone in advance