code::blocks代码及信息回顾

2024年元旦了,回顾整理下Code::blocks相关信息。

Code::blocks目前是信奥指定的NOI Linux上的C++IDE。
信奥官网

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

以前NIO指定的IDE是Dev-CPP,但是那个Dev-CPP调试代码补全很弱,dev太老旧了。
目前code::blocks(简称cbks)在Linux环境下国内外开发者很多,有很多git的开源项目
也提供cbks环境下得cmakes。

Windows应用程序开发visual studio用起来方便傻瓜的很按linus说法,背着开发者做了很多事,显然开发者
对Computer的掌控力被Windows削弱了,WIN不是给程序员是给用户开发的OS,Linux下面常用的Code::Blocks,
Qt Creator没有VS方便,补全弱一些,甚至shell下面命令行g++,但是像C++在偏科研及底层系统和工业
硬件开源的库github上Linux基本是主流,很多Win版本其实是移植来的, 事实上Linux C++及相关IDE是Programmer
的母语环境。

code::blocks在win上开发要下载的20.03, 地址 https://www.codeblocks.org/downloads/binaries/
在这里插入图片描述
下载上面的codeblocks-20.03mingw-nosetup.zip,这个zip只有168M,解压后不用安装,自带mingw
code::blocks配置freeglut网上有很多博客,主要是设置include,lib路径,指定lib
打开下面的buid options…
在这里插入图片描述
link setting, 如下设置lib的名称
在这里插入图片描述
search directoreis->Compiler设置include的路径,由于freeglut放在代码目录,所以这里是相对路径
在这里插入图片描述
linker设置lib路径
在这里插入图片描述
freeglut.dll拷贝到exe同目录下,也可以设置到 setting->Compiler->ToolChain executable->Additional Path
下面设置freeglut.dll所在的路径
在这里插入图片描述

放在lanzou的代码地址:freeglut-exam00
一个是把网上国外博主的vboCube的例子代码移过来了,主要是展示怎么opengl扩展使用vbo
和shader的代码
在这里插入图片描述

另一个是曲柄摇杆机构的动画仿真,其实显示只是用到直线glBegin-glEnd对就是opengl2.0以前的老旧API
但是demo和测试用起来非常方便。
在这里插入图片描述
动画代码直接备份到CSDN上, vmath来自opengl red book


#include <GL/glut.h>
#include <iostream>
#include <vector>
#include "vmath.h"


//
//    n1      n2
//
//  n0           n3
class QBYG_Model
{
public:
    std::vector<vmath::dvec2> nodes;
    double g01;
    double g12;
    double g23;

    void init();

    void step(double si);

    void draw();
};

namespace vmath
{

bool cir_cir_int(vmath::dvec2& a, double r, vmath::dvec2& b, double R,
    vmath::dvec2& intv0, vmath::dvec2& intv1)
{
    //
    //       v0
    //
    //  a          b
    //
    //       v1

    vmath::dvec2 xv = b - a;
    double s = vmath::length(xv);

    if (s > (r+R))
    {
        return false;
    }

    xv /= s;
    vmath::dvec2 yv(-xv[1], xv[0]);

    double cos_A = (r*r+s*s-R*R) / (2.0*r*s);
    double m = cos_A*r;
    double n = sqrt(r*r-m*m);
    intv0 = a + xv*m + yv * n;
    intv1 = a + xv*m - yv * n;

    return true;
}

};

static QBYG_Model s_model;


void QBYG_Model::init()
{
    nodes.push_back(vmath::dvec2(0,10));
    nodes.push_back(vmath::dvec2(30,0));
    nodes.push_back(vmath::dvec2(80,60));
    nodes.push_back(vmath::dvec2(100,0));

    g01 = vmath::length(nodes[1] - nodes[0]);
    g12 = vmath::length(nodes[2] - nodes[1]);
    g23 = vmath::length(nodes[3] - nodes[2]);
}



void QBYG_Model::step(double si)
{
    //
    //    b:1      c:2
    //
    //  a:0           d:3
    double l_ab_x = g01 * cos(si);
    double l_ab_y = g01 * sin(si);

    vmath::dvec2 v_ab(l_ab_x, l_ab_y);
    nodes[1] = nodes[0] + v_ab;

    vmath::dvec2 p0, p1;
    if (vmath::cir_cir_int(nodes[1], g12, nodes[3], g23, p0, p1))
    {
        nodes[2] = p0;

        //std::cout << "    g12 = " <<g12 <<"\n";
        //double l_12 = vmath::length(nodes[2] - nodes[1]);
        //std::cout << "    l12 = " <<l_12 <<"\n";
    }
}

