如何在OpenGL中执行矩形剪切
how to perform shearing of a rectangle in OpenGL
我正在使用OpenGL API,使用SSR(缩放/剪切/旋转)方法获得矩形的等轴测视图。我能够缩放和旋转矩形。但是我不知道如何剪切一个矩形。我是OpenGL的新手。请帮忙。
#include <glglut.h> // glut.h must come before gl.h and glu.h
#include <glgl.h>
#include <glglu.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);
当您将其与数学符号中指定的矩阵(例如维基百科剪切矩阵页面)进行比较时,请记住OpenGL矩阵是按列主顺序指定的。
以上两项都适用于2D平面中的变换。即,第一个保持x轴静止,剪切y轴,而第二个保持y轴静止,并剪切x轴。如果你在整个三维空间中观察剪切变换,你会得到更多的变化。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 使用C++中的模板和运算符重载执行矩阵运算
- OpenGL:在着色器中执行TexCoord计算,不好的做法?
- OpenGL计算着色器中线程的执行顺序
- 在 OpenGL 着色器内部还是在 C++ 中按位执行更快
- OpenGL 命令的执行顺序
- GLSDK - 无法执行示例 OpenGL 程序
- 如何在OpenGL中执行矩形剪切
- OpenGL:QApplication的执行流程
- libGL 在执行 OpenGL 程序时出错
- 是否有可以执行 OpenGL 3+ 的 VM?VirtualBox和VMware没有
- OpenGL执行很慢
- opengl es-未能在android上执行此c++代码
- OpenGL:无法使用freeGLUT执行渲染?C++
- OpenCV:是否可以使用它执行openGL像素着色
- 0xC0000005:访问冲突执行位置0x00000000.(OpenGL)
- 何时在OpenGL中执行3D碰撞检测
- OpenGL镶嵌回调未执行