CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  图形处理/算法

(炮炮兄:)关于Opengl中鼠标绘直线的问题

楼主stormqin(legendlife)2003-06-01 19:36:34 在 VC/MFC / 图形处理/算法 提问

我是用CArray<POINT,   POINT>   PointArray定义的m_lineArray。  
   
  但我不知在我定义的Drawline()函数中,  
  glBegin(GL_LINES);  
        ....  
  glEnd();中如何得到鼠标传来的点。  
   
  而Drawline()又是在OnDraw()中被调用,好象程序根本没有处理鼠标的消息,而是直接  
  画线。  
  问题点数:0、回复次数:12Top

1 楼alphapaopao(炮炮)回复于 2003-06-02 16:09:19 得分 0

当然啦   ,   鼠标消息应该在   OnMouseMove   里面处理,记录鼠标点。在Draw的时候应该利用已经存储的鼠标点进行绘制。  
   
  你可以先画一条简单的直线,能绘制正确之后再绘制鼠标点,这样能够准确定位错误。  
  比如画这样一条线   (0,0,0),   (1,1,1)  
   
  另外,你的程序应该作了OpenGL的初始化工作了吧?Top

2 楼jijuzheng(极品飞车)(我爱瓜瓜)回复于 2003-06-02 18:04:46 得分 0

问题点数:     0    
   
  楼主太吝啬,叫人家来还不给分,太打击回答问题的积极性Top

3 楼alphapaopao(炮炮)回复于 2003-06-02 18:30:50 得分 0

呵呵Top

4 楼stormqin(legendlife)回复于 2003-06-02 19:22:38 得分 0

不是我吝啬,我为这个问题已经“精尽人亡”了,前面发了好几个贴,我也可以随时加分  
   
  程序的初始化肯定是做了,而且(0,0)和(1,1)之间的线也能画出来(但是好象(1,1)这一点在视口之外)。  
  如果把问题再简化,只用鼠标画一个点的话:  
  pt.x   =   point.x   -   rect.right/2;  
  pt.y   =   -(point.y   -   rect.bottom/2);  
  这样得到的点还是显示不出来。我想还是坐标转换的问题  
   
   
  Top

5 楼alphapaopao(炮炮)回复于 2003-06-02 23:12:14 得分 0

你可以观察一下,这样计算之后的pt,   坐标是多少,看看pt.x,pt.y,  
  是不是落在可显示的范围内。Top

6 楼stormqin(legendlife)回复于 2003-06-03 08:18:10 得分 0

缺省方式下,opengl能显示的是-1.0<=x<=1.0f,-1.0<=y<=1.0,像上面那样定坐标肯定是有问题的,如果最后的坐标这样:  
   
  pt.x   =   (point.x   -   rect.right/2)/(rect.right/2);  
  pt.y   =   -(point.y   -   rect.bottom/2)/(rect.bottom/2);  
  那么点显示出来了,可跟鼠标的位置相差比较远。Top

7 楼gexy()回复于 2003-06-03 08:34:05 得分 0

象上面那样差的远,是因为都是整数相除,是不对的,顺便说一下你的pt.x,pt.y的类型都应该是float吧,把后面的变成float   数相除Top

8 楼stormqin(legendlife)回复于 2003-06-03 09:32:08 得分 0

现在差不多对了,谢谢。  
   
  但在y方向上还有1mm的误差Top

9 楼stormqin(legendlife)回复于 2003-06-03 10:01:00 得分 0

如果这样定义:  
  float   x   =   (point.x   -   rect.right/2.0)/(rect.right/2.0);  
  float   y   =   -(point.y   -   rect.bottom/2.0)/(rect.bottom/2.0);  
  点可以捕捉到,但怎么把它放到CPoint中呢?  
   
  Top

10 楼gexy()回复于 2003-06-03 11:44:19 得分 0

呵呵,浮点数怎么能向CPoint里面放,自己另作一个point的数据结构阿Top

11 楼alphapaopao(炮炮)回复于 2003-06-03 12:48:35 得分 0

struct   VERTEX{  
  double   x,y;  
  };  
  Top

12 楼stormqin(legendlife)回复于 2003-06-03 15:14:25 得分 0

我想到了一个方法:  
  OnLButtomUp()里面添加一个m_pointArray.Add(point),把当前点传给Drawpoint()函数,然后在OnLButtomUp()和Drawpoint()里面同时处理坐标变换;  
   
  OnLButtomUp()负责显示当前点  
  Drawpoint()显示m_pointArray里的点......  
   
  Top

相关问题

  • 如何实现鼠标拖拽直线和选取直线
  • 怎么使用鼠标在窗体上画直线?
  • 画出一条直线后,怎样实现用鼠标选中这条直线并且可以拖动它。
  • 如何拖拉鼠标画直线,同时可以在鼠标处显示当前坐标的tip?
  • 怎样在拖动鼠标的时候动态的画出直线?
  • 想实现通过鼠标拖动直线,有什么简便方法?
  • 急问怎么在面板上绘制的直线上添加鼠标响应
  • 在视图中用鼠标拖动直线控件的原理是什么?
  • 在视图中用鼠标拖动直线控件的原理是什么?
  • 如何动态画一条直线?鼠标的down是线的起始点,up是线的终点。

关键词

  • 鼠标
  • 绘制
  • 问题
  • pt
  • 程序
  • 显示
  • 应该

得分解答快速导航

  • 帖主:stormqin

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo