使用OpenGL我试图在点p1和p2之间渲染一条简单的线,但它不起作用。 但是,我能够在这些位置渲染立方体。
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
GLfloat mat_ambient[] = {0.0, 0.0, 1.0, 1.0};
GLfloat mat_flash[] = {0.0, 0.0, 1.0, 1.0};
GLfloat mat_flash_shiny[] = {50.0};
GLfloat light_position[] = {100.0,-200.0,200.0,0.0};
GLfloat ambi[] = {0.1, 0.1, 0.1, 0.1};
GLfloat lightZeroColor[] = {0.9, 0.9, 0.9, 0.1};
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambi);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_flash);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_flash_shiny);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(p1.x, p1.y, p1.z);
glutSolidCube(20);
glLoadIdentity();
glTranslatef(p2.x, p2.y, p2.z);
glutSolidCube(20);
glDisable( GL_LIGHTING );
glDisable( GL_DEPTH_TEST );
我使用以下代码渲染该行。但我无法找到问题,为什么它不会被渲染:
glDisable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
glLoadIdentity();
glColor3f(1,0,0);
glLineWidth(10.0);
glBegin(GL_LINES); //doesnt work with GL_LINE either
glVertex3f(p1.x, p1.y, p1.z);
glVertex3f(p2.x, p2.y, p2.z);
glEnd();
答案 0 :(得分:1)
我假设发生的事情是线条实际渲染,但仍有顶点法线设置,指向远离光源,或为0.简单修复:绘制线条时禁用光照。
虽然可以“照亮”线条,但如果假定“常规”基于法线的照明模型,则整个操作没有意义。线条没有法线方向,它们有一个法线平面(换句话说,它是一条直线切线)。
因此照亮线条的正确方法是基于切线的着色。固定功能OpenGL无法做到这一点,但使用着色器实现它是微不足道的。
答案 1 :(得分:0)
为您提出几点建议,请问您的第二个代码段:
1)您可能不需要'glEnable(GL_COLOR_MATERIAL)',尝试注释掉该行。
2)你将int传递给glColor3f()。尝试使用glColor3f(1.0f,0.0f,0.0f);代替。
另外,你是否在没有立方体的情况下检查线条图? (即,是否被遮挡)