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

如何在cl-opengl中配置gl:ortho作为窗口大小

在cl-opengl中配置gl:ortho作为窗口大小,可以按照以下步骤进行:

  1. 导入cl-opengl库:首先,确保已经安装了cl-opengl库,并在代码中导入该库,以便使用其中的函数和常量。
  2. 创建OpenGL上下文:使用cl-opengl提供的函数,创建一个OpenGL上下文,以便在其中进行绘图操作。
  3. 设置视口大小:使用gl:viewport函数,设置视口的大小,即窗口的大小。该函数接受四个参数,分别是左下角的x坐标、左下角的y坐标、视口的宽度和高度。
  4. 设置投影矩阵:使用gl:ortho函数,设置投影矩阵。该函数接受六个参数,分别是左侧裁剪平面的x坐标、右侧裁剪平面的x坐标、底部裁剪平面的y坐标、顶部裁剪平面的y坐标、近裁剪平面的z坐标和远裁剪平面的z坐标。这里可以将左侧裁剪平面和底部裁剪平面设置为0,将右侧裁剪平面和顶部裁剪平面设置为窗口的宽度和高度,将近裁剪平面和远裁剪平面设置为-1和1,以保证绘制的图形能够完整显示在窗口中。
  5. 清空缓冲区:使用gl:clear函数,清空颜色缓冲区和深度缓冲区,以便进行下一次绘制。

完整的代码示例如下:

代码语言:txt
复制
(ql:quickload :cl-opengl)

(defun init ()
  (gl:gl-viewport 0 0 window-width window-height)
  (gl:gl-ortho 0 window-width 0 window-height -1 1)
  (gl:gl-clear-color 0 0 0 1))

(defun display ()
  (gl:gl-clear gl:gl-color-buffer-bit)
  ;; 在这里进行绘制操作
  (gl:gl-flush))

(defun reshape (width height)
  (setq window-width width
        window-height height)
  (init))

(defun main ()
  (glut:glut-init)
  (glut:glut-init-display-mode (logior glut:glut-rgb glut:glut-double glut:glut-depth))
  (glut:glut-init-window-size window-width window-height)
  (glut:glut-create-window "OpenGL Window")
  (init)
  (glut:glut-display-func #'display)
  (glut:glut-reshape-func #'reshape)
  (glut:glut-main-loop))

(defvar window-width 800)
(defvar window-height 600)

(main)

在上述代码中,我们使用了cl-opengl和cl-glut库来进行OpenGL的配置和绘制操作。其中,init函数用于初始化OpenGL的视口和投影矩阵,display函数用于绘制操作,reshape函数用于在窗口大小改变时重新设置视口和投影矩阵,main函数用于初始化窗口和设置回调函数。最后,调用main函数启动程序。

请注意,以上代码示例中没有提及腾讯云相关产品和产品介绍链接地址,因为cl-opengl是一个开源库,与云计算无直接关系。如需了解腾讯云相关产品和产品介绍,请参考腾讯云官方文档或咨询腾讯云官方支持。

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

相关·内容

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

upside-down) 相机 up 方向,即相机头部朝向 ); 裁剪空间 裁剪空间(Clip Space)是用来裁剪观察对象的空间,在一个顶点着色器运行的最后,OpenGL 期望所有的坐标都能落在一个给定的范围内,且任何在这个范围之外的点都应该被裁剪掉...在 C/C++ 可以利用 GLM 构建正交投影矩阵: glm::mat4 Projection = glm::ortho(-ratio, ratio, -1.0f, 1.0f, 0.0f, 100.0f...通过这四个参数我们定义了近平面和远平面的大小,然后第五和第六个参数则定义了近平面和远平面的距离。这个指定的投影矩阵将处于这些 x,y,z 范围之间的坐标转换到标准化设备坐标系。 透视投影 ?...一般表示视口的宽高比,width/height, 它的第一个参数定义了 fov 的值,它表示的是视野(Field of View),并且设置了观察空间的大小。...static_cast(MATH_PI / 180.0f * angleY); // Projection matrix //glm::mat4 Projection = glm::ortho

1.2K20

机械版CG 实验1 像素点的生成

OpenGL基本函数均使用gl作为函数名的前缀,glClearColor();实用函数则使用glu作为函数名的前缀,gluSphere()。...OpenGL基本常量的名字以GL_开头,GL_LINE_LOOP;实用常量的名字以GLU_开头,GLU_FILL。...主要利用了三个函数: 函数void glViewport(left,top,right,bottom):设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以象素表示); 函数void glOrtho...更多信息,以后的实验教程会有讲解介绍; 3) glutInitWindowPosition,设置窗口在屏幕的位置; 4) glutInitWindowSize,设置窗口大小; 5) glutCreateWindow...参数将被作为窗口的标题。注意:窗口被创建后,并不立即显示到屏幕上。

