计算机图形学原理的学习笔记。
这次学习的主要目标,就是研究:1.图形缩放 2.图形平移 3.图形旋转。
原理都明白了,就线性代数那些事。主要是怎么用代码实现,这是我不懂的。
变换图形,首先得画个图形。这是一段网上抄来的代码
//#include <stdafx.h>
#include <math.h>
#define GLUT_DISABLE_ATEXIT_HACK
#include "gl/glut.h"
void myDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
//画分割线,分成四个视见区
glViewport(0, 0, 400, 400);
glBegin(GL_LINES);
glVertex2f(-1.0, 0);
glVertex2f(1.0, 0);
glVertex2f(0.0, -1.0);
glVertex2f(0.0, 1.0);
glEnd();
//定义在左下角的区域
glColor3f(0.0, 1.0, 0.0);
glViewport(0, 0, 200, 200);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
//定义在右上角的区域
glColor3f(0.0, 0.0, 1.0);
glViewport(200, 200, 200, 200);//注意,后面这两个参数是高度和宽度,而不是坐标
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
//定义在左上角的区域
glColor3f(1.0, 0.0, 0.0);
glViewport(0, 200, 200, 200);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
//定义在右下角
glColor3f(1.0, 1.0, 1.0);
glViewport(200, 0, 200, 200);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
太复杂了,精简一下。
//#include <stdafx.h>
#include <math.h>
#define GLUT_DISABLE_ATEXIT_HACK
#include "gl/glut.h"
void myDisplay()
{
//定义在左上角的区域
glColor3f(1.0, 0.0, 0.0);
glViewport(0, 200, 200, 200);
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv); //环境的初始化
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(&myDisplay);//好像没有用
glutMainLoop();
return 0;
}
出来一个特别简单的小方块。
需要:一个矩阵来运转这个图形。
需要:一个鼠标键盘的交互动作。
需要:一个坐标系记录变换的坐标。
参考:
https://www.cnblogs.com/1024Planet/p/5647547.html