《OpenGL编程基础》第二章笔记2

本文分享了C++代码实践中的几个关键技巧和注意事项,包括使用glLineStipple绘制虚线、glEdgeFlag控制边线显示,以及CodeBlock编辑器的一些使用心得。通过实例代码展示了如何实现一个简单的三角形绘制,并提供了glLineStipple和glEdgeFlag的详细用法说明。

今天没有什么实质性的内容,第二章中为了讲解glEdgeFlag函数,特别讲了一个拆分三角形的例子,但是其实是展现了一下递归的作用。没有什么特别。

那我今儿干脆把自己这两天笔记里的几块代码拼成一个完整的田地好了:

#include<GL/glut.h> /*Moc Os 应该使用<glut/glut.h> */

void display(){
/*干各种你要干的码农活儿,例如灯光,效果,沙滩,菠菜,加班,等等。。*/
	glClear(GL_COLOR_BUFFER_BIT);//buffer设置为颜色可写

	glBegin(GL_TRIANGLES);//开始画三角形

            glColor3f(1.0,0.0,0.0);//设置第一个顶点为红色
            glVertex2f(-1.0,-1.0);//设置第一个顶点的坐标为(-1.0,-1.0)
            glColor3f(0.0,1.0,0.0);//设置第二个顶点为绿色
            glVertex2f(1.0,-1.0);//设置第二个顶点的坐标为(0.0,-1.0)
            glColor3f(0.0,0.0,1.0);//设置第三个顶点为蓝色
            glVertex2f(0.0,1.0);//设置第三个顶点的坐标为(-0.5,1.0)

	glEnd();//三角形结束
	glFlush();//强制OpenGL将结果呈现到屏幕上。
}
void myReshape(GLsizei w,GLsizei h){
/*大力渲染、鼓吹各种你干了的的码农活儿,例如灯光,效果,沙滩,菠菜,加班,等等。。*/
    glViewport(0,0,w,h);//设置视口
}

/* 主函数*/
int main(int argc, char** argv){

/*在任何glut的方法被调用前,调用这个函数,否则没有种子,袁隆平也救不了你。 */
glutInit(&argc, argv);

/*这里会创建一个标题为“码农标准田”的窗口。就是码农的地了,没有地,好像袁隆平依然救不了你。不知道试管田产量如何。。 */
glutCreateWindow("码农标准田");

/*注册回调,告诉老板领导你都准备干什么 */
/* 参数 display 就是上面那些个灯光沙滩以及加班*/
glutDisplayFunc(display);
glutReshapeFunc(myReshape);

/*glutMainLoop这个函数使程序进入无限循环,不断的展示我们display里的效果、沙滩、纹理、加班,*/
/*直到窗口关闭,田地被摧毁,或者收到其他交互事件。比如按键事件、鼠标事件等老板领导们发放的新需求、新政策等*/
glutMainLoop();

/*因为上面的循环,之后的代码将不会被执行,包括下面的return语句。这是《OpenGL 编程基础》中告诉我的,没有验证,待验证。*/
return 0;

}

田地代码如上。


顺手记录一些tips:

1 glLineStipple(GLint factor, GLushort pattern)函数

该函数作用是按照pattern的模式绘制一条虚线,pattern是一个16位二进制数,对pattern中,每一位如果是1,那么在直线上一个像素的颜色,如果为0,当前像素不填充颜色,例如,当factor的值是1,pattern的值是0x0001, 那么pattern只有最低一位是1其他15位都是0(既0000000000000001)那么,在画线段时,这条线段上,每16个像素只有1一个像素有颜色,也就是说,这个线段的上的每个可以看到的点都相聚15个像素。

再看看factor参数,factor参数的作用是,在按照pattern绘制时,按照pattern的每一位去绘制factor次。比如,还是刚才的例子,当factor的值为2时,会先连续画1x2=2个像素,然后跳过(15x2=30)个像素。就是线段上每2个连续的像素之间间隔30个像素。就好象,线段被放大了一样。

这个函数需要打开OpenGL的点划功能:

glEnable(GL_LINE_STIPPLE);

OpenGL中建议在不许要相应功能时将其关闭:

glDisable(GL_LINE_STIPPLE);

其他功能类似处理。


2 glEdgeFlage(GLboolean flag) 函数

这个函数的作用是,以该函数以后设置的顶点为起点的线段(或边)是否显示。

需要所绘制的多边形为LINE模式:

glPolygonMode(GL_FONT, GL_LINE);

例如

	glBegin(GL_POLYGON);//开始画多边形
        //glShadeModel(GL_FLAT);//设置为光滑明暗模式
        glEdgeFlag(GL_TRUE);//以(-0.5, -0.5)为起点的线段将被显示
        glVertex2f(-0.5, -0.5);

        glEdgeFlag(GL_FALSE);//以(0.5, -0.5)为起点的线段将被显示将不显示
        glVertex2f(0.5, -0.5);

        glEdgeFlag(GL_TRUE);//以(0.0, -0.5)为起点的线段将被显示将显示。如果,注掉这个函数,那么这个顶点也不显示,因为在之前设置过一次glEdgeFlag(GL_FALSE)
        glVertex2f(0.0, 0.5);
	glEnd();//多边形结束
 glPolygonMode(GL_FONT, GL_LINE);//设置多边形模式为LINE模式。


顺带一提,CodeBlock有一些操作上的bug。比如build总是不更新代码,鼠标点击代码编辑框的关闭按钮没有响应等等。。有点小郁闷。。

源码来自:https://pan.quark.cn/s/7a757c0c80ca 《在Neovim中运用Lua的详尽教程》在当代文本编辑器领域,Neovim凭借其卓越的性能、可扩展性以及高度可定制的特点,赢得了程序开发者的广泛青睐。 其中,Lua语言的融入更是为Neovim注入了强大的活力。 本指南将深入剖析如何在Neovim中高效地运用Lua进行配置和插件开发,助你充分发挥这一先进功能的潜力。 一、Lua为何成为Neovim的优选方案经典的Vim脚本语言(Vimscript)虽然功能完备,但其语法结构与现代化编程语言相比显得较为复杂。 与此形成对比的是,Lua是一种精简、轻量且性能卓越的脚本语言,具备易于掌握、易于集成的特点。 因此,Neovim选择Lua作为其核心扩展语言,使得配置和插件开发过程变得更加直观和便捷。 二、安装与设置在Neovim中启用Lua支持通常十分简便,因为Lua是Neovim的固有组件。 然而,为了获得最佳体验,我们建议升级至Neovim的最新版本。 可以通过`vim-plug`或`dein.vim`等包管理工具来安装和管理Lua插件。 三、Lua基础在着手编写Neovim的Lua配置之前,需要对Lua语言的基础语法有所掌握。 Lua支持变量、函数、控制流、表(类似于数组和键值对映射)等核心概念。 它的语法设计简洁明了,便于理解和应用。 例如,定义一个变量并赋值:```lualocal myVariable = "Hello, Neovim!"```四、Lua在Neovim中的实际应用1. 配置文件:Neovim的初始化文件`.vimrc`能够完全采用Lua语言编写,只需在文件首部声明`set runtimepath^=~/.config/nvim ini...
基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不使用机械式位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估算与控制。文中结合STM32 F4高性能微控制器平台,采用如滑模观测器(SMO)、扩展卡尔曼滤波(EKF)或高频注入法等先进观测技术,实现对电机反电动势或磁链的实时估算,进而完成磁场定向控制(FOC)。研究涵盖了控制算法设计、系统建模、仿真验证(可能使用Simulink)以及在嵌入式平台上的代码实现与实验测试,旨在提高电机驱动系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电机控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师;熟悉C语言和MATLAB/Simulink工具者更佳。; 使用场景及目标:①为永磁同步电机驱动系统在高端制造、新能源汽车、家用电器等领域提供无位置传感器解决方案的设计参考;②指导开发者在STM32平台上实现高性能FOC控制算法,掌握位置观测器的设计与调试方法;③推动电机控制技术向低成本、高可靠方向发展。; 其他说明:该研究强调理论与实践结合,不仅包含算法仿真,还涉及实际硬件平台的部署与测试,建议读者在学习过程中配合使用STM32开发板和PMSM电机进行实操验证,以深入理解控制策略的动态响应与鲁棒性问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值