81130

【OpenGL】窗口的创建

我们首先使用 glfwInit 初始化 GLFW,然后我们可以使用 glfwWindowHint 配置 GLFW,这个配置的选项和含义可以在GLFW:窗口指南里面找到非常详细的解释,这个还是当成工具查阅就行...(window)告诉 GLFW 将窗口的内容作为当前线程上的主要内容 GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL",...  用glViewport设置 OpenGL 渲染窗口大小,前两个参数设置窗口左下角的位置,第三个和第四个参数以像素为单位设置渲染窗口的宽度和高度,如果视口尺寸设置为小于 GLFW 尺寸的值;然后,所有...OpenGL 渲染都将显示在一个较小的窗口中 glViewport(0, 0, 800, 600); 当用户调整窗口大小时,视口也应该进行相应的调整,注册一个函数将 GLFWwindow 作为其第一个参数...glfwPollEvents 函数检查是否触发了任何事件(键盘输入或鼠标移动事件),更新窗口状态,并调用相应的函数(我们可以通过回调方法注册) 一旦我们退出渲染循环,我们希望正确地清理/删除所有已分配的

24510

OpenGL ES 2.0 (iOS): 一步从一个小三角开始

3) 配置 OpenGL ES Shader 4) 渲染绘制 b.流程代码化 一、配置渲染环境 1) 配置渲染窗口 [ 继承自 UIView ] 2) 配置渲染上下文...3) 配置帧渲染 4) 配置渲染缓存 5) 帧缓存装载渲染缓存的内容 6) 渲染上下文绑定渲染窗口(图层) 二、修改背景色 三、 初始化数据 四、 配置...渲染绘制 这里要注意的是 清空旧缓存、设置窗口,虽然只是一句代码的问题,但还是很重要的; 核心是学习 glDraw* 绘制 API ; ---- 流程代码化 1.配置渲染环境 配置渲染窗口 [ 继承自...,数据在内存大小(sizeof(...)) data 顶点数据的内存指针 usage 告诉程序怎么去使用这些顶点数据 usage 值 GL_STATIC_DRAW 程序只指定一次内存对象的数据(顶点数据...- 1] size *指顶点数组,一个 attribute 元素变量的坐标分量是多少(:position, 程序提供的就是 {x, y ,z} 点就是 3个坐标分量 ),范围是 [1, 4] *

2.1K40

【Android 音视频开发打怪升级:OpenGL渲染视频画面篇】五、OpenGL FBO数据缓冲区

关于创建纹理的宽高问题,这里说明一下: FBO创建的是一个虚拟的窗口,所以,大小是可以根据自己的需求设置的,可以比实际系统窗口大。...() { mDrawFbo = 1 // 将变换矩阵回复为单位矩阵(将画面拉升到整个窗口大小,设置窗口比例和FBO纹理比例一致,画面刚好可以正常绘制到FBO纹理上)...) } /** * 配置默认显示的窗口 */ private fun configDefViewport() { mDrawFbo = 0...重新配置FBO窗口大小 将OpenGL窗口设置为视频大小,并且将矩阵变化重置(画面拉升到窗口大小),然后清屏。 至于为什么要重新设置窗口大小,前面设置纹理大小的时候已经说过了。...解除FBO绑定,将窗口大小、纹理坐标、矩阵都恢复回原来的配置。 将渲染重新切换到原来的系统窗口上,画面将重新显示到系统窗口上。

2.5K42

实验3.1 直线光栅化(键盘交互版)

3.实验原理: 示范代码原理参见教材直线光栅化一节的DDA算法。下面介绍下OpenGL画线的一些基础知识和glutReshapeFunc()函数。...图A.3 OpenGL几何图元类型 (2)首次打开窗口、移动窗口和改变窗口大小时,窗口系统都将发送一个事件,以通知程序员。...: void Reshape(int w, int h) { glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION...); glLoadIdentity(); gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h); } 在GLUT内部,将给该函数传递两个参数:窗口被移动或修改大小后的宽度和高度...这个作为glutKeyboardFunc函数参数的函数需要有三个形参:第一个表示按下的键的ASCII码,其余两个提供了当键按下时当前的鼠标位置。鼠标位置是相对于当前客户窗口的左上角而言的。

