opengl中用glEnable(GL_POLYGON_SMOOTH)消除多边形锯齿 物体表面出现虚线,有些地方甚至成半透明的了
glEnable(GL_BLEND);
glEnable(GL_POINT_SMOOTH);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glEnable(GL_POLYGON_SMOOTH);
glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST);
这是消除锯齿的方式,消除点.线锯齿时,没问题,但是加上glEnable(GL_POLYGON_SMOOTH);图形表面会出现很多虚线,实体的球体也会出现好多透明的斑斑点点,这是怎么回事啊?有些教材上的例子我运行时也会出现这种情况,跟显示器有关吗?怎么样才能解决啊?谢了,大侠们!!!
相关推荐
用opengl绘制一个旋转正方体.cpp
#include #include "stdafx.h" #define GLUT_DISABLE_ATEXIT_HACK #include //#pragma comment(lib, "glut32.lib") GLfloat AngleX;//旋转向量 GLfloat AngleY; void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); //这个函数其实就是对接下来要做什么进行一下声明 GL_MODELVIEW 模型视图 glLoadIdentity(); glPushMatrix();// 提供了相应的接口 { glRotatef(AngleX, 1.0f, 0.0f, 0.0f); glRotatef(AngleY, 0.0f, 1.0f, 0.0f); glBegin(GL_POLYGON); //前表面 glColor3f(1.0f,1.0f,1.0f);//颜色设置为白色 glVertex3f(50.0f, 50.0f, 50.0f); glColor3f(1.0f,1.0f,0.0f);//颜色设置为黄色 glVertex3f(50.0f, -50.0f, 50.0f); glColor3f(1.0f,0.0f,0.0f);//颜色设置为红色 glVertex3f(-50.0f, -50.0f, 50.0f); glColor3f(1.0f,0.0f,1.0f);//颜色设置为品红色 glVertex3f(-50.0f, 50.0f, 50.0f); glEnd(); glBegin(GL_POLYGON); //后表面 glColor3f(0.0f, 1.0f, 1.0f);//颜色设置为青色 glVertex3f(50.0f, 50.0f, -50.0f); glColor3f(0.0f, 1.0f, 0.0f);//颜色设置为绿色 glVertex3f(50.0f, -50.0f, -50.0f); glColor3f(0.0f, 0.0f, 0.0f);//颜色设置为黑色 glVertex3f(-50.0f, -50.0f, -50.0f); glColor3f(0.0f, 0.0f, 1.0f);//颜色设置为蓝色 glVertex3f(-50.0f, 50.0f, -50.0f); glEnd(); glBegin(GL_POLYGON); //右表面 glColor3ub((GLubyte)255, (GLubyte)255, (GLubyte)255);//颜色设置为白色 glVertex3f(50.0f, 50.0f, 50.0f); glColor3f(0.0f, 1.0f, 1.0f);//颜色设置为青色 glVertex3f(50.0f, 50.0f, -50.0f); glColor3f(0.0f, 1.0f, 0.0f);//颜色设置为绿色 glVertex3f(50.0f, -50.0f, -50.0f); glColor3ub((GLubyte)255, (GLubyte)255, (GLubyte)0);//颜色设置为黄色 glVertex3f(50.0f, -50.0f, 50.0f); glEnd(); glBegin(GL_POLYGON); //左表面 glColor3d(0.0, 0.0, 1.0);//颜色设置为蓝色 glVertex3f(-50.0f, 50.0f, -50.0f); glColor3f(0.0f, 0.0f, 0.0f);//颜色设置为黑色 glVertex3f(-50.0f, -50.0f, -50.0f); glColor3ub((GLubyte)255, (GLubyte)0, (GLubyte)0);//颜色设置为红色 glVertex3f(-50.0f, -50.0f, 50.0f); glColor3f(1.0f, 0.0f, 1.0f);//颜色设置为品红色 glVertex3f(-50.0f, 50.0f, 50.0f); glEnd(); glBegin(GL_POLYGON); //上表面 glColor3d(0.0, 1.0, 1.0);//颜色设置为青色 glVertex3f(50.0f, 50.0f, -50.0f); glColor3d(1.0, 1.0, 1.0);//颜色设置为白色 glVertex3f(50.0f, 50.0f, 50.0f); glColor3d(1.0, 0.0, 1.0);//颜色设置为品红色 glVertex3f(-50.0f, 50.0f, 50.0f); glColor3d(0.0, 0.0, 1.0);//颜色设置为蓝色 glVertex3f(-50.0f, 50.0f, -50.0f); glEnd(); glBegin(GL_POLYGON); //下表面 glColor3f(0.0f, 1.0f, 0.0f);//颜色设置为绿色 glVertex3f(50.0f, -50.0f, -50.0f); glColor3ub((GLubyte)255, (GLubyte)255, (GLubyte)0);//颜色设置为黄色 glVertex3f(50.0f, -50.0f, 50.0f); glColor3f(1.0f, 0.0f, 0.0f);//颜色设置为红色 glVertex3f(-50.0f, -50.0f, 50.0f); glColor3f(0.0f, 0.0f, 0.0f);//颜色设置为黑色 glVertex3f(-50.0f, -50.0f, -50.0f); glEnd(); } glPopMatrix(); glutSwapBuffers(); } void reshape(int w, int h) { GLfloat aspect = (GLfloat)w / (GLfloat)h; GLfloat nRange = 100.0f; glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影模式 glLoadIdentity(); //设置三维投影区 if (w 355.0f) { AngleX = 0.0f; } if (AngleX 355.0f) AngleY = 0.0f; if (AngleY < 0.0f) { AngleY = 355.0f; } glutPostRedisplay(); } void init() { AngleX = 45.0f; AngleY = 315.0f; glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glEnable(GL_DEPTH_TEST); //初始化OpenGL glEnable(GL_DITHER); //抖动是激活的。 glShadeModel(GL_SMOOTH);//两点间颜色有过渡效果 } void main(int argc, char* argv[]) { glutInit(&argc;, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); //使用双缓存 使用深度缓存。 glutInitWindowSize(480, 480); glutCreateWindow("OpenGL颜色立方体"); glutReshapeFunc(reshape); //窗口改变的时候调用的函数 glutDisplayFunc(display); glutSpecialFunc(key_board); //函数注册鼠标响应事件 init(); glutMainLoop(); }
IEC 61851-24:2023 电动汽车导电充电系统 - 第24部分:直流电动汽车供电设备与电动汽车之间的数字通信,用于控制直流充电 - 完整英文电子版(110页)
IEC 61851-24:2023 与 IEC 61851-23 共同适用于直流电动车供电设备与电动道路车辆(EV)之间的数字通信,用于控制导电直流电力传输,额定电源电压最高可达1000伏交流电或最高1500伏直流电,额定输出电压最高可达1500伏直流电。
Linux下的段错误(Segmentation fault)产生的原因及调试方法(经典)
Linux下的段错误(Segmentation fault)产生的原因及调试方法(经典)
【带状电容器计算用于电容式触摸传感器应用】半数值模型的电容式触摸传感器集成于金属基材涂层中研究(Matlab代码实现)
内容概要:本文针对电容式触摸传感器在金属基材上应用时易受干扰的问题,提出一种基于半数值模型的仿真分析方法,用于精确计算带状电容器在金属背景下的电容变化。研究通过构建合理的物理模型,结合电磁场理论与数值计算技术,在Matlab平台上实现代码仿真,有效克服金属环境对传感器性能的负面影响,提升其在复杂材料表面工作的稳定性和灵敏度,具有良好的工程应用前景。该方法不仅适用于基础研究,也可为实际产品中抗干扰触摸传感器的设计提供理论依据和技术支撑。; 适合人群:具备电磁场与微波技术基础知识及Matlab编程能力,从事传感器设计、人机交互设备开发、嵌入式系统研发等相关领域的高校研究生、科研人员和工程技术人员。; 使用场景及目标:①开展电容式触摸传感器在金属基材上的集成与优化设计;②掌握半数值建模与仿真方法在电磁传感系统中的应用;③为工业环境下高抗扰触摸器件的研发提供仿真验证手段与设计指导。; 阅读建议:此资源强调物理建模与数值仿真的紧密结合,建议读者结合电磁学原理深入理解边界条件设置、介质分布建模与电场求解过程,并动手运行Matlab代码,调试参数以观察电容响应特性,从而全面提升对传感器工作机制与仿真分析能力的掌握。
【顶级EI复现】基于KKT条件与分段解析优化的双有源桥DC-DC变换器软开关协同最小应力闭环控制方法(Simulink仿真实现)
内容概要:本文提出了一种基于KKT条件与分段解析优化的双有源桥DC-DC变换器软开关协同最小应力闭环控制方法,旨在实现高效、高可靠性的电力转换。该方法通过建立精确的电路数学模型,结合KKT最优性条件进行分段解析优化,有效协调零电压/零电流软开关实现条件与功率器件电压电流应力之间的矛盾,在确保宽范围软开关的前提下显著降低器件的电气应力,从而提升系统效率与寿命。文中详细阐述了控制策略的理论推导过程,并在Simulink平台上构建了完整的闭环仿真模型,验证了该方法在动态响应速度、转换效率优化及器件应力抑制等方面的优异性能,是对高水平EI期刊研究成果的高质量复现; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、科研人员,以及从事DC-DC变换器控制算法开发的工程师;适用于具备扎实电路拓扑分析能力与现代控制理论基础的专业技术人员; 使用场景及目标:①深入理解双有源桥(DAB)变换器的工作机理与关键控制挑战;②掌握将非线性优化问题转化为KKT条件求解的方法及其在电力电子系统中的实际应用;③学习如何通过分段解析策略实现多目标(软开关与低应力)协同优化控制;④复现并拓展EI级论文中的先进控制算法,支撑科研创新与工程实践; 阅读建议:建议读者结合提供的Simulink仿真模型,逐步跟进理论推导与控制逻辑实现过程,重点关注KKT条件的引入方式、边界约束处理及闭环控制器设计细节,同时可尝试将该优化思想迁移至其他隔离型DC-DC变换器拓扑中进行对比验证,以深化对先进优化控制策略的理解与应用能力。



