OpenGL小问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 12:41:11
// goldQuad.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<windows.h>
#include<gl/Gl.h>
#include<gl/glu.h>
#include<gl/glut.h>
#include<time.h>

const int screenWidth=640,screenHeight=480;
const double PC=1.618033989;
double width;
bool selected=false;
int spin=0;
GLint numcount=0;

struct GLdoublePoint{
double x,y;
};

GLdoublePoint T[4];

void myInit(void){

glClearColor(1.0,1.0,1.0,0.0);
glPointSize(3.0);
glColor3f(0.0f,0.0f,0.0f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,(GLdouble)screenWidth,0.0,(GLdouble)screenHeight);
}

void drawQuad(void){
glBegin(GL_LINE_LOOP);
glVertex2d(T[0].x,T[0].y);
glVertex2d(T[2].x,T[2].y);
glVertex2d(T[1].x,T[1].y);

glVertex2d(T[3].x,T[3].y);
glEnd();
glFlush();

你鼠标拾取是不对的,不能把屏幕坐标看做3D坐标,你要对屏幕坐标进行转换!你可以将
glVertex2d(T[0].x,T[0].y);
glVertex2d(T[2].x,T[2].y);
glVertex2d(T[1].x,T[1].y);
glVertex2d(T[3].x,T[3].y);
变成
glVertex2d(T[0].x/10,T[0].y/10);
glVertex2d(T[2].x/10,T[2].y/10);
glVertex2d(T[1].x/10,T[1].y/10);
glVertex2d(T[3].x/10,T[3].y/10);
这样你就能在屏幕的左下角看见一段线段,可以证明你得拾取是不正确的;你程序本身存在很大问题,在第二次点鼠标的时候必须要点在第一次点鼠标位置的左边,否则你的goldQuad函数会出现益处错误,不知道你想完成什么功能操作,可能你要完成的功能不用你现在这么复杂的算法就能完成

是不是出错了,用debug跑一下试试