1.2K20

实验2 基本图元光栅化

3.实验原理: 示范代码原理参见教材直线光栅化一节的DDA算法。下面介绍下OpenGL画线的一些基础知识和glutReshapeFunc()函数。...图A.2 OpenGL几何图元类型 (2)首次打开窗口、移动窗口和改变窗口大小时,窗口系统都将发送一个事件,以通知程序员。...: void Reshape(int w, int h) { glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION...); glLoadIdentity(); gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h); } 在GLUT内部,将给该函数传递两个参数:窗口被移动或修改大小后的宽度和高度...这个作为glutKeyboardFunc函数参数的函数需要有三个形参:第一个表示按下的键的ASCII码,其余两个提供了当键按下时当前的鼠标位置。鼠标位置是相对于当前客户窗口的左上角而言的。

1K20

opengl视图矩阵_心形线四个图像

在学习之前,我们要开始配置Opengl,我这里使用的是VS2010,语言是C++。 Opengl是C++的一个拓展包,用来进行计算机图形方面的编程。...配置好环境,就开始学习如何使用Opengl编程。 第一步就是要导入glut.h头文件。...下一步调用glColor*函数是用来指定下面我们绘制的点、线、面是什么颜色,函数里有三个参数,分别代表 red、green、blue的强度值,大小从0.0-1.0。...glutInitDisplayMode,里面有三个参数,分别为 GLUT_SINGLE(单缓冲), GLUT_RGB(RGBA颜色模式), GLUT_DEPTH(带有深度缓冲区) 而后我们定义窗口大小...发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

37920

透视投影矩阵推导

在OpenGL,传给 projectionMatrix 的值: gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0...但场景的透视投影真实感较好,因为在透视显示较远的对象减小了尺寸。 (本文只讨论透视投影) 正投影 有些图形软件包使用单位立方体作为规范化观察体,其x、y和z坐标规范在0到1之间。...将该平行管道映射到规范化观察体 有近裁剪平面到投影中心或投影参考点的距离 zNear 和垂直方向上的视场角 fovy ,故可求得裁剪窗口的宽 W W W 和高 H H H: H 2 = z N...,有矩阵 M p e r s → o r t h o M_{pers\rightarrow ortho} Mpers→ortho​ 将该平行管道映射到规范化观察体(与平行投影的规范化变换相同),则有矩阵...发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

1.1K20

RenderDemo(1):用 OpenGL 画一个三角形丨音视频工程示例

EGL 提供如下机制: 与设备的原生窗口系统通信; 查询绘图表面的可用类型和配置; 创建绘图表面; 在 OpenGL ES 和其他图形渲染 API 之间同步渲染; 管理纹理贴图等渲染资源。...FBO 本身不能用于渲染,只有绑定了纹理(Texture)或者渲染缓冲区(RBO)等作为附件之后才能作为渲染目标。...GL_RENDERBUFFER, _renderBuffer); // 5、清理窗口颜色,并设置渲染窗口。...PositionDimension, // 指顶点数组,一个 attribute 元素变量的坐标分量是多少(:position, 程序提供的就是 {x, y, z} 点就是 3 个坐标分量)。...// 把 Renderbuffer 的内容显示到窗口系统 (CAEAGLLayer)

1.1K31

讲解pyqt5 opengl demo

在 __init__ 方法,我们创建了一个 QOpenGLWindow 实例,并将其设置为中心窗口部件。最后,我们设置了窗口的标题为 "PyQt5 OpenGL Demo"。...当用户点击鼠标左键时,在OpenGL窗口中绘制一个红色的点,并更新显示。 运行这段代码后,将会弹出一个窗口。当你在窗口内点击鼠标左键时,会在点击位置绘制一个红色的点。...这个示例演示了如何在OpenGL窗口中绘制2D图形,并且响应鼠标事件实现用户交互。你可以根据实际需要进一步扩展和定制功能,添加更多的绘制元素和功能。...希望这个示例对你理解如何在实际应用中使用PyQt5和OpenGL有所帮助。PyQt5和OpenGL结合可以实现更复杂的图形和动画效果,让你的应用更加生动和互动。...下面是对PyQt5的一些详细介绍:跨平台支持:PyQt5基于Qt库开发,因此可以实现跨平台支持,可以在不同操作系统(Windows、MacOS、Linux等)上运行。

35410

Qt5 和 OpenCV4 计算机视觉项目:6~9

