#include <stdlib.h>
#include <GL/glut.h>
void init(void)
{
//背景
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
}
void draw_triangle(void)
{
//绘制三角形
// glBegin(GL_LINE_LOOP)所有点首尾相接
glBegin(GL_LINE_LOOP);
glVertex2f(0.0, 25.0);
glVertex2f(25.0, -25.0);
glVertex2f(-25.0, -25.0);
glEnd();
}
//display
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glColor3f(1.0, 1.0, 1.0);
draw_triangle();
//glEnable用于启用各种功能
// //void glEnable(GLenum cap)
//GL_LINE_STIPPLE执行后画虚线;一种cap取值
glEnable(GL_LINE_STIPPLE);
glLineStipple(1, 0xF0F0);
//函数原型:void glLineStipple( GLint factor, GLushort pattern );
glLoadIdentity();
//平移 (x,y,z)
glTranslatef(-20.0, 0.0, 0.0);
draw_triangle();
//画线
glLineStipple(1, 0xF00F);
//当前矩阵恢复成一个单位矩阵
glLoadIdentity();
//缩放xyz
glScalef(1.5, 0.5, 1.0);
draw_triangle();
glLineStipple(1, 0x8888);
glLoadIdentity();
//旋转(角度/默认逆时针 旋转方向向量)
glRotatef(90.0, 0.0, 0.0, 1.0);
draw_triangle();
glDisable(GL_LINE_STIPPLE);
glFlush();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
gluOrtho2D(-50.0, 50.0, -50.0 * (GLfloat)h / (GLfloat)w, 50.0 * (GLfloat)h / (GLfloat)w);
else
gluOrtho2D(-50.0 * (GLfloat)w / (GLfloat)h,
50.0 * (GLfloat)w / (GLfloat)h, -50.0, 50.0);
//将当前矩阵设置成参数所指定的模式
//GL_MODELVIEW
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
三角形平移旋转与缩放
最新推荐文章于 2023-02-05 00:08:47 发布