当前位置:首页 > 我的程序 > 正文内容

linux 下的 opengl SDK。

Peirre6年前 (2020-06-14)我的程序1417

opengl 图形库是开放式图形库,最近出了一个freeglut3 我们下载它:

sudo apt-get install freeglut3

sudo apt-get install freeglut3-dev

已经安装好了。但是如果是初学者,看《OpenGl编程指南(第8版时)》发现书中的例子编译不了。

我们再安装点文件,加上opengl 的一些扩展。

加上 mesa 库

dpkg -i libglu1-mesa_9.0.0-2_amd64.deb

上面这个包在linux mint或图班图系统中,共享库是隐藏的,请找到它。

(可在debina linux 共享库找到)实际是libglu1-mesa  amd64版

sudo apt-get install mesa-utils

sudo apt-get install mesa-common-dev

sudo apt-get install libglu1-mesa-dev

sudo apt-get install libgles2-mesa

sudo apt-get install libgles2-mesa-dev

sudo apt-get install libglapi-mesa

sudo apt-get install libgl1-mesa-glx

加上 GLEW库

sudo apt-get install libglew2.0

sudo apt-get install libglew-dev

sudo apt-get install glew-utils

例子:

c语言例子:

main.c


#include <GL/glut.h>
#include <stdlib.h>
void init();
void display();

int main(int argc, char* argv[])
{
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
        glutInitWindowPosition(0, 0);
        glutInitWindowSize(300, 300);

        glutCreateWindow("OpenGL 3D View");

        init();
        glutDisplayFunc(display);

        glutMainLoop();
        return 0;
}

void init()
{
        glClearColor(0.0, 0.0, 0.0, 0.0);
        glMatrixMode(GL_PROJECTION);
        glOrtho(-5, 5, -5, 5, 5, 15);
        glMatrixMode(GL_MODELVIEW);
        gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);
}

void display()
{
        glClear(GL_COLOR_BUFFER_BIT);

        glColor3f(1.0, 0, 0);
        glutWireTeapot(3);

        glFlush();
}

使用 gcc -o test main.c -lglut -lGL -lGLU 编译成功

Screenshot from 2020-06-14 22-09-11.pnggbbbbb

第二个例子。

C++语言:

triangles.cpp

///////////////////////////////////////////////////////////////////////
//
// triangles.cpp
//
///////////////////////////////////////////////////////////////////////
#include <iostream>
using namespace std;

#include "vgl.h"
#include "LoadShaders.h"

enum VAO_IDs { Triangles, NumVAOs };
enum Buffer_IDs { ArrayBuffer, NumBuffers };
enum Attrib_IDs { vPosition = 0 };

GLuint VAOs[NumVAOs];
GLuint Buffers[NumBuffers];

const GLuint NumVertices = 6;

//---------------------------------------------------------------------
//
// init
//

void
init(void)
{
glGenVertexArrays(NumVAOs, VAOs);
glBindVertexArray(VAOs[Triangles]);

GLfloat vertices[NumVertices][2] = {
    { -0.90, -0.90 }, // Triangle 1
    { 0.85, -0.90 },
    { -0.90, 0.85 },
    { 0.90, -0.85 }, // Triangle 2
    { 0.90, 0.90 },
    { -0.85, 0.90 }
};

glGenBuffers(NumBuffers, Buffers);
glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices),vertices, GL_STATIC_DRAW);

ShaderInfo shaders[] = {
    { GL_VERTEX_SHADER, "triangles.vert" },
    { GL_FRAGMENT_SHADER, "triangles.frag" },
    { GL_NONE, NULL }
};

GLuint program = LoadShaders(shaders);
glUseProgram(program);
glVertexAttribPointer(vPosition, 2, GL_FLOAT,
GL_FALSE, 0, BUFFER_OFFSET(0));
glEnableVertexAttribArray(vPosition);
}
//---------------------------------------------------------------------
//
// display
//
void
display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBindVertexArray(VAOs[Triangles]);
    glDrawArrays(GL_TRIANGLES, 0, NumVertices);
    glFlush();
}

//---------------------------------------------------------------------
//
// main
//

