三角形平移旋转与缩放

#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;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是用OpenGL实现键盘控制三角形平移旋转的简单程序。你可以将此代码入一个C++文件中并编译运行。 ```c++ #include <GL/glut.h> #include <iostream> using namespace std; // 三角形的顶点坐标 GLfloat vertices[][3] = { { -1.0,-1.0,-1.0 },{ 1.0,-1.0,-1.0 }, { 1.0,1.0,-1.0 },{ -1.0,1.0,-1.0 },{ -1.0,-1.0,1.0 }, { 1.0,-1.0,1.0 },{ 1.0,1.0,1.0 },{ -1.0,1.0,1.0 } }; // 三角形的边界顶点索引 GLfloat edges[][2] = { { 0,1 },{ 1,2 },{ 2,3 },{ 3,0 }, { 4,5 },{ 5,6 },{ 6,7 },{ 7,4 },{ 0,4 },{ 1,5 },{ 2,6 },{ 3,7 } }; // 三角形的颜色 GLfloat colors[][3] = { { 1.0,0.0,0.0 },{ 0.0,1.0,0.0 }, { 0.0,0.0,1.0 },{ 1.0,1.0,0.0 },{ 1.0,0.0,1.0 },{ 0.0,1.0,1.0 } }; // 三角形比例 GLfloat scale = 1.0; // 三角形平移量 GLfloat transX = 0.0, transY = 0.0, transZ = -5.0; // 三角形旋转角度 GLfloat rotX = 0.0, rotY = 0.0, rotZ = 0.0; // 执行绘制操作 void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); // 平移 glTranslatef(transX, transY, transZ); // 旋转 glRotatef(rotX, 1.0, 0.0, 0.0); glRotatef(rotY, 0.0, 1.0, 0.0); glRotatef(rotZ, 0.0, 0.0, 1.0); // glScalef(scale, scale, scale); // 绘制三角形 for (int i = 0; i < 12; i++) { glBegin(GL_LINES); glColor3fv(colors[i / 2]); glVertex3fv(vertices[edges[i][0]]); glVertex3fv(vertices[edges[i][1]]); glEnd(); } glFlush(); glutSwapBuffers(); } // 执行键盘操作 void keyboard(unsigned char key, int x, int y) { switch (key) { // 大 case 'w': scale += 0.1; break; // 小 case 's': scale -= 0.1; break; // 上移 case 'i': transY += 0.1; break; // 下移 case 'k': transY -= 0.1; break; // 左移 case 'j': transX -= 0.1; break; // 右移 case 'l': transX += 0.1; break; // 绕X轴顺时针旋转 case 'x': rotX += 10.0; break; // 绕X轴逆时针旋转 case 'X': rotX -= 10.0; break; // 绕Y轴顺时针旋转 case 'y': rotY += 10.0; break; // 绕Y轴逆时针旋转 case 'Y': rotY -= 10.0; break; // 绕Z轴顺时针旋转 case 'z': rotZ += 10.0; break; // 绕Z轴逆时针旋转 case 'Z': rotZ -= 10.0; break; // 默认 default: break; } glutPostRedisplay(); } // 初始化OpenGL void init() { glClearColor(0.0, 0.0, 0.0, 0.0); glEnable(GL_DEPTH_TEST); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 100); glutCreateWindow("Triangle Transformation"); init(); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } ``` 该程序使用OpenGL绘制了一个三角形,并且可以通过键盘控制其平移旋转。你可以通过按下“w”键和“s”键来大和三角形,按下“i”、“k”、“j”和“l”键来控制三角形在水平和垂直方向上的平移,按下“x”、“X”、“y”、“Y”、“z”和“Z”键来控制三角形旋转

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值