首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将OpenGL正交投影设置为旋转时用矩形填充屏幕

OpenGL是一种跨平台的图形库,用于渲染2D和3D图形。正交投影是一种投影技术,用于将3D场景投影到2D屏幕上。将OpenGL正交投影设置为旋转时用矩形填充屏幕的过程如下:

  1. 初始化OpenGL环境:包括创建窗口、设置视口大小等。
  2. 设置视图矩阵和投影矩阵:视图矩阵用于定义观察者的位置和方向,投影矩阵用于定义投影方式。在这个问题中,我们需要将投影矩阵设置为正交投影。
  3. 设置模型矩阵:模型矩阵用于定义物体的位置、旋转和缩放。
  4. 创建顶点数据:定义一个矩形的顶点坐标和颜色。
  5. 创建顶点着色器和片段着色器:顶点着色器用于处理顶点数据,片段着色器用于处理像素数据。
  6. 编译和链接着色器程序:将顶点着色器和片段着色器编译成可执行的着色器程序。
  7. 设置顶点属性指针:将顶点数据传递给顶点着色器。
  8. 渲染循环:在每一帧中,清空屏幕,更新模型矩阵,绘制矩形。

具体实现代码如下(使用C++和OpenGL):

代码语言:txt
复制
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>

// 顶点着色器代码
const char* vertexShaderSource = R"(
    #version 330 core
    layout (location = 0) in vec3 aPos;
    void main()
    {
        gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
    }
)";

// 片段着色器代码
const char* fragmentShaderSource = R"(
    #version 330 core
    out vec4 FragColor;
    void main()
    {
        FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);
    }
)";

int main()
{
    // 初始化GLFW
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    // 创建窗口
    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", NULL, NULL);
    if (window == NULL)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);

    // 初始化GLEW
    if (glewInit() != GLEW_OK)
    {
        std::cout << "Failed to initialize GLEW" << std::endl;
        return -1;
    }

    // 创建顶点着色器对象
    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
    glCompileShader(vertexShader);

    // 创建片段着色器对象
    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
    glCompileShader(fragmentShader);

    // 创建着色器程序
    GLuint shaderProgram = glCreateProgram();
    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);
    glLinkProgram(shaderProgram);

    // 删除着色器对象
    glDeleteShader(vertexShader);
    glDeleteShader(fragmentShader);

    // 定义矩形的顶点数据
    float vertices[] = {
        -0.5f, -0.5f, 0.0f,
         0.5f, -0.5f, 0.0f,
         0.5f,  0.5f, 0.0f,
        -0.5f,  0.5f, 0.0f
    };

    // 定义矩形的索引数据
    unsigned int indices[] = {
        0, 1, 2,
        2, 3, 0
    };

    // 创建顶点缓冲对象和索引缓冲对象
    GLuint VBO, EBO;
    glGenBuffers(1, &VBO);
    glGenBuffers(1, &EBO);

    // 绑定顶点缓冲对象和索引缓冲对象
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

    // 设置顶点属性指针
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
    glEnableVertexAttribArray(0);

    // 渲染循环
    while (!glfwWindowShouldClose(window))
    {
        // 清空屏幕
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        // 更新模型矩阵
        float angle = (float)glfwGetTime() * 50.0f;
        glm::mat4 model = glm::rotate(glm::mat4(1.0f), glm::radians(angle), glm::vec3(0.0f, 0.0f, 1.0f));

        // 设置模型矩阵
        GLuint modelLoc = glGetUniformLocation(shaderProgram, "model");
        glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));

        // 使用着色器程序
        glUseProgram(shaderProgram);

        // 绘制矩形
        glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

        // 交换缓冲区和轮询事件
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    // 删除缓冲对象和着色器程序
    glDeleteBuffers(1, &VBO);
    glDeleteBuffers(1, &EBO);
    glDeleteProgram(shaderProgram);

    // 终止GLFW
    glfwTerminate();
    return 0;
}

这段代码使用了OpenGL的核心配置,并创建了一个窗口。顶点着色器和片段着色器分别定义了顶点和像素的处理逻辑。顶点数据通过顶点缓冲对象传递给顶点着色器,并使用索引缓冲对象进行绘制。在渲染循环中,通过更新模型矩阵实现矩形的旋转。

