我的OpenGL学习记录1
来源:互联网 发布:程序修改分层网络协议 编辑:程序博客网 时间:2024/06/03 02:17
刚刚开始自学OpenGL,记录一点学习过程遇到的问题和收获,帮助自己也帮助别人。
首先,这里有一点OpenGL的安装方法和入门的资料:
http://download.csdn.net/detail/family5love/4308943
照着上面的方法可以很容易地将OpenGL安装到Visual Stdio 2005中,照着资料里面的一点代码运行一下,一个静态的矩形就绘制出来了。
学习教材为OpenGL编程基础-第三版].Edward.Angel著:
http://download.csdn.net/detail/family5love/4327363
今天学习3.7节的鼠标操作自己写了个鼠标绘制矩形的程序,程序中有个BUG,第一下点击鼠标就会绘制矩形,想了好久不知问题出在哪里。程序源代码如下如下:
//2012 05 24
//问题:为什么第一下点击鼠标就会绘制矩形?
#include <windows.h>
#include <gl/gl.h>
#include <gl/glut.h>
GLfloat x1,y1,x2,y2;
float ww,hh;
int num = 0;//记录已点击鼠标左键次数
GLfloat loc[100][2] = {0};//坐标记录数组
//显示回调函数
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
for(int i=0; i<=num; i+=2)
{
glColor3f(0.0,1.0,1.0);
glBegin(GL_POLYGON);
glVertex2f(loc[i][0], loc[i][1]);
glVertex2f(loc[i][0], loc[i+1][1]);
glVertex2f(loc[i+1][0], loc[i+1][1]);
glVertex2f(loc[i+1][0], loc[i][1]);
glEnd();
}
//glutSwapBuffers();
glFlush();
}
//空闲回调函数
void myIdle(void)
{
glutPostRedisplay();
}
//鼠标响应回调函数
void myMouse(int button, int state, int x, int y)
{
//记录鼠标左键当前坐标
if(state == GLUT_DOWN && button == GLUT_LEFT_BUTTON)
{
loc[num][0] = x;
loc[num][1] = hh - y;
num++;
}
}
//初始化函数
void init(void)
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glColor3f(0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1,1,-1,1);
}
//窗口重构函数
void myReshape(int w, int h)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,(GLfloat)w,0.0,(GLfloat)h);
glMatrixMode(GL_MODELVIEW);
glViewport(0,0,w,h);
ww = w;
hh = h;
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(200,200);
glutInitWindowPosition(500,500);
glutCreateWindow("Mouse");
init();
glutMouseFunc(myMouse);
glutReshapeFunc(myReshape);
glutDisplayFunc(myDisplay);
glutIdleFunc(myIdle);
glutMainLoop();
}
- 我的OpenGL学习记录1
- OpenGL学习记录1
- OpenGL学习记录(1)
- 我的Opengl学习
- 我的学习记录
- 我的学习记录
- 我的学习记录
- OpenGL学习问题记录
- OpenGL学习记录2
- OpenGL学习记录3
- OpenGL学习记录4
- OpenGL学习记录5
- OpenGL学习记录6
- OpenGL学习记录7
- OpenGL入门学习记录
- 我的OpenGL学习笔记一
- 我的OpenGL学习笔记二
- 记录生活,记录学习----我的2016
- 1001:Sum Problem
- Java反射机制-学习笔记2
- 【转】谈flex切换状态
- IOS成长之路-添加数据库文件到应用程序路径中
- [FaultEvent fault=[RPC Fault faultString="发送失败" faultCode="Client.Error.MessageSend
- 我的OpenGL学习记录1
- Google Chrome浏览器JS兼容问题(一)
- Oracle之delete与truncate区别?
- SQL 生成随机数
- 重启电脑系统命令
- IOS成长之路-数据库的数据添加和查询
- Oracle模糊查询(大小写判断)
- 关于iPhone/iPad全屏截图与区域截图的几种方法总结
- linux中LCD设备驱动(4)——基于s3c6410平台