OpenGL:线不会被渲染
使用OpenGL,我试图在p1点和p2点之间绘制一条简单的线,但它不起作用。 但是,我能够在这些位置渲染立方体OpenGL:线不会被渲染,opengl,3d,rendering,line,Opengl,3d,Rendering,Line,使用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}; GLflo
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。轻松修复:绘制线时禁用照明 虽然可以“照亮”线路,但如果假设采用“常规”基于法线的照明模型,则整个操作毫无意义。直线没有法向,它们有一个法向平面(或者换句话说,一条直线本身相切)
因此,照亮直线的正确方法是基于切线的着色。固定函数OpenGL无法实现此功能,但使用着色器实现此功能非常简单。为您提供几点建议,w.r.t您的第二个代码片段: 1) 您可能不需要“glEnable(glEnable(GL_COLOR_MATERIAL)”,请尝试注释这一行 2) 您正在将int传递给glColor3f()。尝试使用glColor3f(1.0f、0.0f、0.0f);相反
另外,您是否检查了没有立方体在同一位置的线条图?(即,它是否被遮挡)我忘了提到,我还试图在代码的开头包含glDisable(GL_LIGHTING),但仍然没有发生任何事情。