要保持变换之间的线宽恒定,可以使用OpenGL的glLineWidth()
函数来设置线宽。在进行变换之前,先保存当前的线宽值,然后在每次变换后恢复原始线宽值。
以下是一个使用OpenGL的C++代码示例:
#include
float originalLineWidth = 1.0f; // 保存原始线宽值
void display() {
glClear(GL_COLOR_BUFFER_BIT);
// 绘制线段
glBegin(GL_LINES);
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.5f, 0.5f);
glEnd();
glFlush();
}
void reshape(int width, int height) {
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// 设置正交投影矩阵
glOrtho(-1, 1, -1, 1, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void keyboard(unsigned char key, int x, int y) {
switch(key) {
case 27: // 按下ESC键退出程序
exit(0);
break;
}
}
void idle() {
// 在每次变换之前设置线宽
glLineWidth(originalLineWidth);
// 进行变换操作,例如旋转
glRotatef(1.0f, 0.0f, 0.0f, 1.0f);
// 获取当前的线宽值
glGetFloatv(GL_LINE_WIDTH, &originalLineWidth);
// 设置新的线宽值
glLineWidth(2.0f);
glutPostRedisplay();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(400, 400);
glutCreateWindow("Line Width Example");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutIdleFunc(idle);
glutMainLoop();
return 0;
}
在上述代码中,idle()
函数用于进行变换操作。在每次变换之前,先设置线宽为保存的原始线宽值originalLineWidth
,然后进行变换操作,随后通过glGetFloatv()
函数获取当前的线宽值,并将其保存到originalLineWidth
变量中。最后,设置新的线宽值为2.0f。
这样就可以保持变换之间的线宽恒定了。
下一篇:保持边界不动