使用鼠标在 openGL 中移动绘图

2024-02-12

我试图在按住鼠标左键的同时在 openGL 中移动图像。 我不想拖动物体,只是移动整个图片。它是分形的二维绘图,我被告知我可以使用 gluortho2d,但我找不到任何信息或类似的尝试如何做到这一点。 我假设类似的事情

void mouse_callback_func(int button, int state, int x, int y)
{
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
    gluOrtho2D(x-250.0, x+250.0, y-250.0,y+250.);
glutPostRedisplay();
}  

对于 500x500 窗口,但它不起作用。当我点击左键时,窗口变成空白。 有任何想法吗?


gluOrtho2D修改当前矩阵。它的设计目的是与glMatrixMode(GL_PROJECTION), 例如:

glMatrixMode(GL_PROJECTION); //start editing the projection matrix
glLoadIdentity(); //remove current projection
gluOrtho2D(...); //create new one
glMatrixMode(GL_MODELVIEW); //back to editing the modelview matrix

设置相机概念可能更简单......

float cameraX, cameraY;
int lastMouseX, lastMouseY;

void mouse_callback_func(int button, int state, int x, int y)
{
    int dx = x - lastMouseX;
    int dy = y - lastMouseY;
    const float speed = 0.1f;
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
    {
        cameraX += dx * speed; //or -=, depending on which direction feels more natural to you
        cameraY -= dy * speed; //-= as mouse origin is top left, so +y is moving down
        glutPostRedisplay();
    }
    lastMouseX = x;
    lastMouseX = y;
}