int
main(int argc, char ** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA);
    glutInitWindowSize(512, 512);
//    glutInitContextVersion(4, 3);
    glutInitContextProfile(GLUT_CORE_PROFILE);
    glutCreateWindow(argv[0]);
    if (glewInit()) {
        cerr << "Unable to initialize GLEW ...exiting" << endl;
        exit(EXIT_FAILURE);
    }

init();
glutDisplayFunc(display);
glutMainLoop();
}

编译 gcc -o test triangles.cpp LoadSharders.cpp -lGL -lGLU -lglut -lGLEW -lstdc++

Screenshot from 2020-06-14 22-14-23.png

试运行一下。显卡如果识别不了。屏蔽掉 glutInitContextVersion(4,3);这语句就可以了。

另外《OpenGl编程指南》这书源码中有包含库和包含文件头 拷入当前目录 gcc 编译命令加上 -Iinclude -Llib 参数就可以了。

Screenshot from 2020-06-14 22-18-33.png

运行正常。

有些系统静态编译不通过。

系统会缺失libGL.a这个静态库,用动态库连接就可以了。

这个库应该在/usr/lib/x86_64-linux-gnu下。

如果找不到 #include <GL/glut.h> 文件把 <> 改成 ""

注意命令行的编译开关位置。

================================================

实际上现在出了一个SDL图形库。

sudo apt-get install freeglut3

sudo apt-get install freeglut3-dev

组合

sudo apt-get install libsdl2-doc libsdl2-dev libsdl2-2.0-0

sudo apt-get install libsdl-image1.2 libsdl-net1.2  libsdl-sound1.2 libsdl1.2debian

扩展

sudo apt-get install libsdl2-gfx-doc libsdl2-gfx-dev

这种搭配,配合opengl使用效果不错。

==============================================

还有问题,那系统重装。

如按上所述做不出来请在文章后留言,文章随时更新。



分享给朋友:

相关文章

谈谈引导程序的想法。

谈谈引导程序的想法。

当个人电脑一出现就有了磁盘系统,不管是软盘,光盘,硬盘,计算机要应用操作系统就要引导,引导程序一段代码。这引导代码很小,在第一个磁盘的扇区上,平时没什么人注意它。这段代码损坏一个字节,都会造成计算机瘫...

刚刚上手的一个汇编程序nasm。

刚刚上手的一个汇编程序nasm。

今天使用了masm32软件,总有使不上劲的感觉。因为intel 指令集很多都没有,自己想测试一下,一边翻资料,一边使用。windows 编程好用,但是指令不全,心里总是感觉差一点。又不是编大程序,只是...

编译文件的各种LIB文件分析

编译文件的各种LIB文件分析

玩计算机的都知道,计算机执行的是机器指令。机器指令是手工输入的,后来有了汇编语言。汇编语言很是方便,加了很多辅助符号帮助人们使用机器指令。很多重复的指令功能,就用宏和函数过程来反复使用。后来就有了C语...

六爻,梅花占的卦相排法【软件下载】

六爻,梅花占的卦相排法【软件下载】

周易是古代流传下来的一类文化,源于河图洛书,说明那时的古代人也很聪明,只是聪明的方向不同。有阿拉伯数字表示法真好,古代人没想到。软件下载地址:周易六爻排盘程序及源码_六爻排盘源码-C++文档类资源-C...

Blender 如何建立.mash 和.x文件。(关于Directx 11,OGRE图形库与Blender)

Blender 如何建立.mash 和.x文件。(关于Directx 11,OGRE图形库与Blender)

OGRE图形开发库已经发展很多年了,因为它是免费开源项目,所以使用还很广泛。OGRE图形库应用须要3d图形数据文件,OGRE图形库默认的是.mash 我们有方法制作它。.mash 文件任何3d应用软件...

谈谈计算机的RTC电路和IO编程的汇编指令。

谈谈计算机的RTC电路和IO编程的汇编指令。

这两天在github.com上写代码,出了几个例子。其中有两个汇编语言编的是时钟代码。这两个例子可以显示系统时钟内存的数据内容。一个是利用BIOS的中断,一个是利用DOS中断。这两个汇编程序主要是利用...