OpenGL【1】视图类与鼠标坐标操作
来源:互联网 发布:西门子300plc编程实例 编辑:程序博客网 时间:2024/06/03 22:52
glViewport (0, 0,
在自定义的mydisplay函数里面任意时刻开始编写。定义窗口位置数据从左下角开始(0,0),右上角结束
(参考链接glviewport)
从下图可以知道,无论如何扩大窗口,glviewport后的绘图代码,只在定义的左下角400x400区域绘制
这里可以设置矩阵模式:
glMatrixMode (GL_PROJECTION);
创建完视觉范围glviewport以后,在创建gluOrtho2D正交投影或者透视投影坐标之前,必须先装载单位矩阵,不然每次都会依照上一次运算完的矩阵叠加装载,在gl循环里面会不断更改视角,结果回悲剧。
glLoadIdentity ();
然后就是创建投影坐标:
gluOrtho2D (0, w, 0, h);
强制刷新命令
(参考链接:glFlush和glFinish以及SwapBuffer的用法)
glFlush:将GL命令队列中的命令发送给显卡并清空命令队列,发送完立即返回;
glFinish:将GL命令队列中的命令发送给显卡并清空命令队列,显卡完成这些命令(也就是画完了)后返回。
这里就会发现这样一件事情:无论如何,都要等glFinish返回了,如果GPU绘制需要比较多的时间,那么CPU在这里等待的时间就比较可观了,如何提高CPU效率呢?个人认为有两个办法:
1、使用多线程。将更新和渲染作为线程A,辅助性计算如AI策略、**图生成作为线程B。那么当线程A因为glFinish阻塞时,线程B便可以利用CPU进行计算。
2、使用CPU时间预算方法。即先给出一帧所需要的时间预算,在调用glFinish之前判断是否还有多的时间预算,若有多,则先作辅助计算,完成或超过预算时间后才调用glFinish(若此时GPU已经完成命令,就不需要等待了)
重绘制窗口大小声明函数
void reshape (int w, int h){}
重绘制窗口大小注册函数glutReshapeFunc(reshape);
有关该函数无作为的问题,在main函数里面的注册顺序一定不能乱
如果先reshape再createwindow,reshape函数永远也执行不了!
glutReshapeFunc(&reshape);
glutCreateWindow("My firstOpenGL program");
glutDisplayFunc(&myDisplay);
必须这样才可以:
glutCreateWindow("My first OpenGL program");
glutReshapeFunc(&reshape);
glutDisplayFunc(&myDisplay);
___________________________________________________________________________
保持显示图像比例的代码:
#include<GL/freeglut.h>
const double w0=8.0;
const double h0=6.0;
void myDisplay(void){
}
void reshape(int w, inth) {
}
int main(int argc, char *argv[]){
}
效果图如下:
无论如何变化窗口,始终都能显示正确的比例
- OpenGL【1】视图类与鼠标坐标操作
- opengl es 渲染方式与 纹理坐标设定 ,OpenGL ES 模型视图之缩放操作
- Opengl 坐标转换\视图变换
- OpenGL: 实现三维坐标的鼠标拣选
- Opengl三视图的坐标变换
- OpenGL ES 模型视图操作
- opengl鼠标操作(包括滚轮操作)
- OpenGL - 鼠标选择与拾取
- 使用OpenGL实现三维坐标的鼠标拣选
- 使用OpenGL实现三维坐标的鼠标拣选(转)
- 使用OpenGL实现三维坐标的鼠标拣选(转)
- 使用OpenGL实现三维坐标的鼠标拣选(一 )
- 使用OpenGL实现三维坐标的鼠标拣选( 二 )
- 使用OpenGL实现三维坐标的鼠标拣选
- 使用OpenGL实现三维坐标的鼠标拣选(转)
- 使用OpenGL实现三维坐标的鼠标拣选
- 使用OpenGL实现三维坐标的鼠标拣选
- Opengl鼠标点击物体上的交点坐标
- Yii Object和Component
- OpenGL+freeglut使用glutGameModeS…
- Yii Object的配置方法
- 【5】一铭操作系统初体验,更新fir…
- PHP namespace 命名空间
- OpenGL【1】视图类与鼠标坐标操作
- YII事件
- STM32中使用long long 型的数据以及数据的转换
- cpp (c++) 类的多态、继…
- YII事件的级别
- 读IntentService、HandlerThread源码之浅析
- Linux下51单片机编译烧录平台搭建…
- YII访问地址初学(一)
- OpenGL程序巨卡怎么办,可能是glFl…