但是它们都不应该小于训练窗口大小。 通常,训练窗口大小是我们感兴趣的对象的平均大小,即禁止进入标志的图像。 这是因为将从这些背景图像获取具有训练窗口大小作为其维度的负样本。...因此,在这里,我们使用核心配置文件。 设置提示后,我们声明并创建窗口。...我们在初始化函数要做的最后一件事是调整主窗口大小以适合图像大小: ((QMainWindow*)this->parent())->resize(img.width(), img.height...在主函数,我们使用5作为大小,计算出核正方形像素的纹理坐标,拾取颜色,然后将它们汇总为两级嵌套for循环。 循环后,我们计算平均值并将其分配给输出变量。...本章所述,我们可以参考与该函数有关的正式文件。 如果文档规定它支持原地操作,则支持,否则,不支持。 如何将热键添加到我们作为插件添加的每个操作

3.1K30

Python实现3D建模工具(上)

关于GLUT 在本课程,GLUT负责创建窗口与注册用户接口的回调函数(处理键盘输入、鼠标输入等),如果需要一个功能更全面的窗口管理库,推荐使用GTK或者QT。 3....转换矩阵最终会存在GL_PROJECTION,在本项目中,不需要了解这方面的细节内容。...目前只实现了窗口的创建与OpenGL的初始化。运行它,你会看见一个绘制背景的窗口。...(CALL_LIST_NUMBER, GL_COMPILE)与glEndList()来标识一段代码的开始与结束,这段代码作为一个新的函数列表与一个数字关联起来,之后希望执行相同的操作时只需调用glCallList...我们在node.py创建HierarchicalNode类,这是一个包含子节点的的节点,它将子节点存储在child_nodes,同时作为Node的子类,它也必须实现render_self, 它的render_self

5900

38.opengl-字体渲染

FreeType有以下优点: 1)跨平台 2)能加载TrueType字体,TrueType不是基于像素定义的,而是通过数学公式(曲线)来定义,类似矢量图像,所以方便渲染不同大小的字形,有更好的适配能力...文本轮廓 关闭混合,可以看到每个字符占的区域大小是不一样的 2.1 先看看着shader的实现 顶点着色器:很简单,有个小技巧,一个vec4 xy存字符position,zw存纹理,节省内存 #version...开启混合模式,当前窗口的颜色缓冲会把字符的背景镂空的部分覆盖掉 #version 330 core in vec2 TexCoords; out vec4 color; uniform sampler2D..._2D, 0); } 三、补充:mac freetype安装配置,不复杂,简单说明 如果是Android/iOS,需通过freetype源码编译对应的平台库,前端直接引用freetype.js更方便 1...Xcode环境变量配置 2.1 xcode->preference->locations->custom paths ? 2.2 Search Paths 增加Header和 Library ?

1.6K30

26.opengl高级光照-阴影映射

viewport设置的要比真实的窗口大,因为加上阴影可能在真实窗口外,做个兼容,以大包小。...参考上面右图,第二次绘制:计算每一个像素时,将该像素坐标转换到上一步的相机坐标,对比像素z坐标和缓存的z坐标,如果小,则说明被遮挡了 这就是阴影映射的原理。 2....帧缓冲切回到默认的0,即切换到默认窗口缓冲,将之前生成的深度缓冲纹理作为图片绘制到窗口上 涉及的代码不少,其实逻辑不复杂,参考原文和代码: learnopengl-阴影映射 learnopengl-...= gl_FragCoord.z; } 第二次绘制,将深度缓存绘制到默认窗口上 debug_quad.vs #version 330 core layout (location = 0) in vec3...lightSpaceMatrix; float near_plane = 1.0f, far_plane = 7.5f; lightProjection = glm::ortho

94220

FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放

SL_SPEAKER_FRONT_RIGHT,// channel mask SL_BYTEORDER_LITTLEENDIAN // endianness 小端序 }; 从上面代码可以看出...,音频驱动接收的 PCM 数据的采样率是 44.1kHz,双通道,采样大小 2 字节。...渲染音频数据 OpenGLES 全称 OpenGL for Embedded Systems ,是三维图形应用程序接口 OpenGL 的子集,本质上是一个跨编程语言、跨平台的编程接口规范,主要应用于嵌入式设备,手机...[根据音频数据的值去构建条状图网格] 接下来就是代码实现过程,首先在 Java 层创建 GLSurfaceView 的 Render ,FFMediaPlayer 增加对应 Native 函数: private...program fail"); } //设置 MVP Matrix 变换矩阵 // Projection matrix glm::mat4 Projection = glm::ortho

1K30
领券