void QBYG_Model::draw()
{


	glColor3d(0.1, 0.1, 0.1);
    glBegin(GL_LINE_STRIP);

    for (int i = 0; i < nodes.size(); i++)
    {
        glVertex2f(nodes[i][0], nodes[i][1]);
    }
    glEnd();
}

static void resize(int width, int height)
{
    const float ar = (float) width / (float) height;

    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    double rt = 0.05;
    double l = -width*0.5;
    double r = width*0.5;
    double b = -height*0.5;
    double t = height*0.5;
    l*=rt;
    r*=rt;
    b*=rt;
    t*=rt;

    glFrustum(l,r,b,t, 5.0, 100.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity() ;

}

static void display(void)
{
    static double si = 0;

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    si = si + 1.5;
    if (si > 360.0)
    {
        si -= 360.0;
    }
    double si_grad = (si / 180.0) * M_PI;
    //std::cout << "si = " << si << "\n";

    glLoadIdentity();
	glTranslated(-30, -20, -20.0);

    // compute qubingyaogan nodes
    s_model.step(si_grad);

    // draw qubingyaogan
    s_model.draw();


    glutSwapBuffers();
}

static void idle()
{
    glutPostRedisplay();
}

int main(int argc, char *argv[])
{
    s_model.init();

    glutInit(&argc, argv);
    glutInitWindowSize(800, 600);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("freeglut demo");

    glutReshapeFunc(resize);
    glutDisplayFunc(display);
    glutIdleFunc(idle);

    glClearColor(1,1,1,1);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);

    glEnable(GL_LIGHT0);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    glutMainLoop();

    return 0;
}
Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境.   相比于基于Delphi的Dev-C++共享C++IDE,Code::Blocks是开放源码软件。Code::Blocks由纯粹的C++语言开发完成,它使用了蓍名的图形界面库wxWidgets(2.6.2 unicode)版。对于追求完美的C++程序员,再也不必忍受Eclipse的缓慢,再也不必忍受VS.NET的庞大和高昂的价格。   虽然Code::Blocks从一开始就追求跨平台目标,但是最初的开发重点是Windows系统下的版本,从06年3月21日版本:1.0 revision 2220开始,Code::Blocks在它的每日构建中正式提供Linux版本(分两个版本:ubuntu.deb和fc4.rpm)。这样 Code::Blocks在1.0发布时就会是跨越平台的C/C++IDE,它将支持Windows和Linux的主要版本。长期以来C++开发员在Linux没有好用、通用的C++ IDE的局面就要结束。而这个IDE对于Windows下的用户同样重要,由于它开放源码的特点,Windows用户可以不依赖于VS.NET,编写跨平台C++应用。   Code::Blocks提供了许多工程模板,这包括:控制台应用、DirectX应用、动态连接库、FLTK应用、GLFW应用、Irrlicht工程、OGRE应用、OpenGL应用、QT应用、SDCC应用、SDL应用、SmartWin应用、静态库、Win32 GUI应用、wxWidgets应用、wxSmith工程,另外它还支持用户自定义工程模板。在wxWidgets应用中选择UNICODE支持中文。   Code::Blocks支持语法彩色醒目显示,支持代码完成(目前正在重新设计过程中)支持工程管理、项目构建、调试。   Code::Blocks支持插件,目前的插件包括代码格式化工具AStyle;代码分析器;类向导;代码补全;代码统计;编译器选择;复制字符串到剪贴板;调试器;文件扩展处理器;Dev-C++ DevPak更新/安装器;DragScroll,源码导出器,帮助插件,键盘快捷键配置,插件向导;To-Do列表;wxSmith;;wxSmith MIME插件;wsSmith工程向导插件;WindowsXP外观。   Code::Blocks具有灵活而强大的配置功能,除支持自身的工程文件、C/C++文件外,还支持AngelScript、批处理、CSS文件、D语言文件、Diff/Patch文件、Fortan77文件、GameMonkey脚本文件、Hitachi汇编文件、Lua文件、MASM汇编文件、Mathlab文件、NSIS开源安装程序文件、Ogre Compositor脚本文件、Ogre Material脚本文件、OpenGL Shading语言文件、Python文件、Windows资源文件、XBase文件、XML文件、nVidia cg文件。识别Dev-C++工程、MS VS 6.0-7.0工程文件,工作空间、解决方案文件。   Code::Blocks基于wxWidgets开发,正体现了wxWidgets的强大。以前Borland C++ Builder X宣称基于wxWidgets开发跨平台、兼容性好、最优秀的C++ IDE环境,但没有实现;现在Code::Blocks+GNU GCC正在实现这个理想。让我们拭目以待。国内的Code::Blocks爱好者和跨平台开发员应该尽快建立中文Code::Blocks网站,提供Code::Blocks中文化支持,促进Code::Blocks在国内的发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值