OpenGL初学--环境配置和视景体初步接触

本学期选了门选修计算机图形学,写openGL时暂时没看到啥方便的文档,顺带记一点笔记,平台是Visual studio 2015

OpenGL安装和配置

GLUT3.7下载地址:

http://www.opengl.org/resources/librarie...

这里我是在windows平台下用vs开发工具 点击Other GLUT Information/Downloads的Pre-compiled Win32 for Intel GLUT 3.7 DLLs for Windows 95 & NT

下载好以后解压,里面可以得到5个文件

其中的.h文件放到VS的安装目录下include文件里: E:\Visual Studio\VC\include

.lib文件放在和include同级的lib目录下: E:\Visual Studio\VC\lib

dll文件放到C:\Windows\System32下 如果是64位系统的话还要放在C:\Windows\SysWOW64下一份

之后在项目中使用#include<glut.h>导入就可以使用openGL了

OpenGL简单使用

示例代码:

#include<glut.h>
#include<Windows.h>
void init();
void mydisplay() 
{ 


    glClearColor(0, 255, 0, 0.5);

    glClear(GL_COLOR_BUFFER_BIT); 
    glViewport(0, 0, 100, 100);
    glBegin(GL_POLYGON); 
    glColor3f(1.0, 1.0, 1.0);
    glVertex2f(-0.5, -0.5); 
    //此处的0.5是相对于视景体而言的,如果视景体是-1到1的话(默认视景体),那么此处     将呈现出一个居中的正方
    //但是由于我设置的是glOrtho(0, 1.0, 0, 1.0, -1.0, 1.0);所以此处的正方形会占据左下角的位置
    glVertex2f(-0.5, 0.5);        
    glVertex2f(0.5, 0.5);        
    glVertex2f(0.5, -0.5);    
    glEnd(); 
    glFlush(); 
    
    glViewport(0, 0, 100, 50);
    glBegin(GL_POLYGON);
    glColor3f(1.0, 0, 1.0);
    glVertex2f(-0.25, -0.25);
    glVertex2f(-0.25, 0.25);
    glVertex2f(0.25, 0.25);
    glVertex2f(0.25, -0.25);
    glEnd();
    glFlush();
} 
int main(int argc, char** argv) 
{   
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);


    int screen_width = GetSystemMetrics(SM_CXSCREEN); 
    int screen_height = GetSystemMetrics(SM_CYSCREEN);
    int cw_width = 100;
    int cw_height = 100;
    glutInitWindowSize(cw_width, cw_height);
    glutInitWindowPosition(screen_width/2-cw_width/2, screen_height/2-cw_height/2);
    glutCreateWindow("Timo");


    glutDisplayFunc(mydisplay);    
    init();
    glutMainLoop(); 
}

void init() 
{
    glClearColor(0, 0, 0, 0.5);
    glColor3f(1.0, 1.0, 1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 1.0, 0, 1.0, -1.0, 1.0);
    //glOrtho的作用是设置视景体,可以认为是拍制片时,镜头里能出现的部分。
    //我们可以看作使用openGL时我们的创作空间是无限大的,然后glOrtho则是在无限的空间里截取了一部分用于创作,
    在前几个参数不设置的情况下,默认截取的区域是x:-1到1
    y:-1到1

    //gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
    
    
    
}

程序运行结果如下:

一点笔记

遇到的几个疑惑目前自己得到的答案是:

1.glClearColor和glClear

glClearColor(0, 0, 0, 0.5)的作用是确定用来刷整个背景的颜色和透明度 在运行 glClear(GL_COLOR_BUFFER_BIT);时会执行刷新操作,清除之前的缓存,所以在运行这个函数之后之前的显示都会被覆盖掉

2.glOrtho和glViewport和glutInitWindowSize

把整个空间看作是无限大的风景,glOrtho相当于拍照取景,glViewport相当于把照片按照某个规格拉伸打印,然后用相框框起来放在指定的位置 其中glViewport前两个参数单位都是像素,坐标原点在创建的window的左下角 window可以看坐是一面墙,然后再上面制定位置放了个指定大小的glViewPort相框,再在相框里放了一张照片。照片所展示的风景的区域则取决于视景体的设置

3.glColor3f的使用

我们可以把每一组glBegin和glEnd之间的内容看作一次作画流程,这样的话,glColor3f相当于给这次作画的画笔上色,如果多次上色,那么实际颜色是最后一次上色的结果。 并且在新的作画流程中如果没有进行上色操作,那么实际颜色是上一轮作画时的最后一次上色。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据小魔方

ggplot2多维分面多图层对应规则

今天只给大家讲一个知识点,是属于ggplot2高阶用法中的分面与多图层关系如何对应,这个用法之前困扰我很久,也是最近帮朋友做东西才发现这个漏洞,于是感觉分享给大...

3314
来自专栏hotqin888的专栏

microstation vba起步——建立实体

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

1213
来自专栏前端杂货铺

不要使用浏览器嗅探,尽量使用特性检测和特性模拟

平淡的描述   在js中,能使用特征监测就尽量不要使用浏览器嗅探。嗅探浏览器目的是判断可否使用这个对象或者API,但是抛开浏览器 的各个版本的userAgent...

3055
来自专栏macOS 开发学习

Mac开发跬步积累(四):ImageIO解析Gif 图像数据

这里可以看到Gif 是保存了多幅图像的一个图像文件,有了这个基础认识,我们就可以使用代码来解析Gif图像了.

1123
来自专栏Rainbond开源「容器云平台」

你问我爱你有多深,源码代表我的心

1854
来自专栏程序员宝库

爬虫攻防之前端策略简析

文章里介绍了几个大的网站,在反爬虫过程中,采取的各式各样的策略,无不体现出前端工程师的奇葩脑洞。

1582
来自专栏生信宝典

图像处理R包magick学习笔记

作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源

1252
来自专栏UAI人工智能

RLLAB 入门

3973
来自专栏非典型技术宅

Quartz2D进行渲染1. 渲染模式2. even-odd rule:奇偶填充规则3. nonzero winding number rule:非零绕数规则4. 其他会用到的渲染模式5. 混合模式

1243
来自专栏程序员互动联盟

【专业技术】Win32 SDK编程:我们如何输出文本

在使用Win32编程时,我们常常需要输出文本到窗口上,Windows所有的文本字符或者图形输出都是通过图形设备接口(GDI)进行的,Windows的三大组件之一...

3745

扫码关注云+社区

领取腾讯云代金券