(炮炮兄:)关于Opengl中鼠标绘直线的问题
我是用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




