c++ - 如何在 OpenGL 中执行矩形剪切

标签 c++ opengl isometric

我正在使用 OpenGL api 通过 SSR(缩放/剪切/旋转)方法获取矩形的等距 View 。我能够缩放和旋转矩形。但是我不知道如何剪切矩形。我是 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 矩阵是按列主要顺序指定的。

以上都是二维平面的变换。 IE。第一个保持 x 轴静止,剪切 y 轴,而第二个保持 y 轴静止,剪切 x 轴。如果您查看全 3D 空间中的剪切变换,您会发现更多变化。

关于c++ - 如何在 OpenGL 中执行矩形剪切,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28893588/

相关文章:

c++ - GUI系统开发资源?

c++ - ld : cannot find -lstdc++

c++ - 在 Linux-64 上编译 NeHe(或其他面向 32 位的)示例

android - OpenGL ES 3 实例渲染失败,但在桌面上工作

c# - 从交错等距网格上的坐标获取图 block

c++ - 组合图像中的重叠组

c++ - aboutToQuit 期间的 Qt 异步操作

opengl - GPU 如何同时支持 OpenGL 和 DirectX API 执行?

java - 等距游戏数据结构和渲染

ios - cocos2d 中的等距 tilemap 平台游戏 - 玩家跳跃?