对于这个问题,推荐使用腾讯云的云服务器(CVM)来搭建OpenGL开发环境。腾讯云的云服务器提供了高性能的计算资源和灵活的配置选项,适合进行图形渲染和开发工作。您可以通过以下链接了解更多关于腾讯云云服务器的信息:

请注意,以上代码仅为示例,实际使用时需要根据具体需求进行修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

终端图像处理系列 - OpenGL ES 2.0 - 3D基础(矩阵投影)

Overview 移动设备的屏幕是二维平面,要想把一个三维场景渲染在手机二维屏幕上,需要利用OpenGL中的矩阵投射,将三维空间中的点映射到二维平面上。...旋转矩阵 (Rx,Ry,Rz)代表任意旋转轴,θ是角度: ? 坐标系统 OpenGL在每次顶点着色器运行后,所有顶点都为标准化设备坐标,每个顶点(x,y,z)都应该在-1.0d到1.0之间。...模型矩阵是一种变换矩阵,能对物体进行位移,缩放,旋转。 观察空间(View Space): 观察空间是将世界坐标转化为用户视野前方的坐标。一般一个观察矩阵(View Matrix)来完成转换。...屏幕空间(Screen Space) 正交投影(Orthographic Projection) 正交投影矩阵定义一个立方体的平截头箱,在这个立方体之外的顶点都会被裁剪掉。 ?...正交投影矩阵直接将坐标映射到2D平面上。不过正交投影没有透视效果,远处箱子和近处箱子投射到平面上是一样大的,这和我们日常生活中看东西近大远小的视觉效果是不符的。

2.4K110

OpenGL ES】 Android OpenGL ES -- 透视投影 和 正交投影