void display()
{
    glLoadIdentity(); //remove transforms from previous display() call
    glTranslatef(-cameraX, -cameraY, 0.0f); //move objects negative = move camera positive
    ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用鼠标在 openGL 中移动绘图 的相关文章

  • glut 库中缺少 glutInitContextVersion()

    我正在练习一些 opengl 代码 但是当我想通过以下方式强制 opengl 上下文使用特定版本的 opengl 时glutInitContextVersion 它编译过程失败并给出以下消息 使用未声明的标识符 glutInitContex
  • 无法在 WSL2 上运行 OpenGL

    我尝试在 WSL2 上运行 OpenGL 代码 但在尝试运行可执行文件时出现以下错误 GLFW error 65543 GLX Failed to create context GLXBadFBConfig Unable to create
  • 在 GLUT 中使用鼠标滚轮

    我想在 OpenGL GLUT 程序中使用鼠标滚轮来放大和缩小场景 我怎么做 Freeglut 的 glutMouseWheelFunc 回调与版本相关 并且在 X 中不可靠 使用标准鼠标功能并测试按钮 3 和 4 OpenGlut 对 g
  • 为什么拥有单独的投影矩阵但结合模型和视图矩阵会有好处?

    当您学习 3D 编程时 您会被告知用 3 个变换矩阵来思考是最简单的 模型矩阵 该矩阵对于每个模型都是独立的 它根据需要旋转和缩放对象 最后将其移动到 3D 世界中的最终位置 模型矩阵将模型坐标转换为世界坐标 视图矩阵 对于大量对象 如果不
  • 将带有 glut 的点击坐标添加到向量链接列表中

    我想创建一个向量链接列表 并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中 这些是我写的结构 typedef struct vector int x int y Vector typedef struct VectorLis
  • GL_CULL_FACE使所有对象消失

    我正在尝试在 openGL3 3 中创建一些简单的多边形 我有两种类型的对象 具有以下属性 对象 1 10 个顶点 按顺序在下面列出 存储在GL ARRAY BUFFER并使用GL TRIANGLE FAN v x y z w v 0 0
  • 创建面向鼠标和触摸的 WPF 应用程序的最佳实践[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 二维数组的 MPI 数据类型

    我需要将一个整数数组的数组 基本上是一个二维数组 从根传递给所有处理器 我在 C 程序中使用 MPI 如何声明二维数组的 MPI 数据类型以及如何发送消息 我应该使用广播还是分散 你需要使用播送 http www netlib org ut
  • 如何仅剪切剪切平面的交集(而不是并集)?

    在 OpenGL JOGL 中 当使用多个剪切平面时 似乎会应用所有剪切平面的并集 我想要的是路口要应用的所有剪裁平面 这可能吗 请参阅下面的简化二维示例 Edit An example of clipping by vertex shad
  • OpenGL 3.1 中已弃用 glLineStipple

    glLineStipple在最新的 OpenGL API 中已被弃用 它被替换成什么 如果不更换 怎样才能达到类似的效果呢 我当然不想使用兼容性配置文件 抱歉 它还没有被任何东西取代 我想到的第一个模拟它的想法是几何着色器 您向几何着色器提
  • gldrawarrays 不绘制任何东西

    我正在尝试用 VBO 绘制一个三角形 我在窗口上没有看到任何像素 我也没有看到任何 GL ERROR 这是我尝试运行的代码 include
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 简单模式7公式/例子?

    我最近发现了利用 SNES 模式 7 的伪 3D 效果 并想尝试在 Godot 引擎中复制它 我尝试在网上查找 但所有内容要么以我无法理解的方式解释 要么以我不知道的编程语言解释 我还需要学习如何旋转该区域 并将精灵作为角色或敌人放入 但我
  • OpenGL,如何独立旋转对象?

    到目前为止我的代码 void display void glClear GL COLOR BUFFER BIT GL DEPTH BUFFER BIT Clear Screen And Depth Buffer glLoadIdentity
  • 纹理的内部格式

    看下面的OpenGL函数 void glTexImage2D GLenum target GLint level GLint internalFormat GLsizei width GLsizei height GLint border
  • PhpStorm IDE:Ubuntu 18 LTS 中光标卡在文本选择(突出显示)模式

    我正在使用 PhpStorm 来处理 Laravel 项目 但是 鼠标卡在文本突出显示模式下并且右键单击在 IDE 上不起作用 关闭IDE并重新启动并不能解决问题 我试图在网上寻找答案但没有成功 对于那些像我一样苦苦挣扎的人 我有一个解决方
  • 如何使用现代 OpenGL 在透视投影中绘制对象的正交轴? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有带有透视投影的 3D 场景 我还可以选择场景中的一个对象 我需要为选定的对象绘制轴 问题是轴不会在透视投影中保存其大小 如果物体远离眼睛
  • LibGDX纹理混合与OpenGL混合功能

    在 libGdx 中 我试图创建一个成形纹理 采用完全可见的矩形纹理并将其遮罩以获得成形纹理 如下所示 在这里我在矩形上测试它 但我想在任何形状上使用它 我调查过本教程 http www learnopengles com tag addi
  • glColor4f() - alpha 值的效果

    我正在使用 glColor4f 令人惊讶的是 更改 alpha 即第四个参数 不会导致透明度发生任何变化 代码段是 const GLfloat squareVertices 0 5 0 5 0 0 0 5 0 5 0 0 0 5 0 5 0
  • GLSL 中统一浮点行为和常量浮点行为的不同

    我正在尝试在 GLSL 中实现模拟双精度 并且观察到一种奇怪的行为差异 导致 GLSL 中出现细微的浮点错误 考虑以下片段着色器 写入 4 浮点纹理以打印输出 layout location 0 out vec4 Output unifor

随机推荐

  • 为什么 64 位比 32 位更快?

    我一直在进行一些性能测试 主要是为了了解迭代器和简单 for 循环之间的区别 作为其中的一部分 我创建了一组简单的测试 然后对结果感到非常惊讶 对于某些方法 64 位比 32 位快近 10 倍 我正在寻找的是对为什么会发生这种情况的一些解释
  • 通过 Oracle SQL 查询拆分行中列的逗号分隔值

    我有一个如下表 ID NAME 1001 A B C 1002 D E F 1003 C E G 我希望这些值显示为 ID NAME 1001 A 1001 B 1001 C 1002 D 1002 E 1002 F 1003 C 1003
  • 为什么最大堆栈深度不断变化?

    对于以下代码 最后的输出 最大堆栈深度不断变化 include
  • Facebook 新的用于图形 API 的 PHP SDK - 多查询

    我对查询参数值应该是什么样子一筹莫展 因此 据我所知 要在图形 API 库中提交多重查询 以下是执行它的代码方法 param array method gt fql multiquery queries gt multiQuery call
  • Amazon Elastic Block Storage (EBS) 和 Microsoft Azure 驱动器之间的差异

    我一直在考虑使用 Amazon EC2 或 Microsoft Azure 来托管新项目 并计划使用其中之一亚马逊EBS http aws amazon com ebs or 微软Azure驱动器 http www microsoft co
  • 组合框更改其他组合框的值

    我的表单上有两个组合框 每个都有值 Yes 和 No 我想要的是当一个改变时另一个得到相反的结果 如果第一个是 Yes 另一个是 No 我需要用 Javascript 来做 我看到这个问题如何使用 JavaScript 更改组合框中的 选定
  • C++ 从 const int* 到 int* 的转换会产生意想不到的结果[重复]

    这个问题在这里已经有答案了 在c 中 我们知道我们不能将const int 转换为int 但我有一个代码片段 可以将 const int 转换为 int 我是 C 的初学者 我在 google 上搜索了这个 但我刚刚得到了提到 const
  • Angular 应用程序中的空注释

    是否有任何配置设置可以删除这些空注释和空格 我的构建命令是ng build environment prod progress false target productiontsconfig 是 compileOnSave false co
  • Mysql 在键上连接两个表

    我正在尝试连接两个表 但似乎遇到问题 我正在寻找的输出是有主题的行数 SELECT FROM education AS a JOIN keys2 AS b USING List Idsubjek WHERE List Idsubjek IN
  • 在 C++ 中使用类似 C 的初始化或构造函数初始化是否被认为更好? [复制]

    这个问题在这里已经有答案了 可能的重复 什么时候应该使用直接初始化 什么时候应该使用复制初始化 https stackoverflow com questions 4293596 when should you use direct ini
  • Django Memcached 缓存消失

    我的 Django 应用程序配置了 memcached 一切都运行顺利 我试图随着时间的推移填充缓存 并在新数据从外部 API 传入时添加到缓存中 这是我正在进行的事情的要点 主视图 api query more results apiQu
  • WPF C# 设计问题中绘制图表

    一个月前 我有一个项目 我使用 Windows 窗体在应用程序中绘制了股票图表 我通过创建一个可以拉伸到窗口尺寸的位图来做到这一点 这将允许我的图表随窗口调整大小 我现在正在使用 WPF 扩展该项目 我一直在尝试为该项目进行设计 但我似乎不
  • C/C++ 中的指针帮助 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想了解 C 和 C 中的指针 它如
  • 如何在 VueJS 中测试全局事件总线

    In this article https medium com vuejobs create a global event bus in vue js 838a5d9ab03a解释了如何在 VueJS 中使用全局事件总线 它描述了使用在单
  • 从命令提示符创建 apk 文件

    我想从命令提示符创建 apk 文件 为此我遵循这个链接 http developer android com guide developing building building cmdline html 并尝试用 ant 完成它 但它给了
  • Python while循环输出到List

    我编写了一个简单的代码 它将 wav 文件作为输入 然后查找频率并返回相应的音符 但是 为了添加更多功能 我需要输出为列表 我所拥有的简化伪代码如下所示 while some condition true compute various t
  • 是否可以使用 sha1 和 sha256 证书对安装程序和卸载程序进行双重签名?

    Inno Setup 中是否可以同时使用 sha1 和 sha256 对卸载程序和安装程序进行签名 我知道它是可以签署 https stackoverflow com a 30671378 1329977通过命令工具具有两个证书的可执行文件
  • 如何解决 Gradle 构建中的存储库证书错误

    我安装了最新版本的android studio 我已经安装了jdk 8 当我打开 android studio 时 出现以下错误 Unable to resolve dependency for app debugUnitTest comp
  • 动画背景java游戏

    我正在编写一个类似于小行星的游戏 但我不明白如何在后台生成小行星 现在我在主类中生成了一个小行星 但我想为小行星创建一个类 我该怎么做 主班 public void paintComponent Graphics g super paint
  • 使用鼠标在 openGL 中移动绘图

    我试图在按住鼠标左键的同时在 openGL 中移动图像 我不想拖动物体 只是移动整个图片 它是分形的二维绘图 我被告知我可以使用 gluortho2d 但我找不到任何信息或类似的尝试如何做到这一点 我假设类似的事情 void mouse c