由于某些原因,我无法在openGL中绘制超过z> 1的内容。 Z缓冲区工作正常,我现在已经坚持了一段时间。 我认为问题是gluPerspective,但它仍然无法正常工作。 我可以看到介于0和1之间的任何内容,代码的三角形会被剪切掉。 抱歉我的英语很差。
#include <iostream>
#include <GL/glut.h>
using namespace std;
void idle() {
glutPostRedisplay();
}
void changeSize(int w, int h) {
// Prevent a divide by zero, when window is too short
// (you cant make a window of zero width).
if(h == 0)
h = 1;
float ratio = 1.0* w / h;
// Use the Projection Matrix
glMatrixMode(GL_PROJECTION);
// Reset Matrix
glLoadIdentity();
// Set the viewport to be the entire window
glViewport(0, 0, w, h);
// Set the correct perspective.
gluPerspective(0, ratio, 0.1, 1000.0);
// Get Back to the Modelview
glMatrixMode(GL_MODELVIEW);
}
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.5,0.0,0.0);
glVertex3f(0.0,0.5,2.0);
glEnd();
glutSwapBuffers();
}
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(800,600);
glutCreateWindow("OpenGL");
glutDisplayFunc(renderScene);
glutReshapeFunc(changeSize);
glutIdleFunc(idle);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return 0;
}
答案 0 :(得分:4)
首先,gluPerspective
的{{1}}值为零,这完全是荒谬的。尝试为视野设置一个标称值(可能是60)。
其次,修复后,我不认为你的三个顶点中的任何一个都应该是可见的。如果您没有视图矩阵(没有显示),前两个顶点应该被近平面剪切。对于第三个顶点,您可能意味着它为-2而不是2(默认眼睛向下看负z轴)。所以这个顶点也在眼睛后面。
坦率地说,我很惊讶你能够看到任何东西,但看看纠正这些事情是否有帮助。尝试使用-0.2,-0.2和-2.0的z值绘制三角形。