opengl中如何平移图纸

colorfulcode 2016-11-24 10:26:33
加精
一个文件中有若干个图形,程序加载文件后需要将这个图形显示出来。现在的问题是当图纸较大时,一屏是不能完整显示的,那么就需要能用鼠标进行拖拽。

但是问题就卡在用opengl的哪个接口能实现将外部指定的特定范围显示在视口中。
虽然目前通过鼠标滚轮对图纸进行来回的缩放也能实现类似效果,但毕竟这个方法不好。

之前从没接触过opengl,临时接手个任务,故而前来请教
...全文
58124 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sasorie 2017-04-13
  • 打赏
  • 举报
回复
虽然看不太懂,但还是很有帮助的
github_38177334 2017-04-04
  • 打赏
  • 举报
回复
喜欢2楼的代码!
赵4老师 2017-04-01
  • 打赏
  • 举报
回复
收藏2楼代码待用。
qq_38150617 2017-04-01
  • 打赏
  • 举报
回复
嗯不错参考了!~~~
victor_woo 2016-12-08
  • 打赏
  • 举报
回复
你绘制的图形是有基准点的 1: 图形不动,视点动 2:视点不动,移动图形
shiter 2016-11-29
  • 打赏
  • 举报
回复

/ 目标:测试OpenGL窗口视口坐标  
// 结果:glutInitWindowSize(640, 480); 指定的是windows概念中窗口(看得见,可移动,最大化,最小化等操作)大小,以像素为单位  
//       OpenGL中的窗口和视口是逻辑上的概念,其中窗口范围是画图时指定顶点坐标使用的坐标,而视口范围是将windows中概念中实际  
//       窗口映射成的范围  
  
#define GLUT_DISABLE_ATEXIT_HACK  
  
#include <gl/glut.h>  
  
void myInit(void)  
{  
    glClearColor(1.0, 1.0, 1.0, 0.0);     // 设置背景色为白色  
    glColor3f(0.0f, 0.0f, 0.0f);          // 绘图颜色为黑色  
    glPointSize(4.0);                     // 设置点大小为4x4像素  
  
    // 1. 如果不做任何处理,OpenGL默认坐标范围为 x=[-1,1]  y=[-1,1]  
  
    // 2. 只指定世界窗口坐标范围,默认视口坐标范围与世界窗口一样,按世界窗口绘图即可  
    /*glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(0.0, 500, 0.0, 100);*/  
  
    // 3. 同时指定世界窗口坐标和视口范围,会发生从世界窗口坐标转换为视口坐标,按世界窗口绘图即可  
    glMatrixMode(GL_PROJECTION);  
    glLoadIdentity();  
    gluOrtho2D(-2, 2, -1, 1);  
    glViewport(73, -250, 11, 100);  
}  
  
// 重绘函数  
void myDisplay(void)  
{  
    glClear(GL_COLOR_BUFFER_BIT);     // 清屏  
  
    // 1. 测试不做任何处理时,窗口与视口范围相同  
    //    OpenGL默认坐标范围为 x=[-1,1]  y=[-1,1]  
    /*glBegin(GL_QUADS); 
        glVertex2f(-0.5,  0.5); 
        glVertex2f( 0.5,  0.5); 
        glVertex2f( 0.5, -0.5); 
        glVertex2f(-0.5, -0.5); 
    glEnd();*/  
      
    // 2. 测试只指定世界窗口坐标范围,窗口与视口范围  
    /*glBegin(GL_LINES); 
        glVertex2f(0, 0); 
        glVertex2f(500, 100); 
    glEnd();*/  
  
    // 3. 测试同时指定世界窗口坐标和视口范围  
    glBegin(GL_LINES);  
        glVertex2f(-2, -1);  
        glVertex2f(2, 1);  
    glEnd();  
  
    glFlush();  
}  
  
void main(int argc, char *argv[])  
{  
    glutInit(&argc, argv);                         // 初始化glut工具箱  
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);   // 设置显示模式  
    glutInitWindowSize(640, 480);                  // 设置窗口大小  
    glutInitWindowPosition(100, 150);              // 设置窗口在屏幕上的位置  
    glutCreateWindow("my first attempt");          // 创建窗口  
    glutDisplayFunc(myDisplay);                    // 注册重绘函数  
    myInit();  
    glutMainLoop();                                // 进入主循环  
}  



schlafenhamster 2016-11-25
  • 打赏
  • 举报
回复
glViewport(0, 0, cx, cy); 改变这2个 0

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