照明不工作在OpenGL -纯色
Lighting not working on OpenGL - Solid color
灯光不起作用,物体呈现纯色。颜色本身随着材料或光照参数的变化而变化,但没有阴影或任何东西,只有纯灰色。
下面是部分代码:
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glFrontFace(GL_CCW);
glShadeModel(GL_FLAT);
glEnable(GL_LIGHTING);
GLfloat amb[] = {0.6, 0.6, 0.6, 1.0};
GLfloat dif[] = {0.8, 0.8, 0.8, 1.0};
GLfloat spec[] = {0.5, 0.5, 0.5, 1.0};
GLfloat pos[] = {0.0, 0.0, 30.0};
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_AMBIENT, amb);
glLightfv(GL_LIGHT0, GL_DIFFUSE, dif);
glLightfv(GL_LIGHT0, GL_SPECULAR, spec);
glLightfv(GL_LIGHT0, GL_POSITION, pos);
GLfloat co[4]={0.5, 0.5, 0.5, 0.5};
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mat_shininess[] = { 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, co);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
for(int i=0; i < numofTr; i++)
{
glBegin(GL_TRIANGLES);
glNormal3f(tr[i].v1->n.x, tr[i].v1->n.y, tr[i].v1->n.z);
glVertex3f(tr[i].v1->x, tr[i].v1->y, tr[i].v1->z);
glNormal3f(tr[i].v2->n.x, tr[i].v2->n.y, tr[i].v2->n.z);
glVertex3f(tr[i].v2->x, tr[i].v2->y, tr[i].v2->z);
glNormal3f(tr[i].v3->n.x, tr[i].v3->n.y, tr[i].v3->n.z);
glVertex3f(tr[i].v3->x, tr[i].v3->y, tr[i].v3->z);
glEnd();
}
我不知道我错过了什么,法线和对象一起显示时看起来很好。
您正在对灰色对象使用昏暗的光。显然,结果是灰色的。
如果你的意思是面是平阴影的,那是因为glShadeModel(GL_FLAT);
。将其更改为GL_SMOOTH
以启用插值。
如果对象是3D的,我认为你只传递3个浮点数作为位置可能是相关的;默认值是[0,0,1,0]
,该函数期望有4个浮点数(第4个是W坐标,在大多数情况下应该等于1,或者对于无限距离的灯应该等于0)。
还要仔细检查您给glVertex
和glNormal
的数据是否正确。当在0,0,0处渲染球体时,每个顶点的法线是该顶点的归一化位置(显然仅适用于球体)。
作为旁注,这段代码显然已经过时了,作为免责声明,如果你只是在学习,我将把它全部丢弃,并切换到相对现代的东西,并使用可编程管道。
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 了解 GLM- openGL 中的相机转换
- 如何定义一个纯抽象基类
- 如何在全屏模式下(在OpenGL中)使背景透明
- 如何在C++中获得"静态纯虚拟"功能?
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 将 MFC 图像初始化为纯色
- vkCmdCopyImageToBuffer 生成纯色图像
- SystemParametersInfo将背景设置为纯色,而不是实际设置图片
- 如何在 Win32 应用中拖动纯色矩形,而不会产生白色闪烁,也不会干扰其他屏幕对象
- OpenGL,纹理输出为纯色
- 试图显示纹理,但只能使用OpenGL获得纯色
- 如何使用材质的环境色代替灯光的全局环境色?(OpenGL 1)
- 不带GLkit的OpenGL ES.GLKMatrix和纯OpenGL ES中函数的类似物
- 用c++创建一个单一的纯色图像
- 照明不工作在OpenGL -纯色
- 在纹理/纯色中绘制透明孔
- Xcode 6:在不使用模板的情况下创建纯C++ OpenGL 应用程序捆绑包 (.app "Cocoa Application"
- OpenGL 不显示中间色
- 如果无法加载纹理,则退回到纯色