; -- 说明 : 视口并不是占手机全部屏幕, 是显示投影的部分, 也可以是一个 View 组件; 视口设置方法 :  void android.opengl.GLES20.glViewport(int...ProjectionGLSurfaceView 自定义View显示类 (1) 正交透视投影设置 关键成员变量 :  public static boolean isOrth -- 正交投影 : 设置...true, 正交投影; -- 透视投影 : 设置 false , 透视投影; (3) 源码 源码 :  package cn.org.octopus.opengl.projection; import...创建 设置背景 -> 创建绘制元素 -> 打开深度检测 * b. 场景改变 设置视口参数 -> 设置投影参数 -> 设置摄像机参数 * c....ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //设置屏幕竖屏 //② 初始化GLSurfaceView mGLSurfaceView

2.6K30
  • OpenGL-投影和摄像机

    2.坐标系 手机屏幕坐标系 二维坐标系,左上角原点,X,Y轴正方向分别为右和下,XY取值范围屏幕分辨率。 ? OpenGL世界坐标系 ?...三维坐标系,X正方向右,Y正方向上,Z正方向朝向我们。 注意:摄像机位置,投影坐标都是基于世界坐标系设置的。 3.两种投影方式 正交投影 ?...说明:视点摄像机的位置;离视点较近,垂直于观察方向向量的平面近平面,离视点较远,垂直于观察方向向量的平面远平面, 代码调用:使用Matrix.orthoM()来设置正交投影。...当up向量X正方向,正如我们向右90度歪着脑袋去看这个三角形,看到的三角形就会是向左旋转了90度的三角形。...所以在设置up向量,一般总是设置(0,1,0),这是大多数观察头朝上的方向。注意:up向量的大小无关紧要,有意义的只有方向。

    3.3K121

    Android OpenGL ES开发初探

    Android上OpenGL ES基本的类 (1) GLSurfaceView OpenGL ES在Android开发上,是以GLSurfaceView载体进行展示的(或者可以自己SurfaceView...基本使用: GLSurfaceView glView = new GLSurfaceView (context); // 注意,记得给它设置版本,这里OpenGL ES 2.0,那就设置version...OpenGL中的各种坐标系 1. 屏幕坐标系 众所周知,Android屏幕坐标系是以左上角原点,横x轴,竖y轴。 [屏幕坐标系] 2....顶点坐标系 和屏幕坐标系不太一样,OpenGL的顶点坐标是以中心原点,横x轴,竖y轴,垂直于屏幕z轴。轴的值范围都在-1, 1这个区间内。据说是做归一化处理,显卡计算起来会比较方便喔。...三、总结 OpenGL就是一个画图的库; 在Android上,OpenGL呈现的载体是GLSurfaceView; 使用shader语言去告诉OpenGL你要干嘛(画在什么位置和填充什么颜色或者纹理)

    1.1K90

    NDK OpenGLES3.0 开发(八):坐标系统

    将一个物体(图像)渲染到屏幕上,通常经过将物体坐标转换为标准化设备坐标,然后再将标准化设备坐标转化为屏幕坐标的过程。...正交投影 正交投影是一种平行投影,投影点与原顶点的连线相互平行,且物体不产生“近大远小”的视觉效果。...对于一个真实的观察效果,它的值经常设置 45.0,但想要看到更多结果你可以设置一个更大的值。第二个参数设置了宽高比,由视口的高除以宽。第三和第四个参数设置了平截头体的近和远平面。...我们经常设置近距离 0.1 而远距离设为 100.0 。所有在近平面和远平面的顶点且处于平截头体内的顶点都会被渲染。...最后整个坐标系统的变换矩阵可以一个矩阵表示 MVPMatrix = Projection * View * Model;。

    1.4K20

    OpenGL ES正交投影实现方法(三)

    本文实例大家分享了OpenGL ES正交投影展示的具体代码,供大家参考,具体内容如下 绘制正方形 在最开始绘制的六边形里面好像看起来挺容易的,也没有出现什么问题,接下来不妨忘记前面绘制六边形的代码,让我们按照自己的理解来绘制一个简单的正方形...0, (float) -0.5, (float) 0.5, 0, (float) 0.5, (float) 0.5, 0 }; 于是代码大概是这样子的,这里省略掉与主题无关的代码,颜色纯色填充...但比较巧的是,如果以屏幕中心做一个坐标轴,就会发现,这个矩形的四个顶点在这个坐标轴x、y范围[-1,1]的中间。...将在这个空间的物体直接往手机屏幕的归一化坐标绘制,由于屏幕的宽高比的问题,就会出现和预料结果不一样。所以只需要对物体空间的坐标做一个映射即可。...利用矩阵的就可以将物体空间[-1,1]之间的坐标映射到屏幕归一化设备坐标的[-1,1]之间。归一化屏幕坐标是右手坐标系统,原点在屏幕正中心,向右x轴正方向,向上y轴正方向,z轴垂直屏幕向外。

    96220

    OpenGL ES透视投影实现方法(四)

    在之前的学习中,我们知道了一个顶点要想显示到屏幕上,它的x、y、z分量都要在[-1,1]之间,我们回顾一下渲染管线的图元装配阶段,它实际上做了以下几件事:剪裁坐标、透视分割、视口变换。...OpenGL会用默认的值替换属性中未指定的分量,前三个分量会被设定为0,最后一个分量w会被设定为1....视口变换 前面已经使用过视口变换的函数glViewport了,视口是一个而为矩形窗口区域。是OpenGL渲染操作最终显示的地方。...透视投影 然而这样让物体产生三维效果的做法太死板了,如果我们还要让物体平移缩放旋转,这样固定的指定w的值就不太好了。 透视投影这个时候就能派上用场了,利用透视投影矩阵自动生成w的值。...前面使用正交投影,它的矩阵不会使得w粉量增加,于是通过透视除法也不会使w分量增加,所以正交投影不会出现近大远小的效果,透视投影会出现近大远小的效果 透视投影例子 在上面矩形Demo的基础上修改上面的正方形的顶点数据

    1.3K30

    OpenGL 学习系列---坐标系统

    在场景中处于视景体内的物体会被投影到近平面上,然后再将近平面上投影出的内容映射到屏幕上。 它所用到的矩阵是正交投影矩阵。 ?...归一化设备坐标是独立于屏幕的,而且它的坐标系的是左手坐标系。 经过透视投影矩阵变换之后,每个坐标的 w 分量都不相同了,这样再经过透视除法操作,就会使得远处的物体看起来变小了。...屏幕空间 有了归一化设备坐标,最后一步就是将坐标投射到屏幕上,这一步是由 OpenGL 来完成的。...到屏幕坐标 ? 的转变。 ? 坐标的矩阵操作 点的坐标可以看作是一个向量, ? 表示,而矩阵 ? 表示。...使用正交投影,再将物体的宽高投影到近平面上,就把屏幕的宽高比例系数考虑进去,这样在转换成归一化设备坐标之前就已经完成了图形的宽高比适应。 这样的话,就需要修改着色器脚本语言,把投影矩阵考虑在内。

    1.3K30

    实验6 OpenGL模型视图变换

    理解OpenGL图形库下视点函数、正交投影函数、透视投影函数。理解三维图形显示与观察代码实例。...(4)视口变换:将投影变换得到的投影图映射到屏幕的视区上,确定最终图像在屏幕上所占的区域。 上述变换在OpenGL中实际上是通过矩阵乘法来实现。...无论是移动、旋转还是缩放大小,都是通过在当前矩阵的基础上乘以一个新的矩阵来达到目的。OpenGL可以在最底层直接操作变换矩阵。...OpenGL设置多种光源,包括环境光、漫反射光、镜面反射光,构建光照模型,来模拟现实中的光照。...;//整体旋转 bool bWire = false;//填充、线框 int wHeight = 0; int wWidth = 0; float place[] = { 0, 0, 5 }; void

    2.1K30

    WebGL 入门-WebGL简介与3D图形学

    WebGL基于OpenGL ES 2.0,OpenGL ES 是 OpenGL 三维图形 API 的子集,针对手机、平板电脑和游戏主机等嵌入式设备而设计。...而在绘制3D图形,除了x轴和y轴,我们还需要一个z轴,用于表示深度,即3D物体距离屏幕的距离。 ? 点、线、面和网格 3D空间内的所有物体都是由点、线及面组成。...模型变换就是利用矩阵对模型的大小、位移、旋转等进行操作。如果你不了解矩阵也无须担心,许多WebGL库都能帮助我们完成相应的操作。...摄像机、视口和投影 我们在Canvas上看到的3D空间并非一个真实的3D空间,而是数学算法将模拟的3D空间投射到2D视口的图像而已。...投影就是将模拟的三维空间内的物体映射到屏幕上生成一个二维图像的过程。投影分为正交投影和透视投影,这也就是摄像机的实现原理。

    2.7K110

    OpenGL ES 投影和坐标

    假设实际的设备分辨率以像素单位是1280*720,这在新的Android设备上是一个常用的分辨率。为了使讨论更加容易,让我们也暂时假定OpenGL占用整个显示屏。...当我们使用正交投影把虚拟坐标变换回归化设备坐标,实际上定义了三维世界内部的一个区域。在这个区域内的所有东西都会显示在屏幕上,而区域外的所有东西都会被剪裁掉。...利用正交投影矩阵改变立方体的大小,以使我们可以在屏幕上看到或多或少的场景。我们也能改变立方体的形状弥补屏幕的宽高比的影响。...在OpenGL里,我们一般使用矩阵作向量投影,如正交或者透视投影,并且也用它们旋转物体,平移物体以及缩放物体。我们把矩阵与每个要变换的向量相乘可实现这些变换。下面就是一个矩阵: ?...5.正交投影 要定义正交投影,我们将使用Android的Matrix类,它在android.opengl包中。这个类有一个称为orthoM()的方法,它可以为我们生成一个正交投影

    1K30

    Android openGl 绘制简单图形的实现示例

    、who(对谁使用)、what(是个什么东西)、why(为什么要这么?).一个H即:how(到底该怎么?)),基本的概念篇主要围绕这几个方面进行分析 1. What? openGl是什么?...系统调用此方法的GLSurfaceView几何形状的变化,包括尺寸变化GLSurfaceView或设备屏幕的取向。例如,当设备从纵向变为横向的系统调用这个方法。...这个GlSurfaceView设置渲染 3. 在GlSurfaceView.renderer中绘制处理显示数据 5....Android OpenGl ES中有两种投影方式:一种是正交投影,一种是透视投影: 正交投影投影物体的带下不会随观察点的远近而发生变化,我们可以使用下面方法来执行正交投影: Matrix.orthoM...到这里,基本的通过OpenGl绘制简单图形就over了,下面我们讲解下如何添加一些交互动作。 添加动作 前面都是简单的动作介绍,使用OpenGl屏幕上绘制对象是使用openGl的基本功。

    2.6K30

    【笔记】《计算机图形学》(7)——观察

    1.相机变换部分 上图左数的两个步骤,对于一个世界坐标系空间中的物体,我们将虚拟摄像机相机旋转和移动到需要的角度上,然后把物体的顶点坐标从世界坐标系转到相机坐标系中 2.投影变换部分 中间的步骤,把那个横着的金字塔形视体压缩下面规范视体的形状...;最后我们将这个投影好的矩形进行移动,移动到适配屏幕左下角坐标系的形式。...计算机中的相机不会发生散焦等情况,因此在正交投影下调整焦距的效果类似于相机在移动 那么最后如何将正交视体变换为规范视体呢,很显然这也是一个缩放和移动仿射矩阵的情况,只是这一次我们无需忽略Z轴的值了,三轴都要进行移动和变换...这个性质在书中有证明的过程,关键是证明出线段上所有的点在透视矩阵的处理后仍然共线,也就是仍然可以一条三维直线方程来描述,在此就不赘述了 前面透视投影的时候我们将z映射下面的值。...手动测试一下我们就会发现在这个映射中,正的z值会被映射到负z上,负的z值被映射到正z上,当我们要渲染的物体都在视体内自然还能正确投影到屏幕上,但是一旦出现了跨越z=0的线段,线段就会有一部分被映射到正负无穷因而被撕裂

    2.1K20

    这交互炸了,Android 仿自如APP裸眼 3D 效果 OpenGL

    本文重点是描述 OpenGL 绘制的思路描述,因此下文仅展示部分核心代码,对具体实现感兴趣的读者可参考文末的链接。 3具体实现 1....OpenGL 中的画布) 创建,初始化Shader小程序,并将图像纹理依次加载到GPU中: public class My3DRenderer implements GLSurfaceView.Renderer...,这里设置全屏 GLES20.glViewport(0, 0, width, height); // 图像和屏幕宽高比基本一致,简化处理,使用一个单位矩阵...Y 轴旋转角度0°,即 degreeY = 0 ,默认设备左右的高度差是 0,这个符合用户的使用习惯,相对易于理解,因此,我们可以定义左右的最大旋转角度,比如 Y ∈ (-45°,45°),超过这两个旋转角度...但当 X 轴旋转角度0°,即 degreeX = 0 ,意味着设备上下的高度差是 0,你可以理解设备是放在水平的桌面上的,这个绝不符合大多数用户的使用习惯,相比之下,设备屏幕平行于人的面部 才更适用大多数场景

    1.5K20

    实验1 OpenGL初识

    /2012/10/16/2726747.html 1.实验目的: 熟悉编程环境;了解光栅图形显示器的特点;了解计算机绘图的特点;利用VC+OpenGL作为开发平台设计程序,以能够在屏幕上生成任意一个像素点本实验的结束...(left,right,bottom,top,near,far):设置投影方式正交投影(平行投影),其取景体积是一个各面均为矩形的六面体; 函数void gluPerspective(fovy,aspect...,zNear,zFar):设置投影方式透视投影,其取景体积是一个截头锥体。...注意:窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口; 6) glutDisplayFunc,设置一个函数,当需要进行画图,这个函数就会被调用。...; 2) glClear(GL_COLOR_BUFFER_BIT):将窗口的背景设置当前清空颜色; 3) glRectf,画一个矩形

    74030

    实验1 OpenGL初识

    void glViewport(left,top,right,bottom):设置屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以像素表示)。...void glOrtho(left,right,bottom,top,near,far):设置投影方式正交投影(平行投影),其取景体积是一个各面均为矩形的六面体。...注意:窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。 glutDisplayFunc,设置一个函数,当需要进行画图,这个函数就会被调用(暂且这样理解)。...在glutDisplayFunc函数中,我们设置了“当需要画图,请调用myDisplay函数”。于是myDisplay函数就用来画图。...glClear(GL_COLOR_BUFFER_BIT):将窗口的背景设置当前清空颜色。 glRectf:画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。

    1K30

    View编程指南

    Windows本身没有任何可见的内容,但应用程序的views提供了一个基本的容器。 views定义了您想要填充某些内容的windows的一部分。...center属性中的值同样会更改为匹配frame矩形的新中心点。 当您设置center属性,frame中的origin值会相应更改。...不过,您可以通过将superview的clipsToBounds属性设置YES来更改此行为。 无论子view是否可视化剪切,触摸事件总是尊重目标view的superview的边界矩形。...对于iPhone应用程序,每个view层次结构通常填充整个屏幕,但对于iPad应用程序,view层次结构可能只填充屏幕的一部分。 ​...当然,如果将opaque属性设置YES,则View必须完全填充完全不透明的内容。 滚动时调整view的绘图行为 滚动可以在很短的时间内产生大量的view更新。

    2.3K20

    OpenGL矩阵变换的数学推导

    说起OpenGL的矩阵变换,我是之前在我们的项目天天P图、布丁相机中开发3D效果才比较深入地研究了其中的原理,当时一开始,也只是知道怎么去这些矩阵,却不知道这些矩阵是怎么得来的,当出现一些莫名其妙的问题...这三个矩阵的计算OpenGL的API都为我们封装好了,我们在实际开发,只需要给API传对应的参数就能得到这些矩阵,下面带大家来看看究竟是怎样计算得到的。...就要靠投影变换,OpenGL提供正交投影和透视投影,正交投影没有近大远小的效果,不管在什么距离上看,都一样大,透视投影则有近大远小的效果,也是符合我们实际生活的一种效果,透视投影应用得比较多,可看下面这张经典图...这些坐标毕竟只是OpenGL坐标系下的坐标,那么最终以什么样的大小呈现在屏幕上呢?...,这里表示TR,其中T表示平稳变换矩阵,R表示旋转变换矩阵。

    6.5K62

    OpenGL矩阵变换的数学推导

    一开始,也只是知道怎么去这些矩阵,却不知道这些矩阵是怎么得来的,当出现一些莫名其妙的问题,如果不了解其中的原理,就不知道如何解决,于是想彻底搞懂其中的原理,还好自己对数学挺有兴趣,于是从头到尾把推导过程研究了一遍...这三个矩阵的计算OpenGL的API都为我们封装好了,我们在实际开发,只需要给API传对应的参数就能得到这些矩阵,下面带大家来看看究竟是怎样计算得到的。...就要靠投影变换,OpenGL提供正交投影和透视投影,正交投影没有近大远小的效果,不管在什么距离上看,都一样大,透视投影则有近大远小的效果,也是符合我们实际生活的一种效果,透视投影应用得比较多,可看下面这张经典图...OpenGL坐标系下的坐标,那么最终以什么样的大小呈现在屏幕上呢?...,这里表示TR,其中T表示平稳变换矩阵,R表示旋转变换矩阵。

    1.1K30

    OpenGL坐标系及坐标转换

    世界坐标系以屏幕中心原点(0, 0, 0),在OpenGL中用来描述场景的坐标。比如使用这个坐标系来描述物体及光源的位置。世界坐标系,是不会被改变的。...局部坐标系:OpenGL还定义了局部坐标系的概念,所谓局部坐标系,也就是坐标系以物体的中心坐标原点,物体的旋转或平移等操作都是围绕局部坐标系进行的,这 ,当物体模型进行旋转或平移等操作,局部坐标系也执行相应的旋转或平移操作...4、冲洗底片,决定二维相片的大小,它相当与OpenGL中的视口变换(Viewport Transformation)(在屏幕窗口内可以定义一个矩形,称为视口(Viewport),视景体投影后的图形就在视口内显示...到点(x,y,z)的连线轴线逆时针旋转物体。...在计算机图形学中,它的定义是将经过几何变换、投影变换和裁剪变换后的物体显示于屏幕窗口内指定的区域内,这个区域通常矩形,称 视口。

    4.2K70
    领券