我正在使用OpenGL API使用SSR(缩放/剪切/旋转)方法获取Rectangle的等距视图。我能够缩放和旋转矩形。但是我不知道如何剪切矩形。我是OpenGL新手。请帮忙。
#include <gl\glut.h> // glut.h must come before gl.h and glu.h
#include <gl\gl.h>
#include <gl\glu.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glVertex2f(20, 20);
glVertex2f(20, 70);
glVertex2f(70, 70);
glVertex2f(70, 20);
glEnd();
glScalef(0.86,0.86,0.86);
glTranslatef(200,0,0);
glRotatef(30, 0, 0,1);
glBegin(GL_QUADS);
glVertex2f(20, 20);
glVertex2f(20, 70);
glVertex2f(70, 70);
glVertex2f(70, 20);
glEnd();
glFlush();
}
void init()
{
glClearColor(0.5,0.5,0.0, 0.0);
glColor3f(1,0,0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, // left
800, // right
800, // bottom
0, // top
0, // zNear
1 // zFar
);
}
void main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(900, 1080);
glutInitWindowPosition(0, 0);
glutCreateWindow("Simple");
glutDisplayFunc(display);
init();
glutMainLoop();
}
最佳答案
对于平行于x轴的剪切量shear
:
GLfloat m[16] = {
1.0f, 0.0f, 0.0f, 0.0f,
shear, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f
};
glMultMatrixf(m);
并平行于y轴:
GLfloat m[16] = {
1.0f, shear, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f
};
glMultMatrixf(m);
当您将其与以数学符号指定的矩阵进行比较时,例如在Wikipedia Shear matrix页上,请记住,OpenGL矩阵是按列主要顺序指定的。
以上两个都是在2D平面中进行变换的。即第一个使x轴保持不变,并剪切y轴,而第二个使y轴保持不变,并剪切x轴。如果您在完整的3D空间中查看剪切变换,则会得到更多的变化。
关于c++ - 如何在OpenGL中执行矩形的剪切,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28893588/