2010年12月21日OpenGL课堂笔记
第二章图形绘制
GL_POLYGON没有S,虚线的使能和模式,
面的绘制:
012,123,345初次绘制三角形,四面体内部不用画,使用“绕法”进行判断内外,这个和法向量什么关系?面的填充分反正操作:从正面看是面,反面看的wire。
属于颜色模式,flat(平面模式)模式,即情况利用当前的颜色绘制,而smooth模式,使用颜色差值。(画三角形出现颜色渐变的原因)
纠正观念,面得正反面是有差别。
“glPolygonMode(Glenum face,Glenum mode);
其中,参数face指定多边形的哪一面受模式改变的影响——GL_FRONT,GL_BACK或GL_FRONT_AND_BACK。参数mode用于指定新的绘图模式。
GL_FILL是默认值,生成填充的多边形;
GL_LINE生成多边形的轮廓;而GL_POINT只画出顶点。
GL_LINE和GL_POINT绘制的点和线受glEdgeFlag所设置边缘标记的影响。”
程序分析:
菜单建立不走
创建一个子菜单:
句柄nModeMenuglut=glutCreatMenue(Processmenue);
添加菜单项,有几个菜单项就调用几次,考虑使用队列
glutAddMenueEntry("string",传递给回调函数值);//原理是利用返回值附属于当前句柄
增加一个子菜单
主函数中创建主菜单
nMainmenu
glutAddSubMenue(string,子菜单句柄)
主菜单也有自己的菜单项。
将菜单与动作相连
glutAttachMenu(mask);//GLUT_RIGHT_BUTTON
设备初始化
进入循环
重点内容:
chagesize将剪切后的模型显示到设备什么位置
{
glViewport(0,0,w,h);制定绘图位置glutortho大地坐标系下那部分要显示
glutMatrix
}
SetupRC这个名潮!
glRotate(旋转度数,旋转轴)
if(bWinding)//BOOL
glFrontFace(GL_CW);制定怎么绕时是正面,因为点的位置是固定的,走点的顺序:123,还是321确定的方向是正
else
glFrontFace(GL_CCW);
glBegin(GL_TRAINGLES)//程序运行时顺时针为正,
glColor3f();
glVertex();
void ProcessMenue(传递的值)
{
case 1:
glPolygon(GL_BACK,GL_POINT)正面点模式,与glFrontFace配合使用
break;
case2:
glShadeMode(GL_FLAT)阴影的显示模式
}
RenderSence这个名潮
重要概念:深度
问题的提出:覆盖,正四面体各个面的颜色填充
测试:点到观察者的距离,即z坐标
1.启动深度测试
2.深度缓存初始化,GL_DEPTH_BUFFER_BIT
问题:不要每个点都比较,看不到的面进行剔除,就直接除掉该面(层)了
问题:正面的问题,OpenGL画点的顺序是固定的吗?
问题:glut实质??
其实所有面都被堆在一起了,点的不同顺序的组合就形成了面,实质上还是二维(产生深度,剔除等概念就是因为这点,设备是二维的,骗人的眼睛而已)
第四个面你画的时候就掌握以下顺序(千万注意每个面都有两层,面的方向就是让你清楚你能看到哪层,而OpenGL得所有操作都是对层的)