标签: opengl

#version 330和#version 330核心有什么区别?

#version 330和之间有什么区别#version 330 core

请问core怎么回事?

opengl glsl

0
推荐指数
1
解决办法
3209
查看次数

.MTL在OpenGL中的基本用法

我目前正在解析与.obj文件关联的.mtl文件。我可以正确地渲染模型,但是如何使用.mtl文件?我应该将其值发送到哪里?如何使用?当前,在OpenGL中找不到使用.mtl文件的任何内容。他们只是展示他们如何解析它。

编辑:这是在OpenGL中的方法。我还创建了自己的OBJ解析器。请注意,代码只是为您简化了我的工作方式而缩短了。

GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);

GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, cc * sizeof(GLfloat), v, GL_STATIC_DRAW);

GLuint tcbuffer;
glGenBuffers(1, &tcbuffer);
glBindBuffer(GL_ARRAY_BUFFER, tcbuffer);
glBufferData(GL_ARRAY_BUFFER, tcc * sizeof(GLfloat), vt, GL_STATIC_DRAW);

GLuint ncbuffer;
glGenBuffers(1, &ncbuffer);
glBindBuffer(GL_ARRAY_BUFFER, ncbuffer);
glBufferData(GL_ARRAY_BUFFER, ncc * sizeof(GLfloat), vn, GL_STATIC_DRAW);

glEnableVertexAttribArray(m_vert);
glBindBuffer(GL_ARRAY_BUFFER, vbufferid);
glVertexAttribPointer(m_vert, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(m_texcoord);
glBindBuffer(GL_ARRAY_BUFFER, tcbufferid);
glVertexAttribPointer(m_texcoord, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(m_color);
glBindBuffer(GL_ARRAY_BUFFER, cbufferid);
glVertexAttribPointer(m_color, 4, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(m_vertexnormal);
glBindBuffer(GL_ARRAY_BUFFER, ncbufferid);
glVertexAttribPointer(m_vertexnormal, 3, GL_FLOAT, GL_FALSE, 0, 0);

glDrawArrays(GL_TRIANGLES, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl

0
推荐指数
1
解决办法
5250
查看次数

OpenGL处理​​器是独立的吗?

换句话说,是否有任何GPU不支持OpenGL,而是支持其他图形渲染库,如DirectX,OpenCl.

opengl directx gpu opencl

0
推荐指数
1
解决办法
97
查看次数

OpenGL交错的VBO - 如何在Scala中获取sizeof(Float)?

我一直在尝试从两个不同的VBO切换到只有一个具有交错属性的VBO.我可以在C++中实现它,但在Scala中它证明是非常困难的.

这是我的实现:

class Mesh(positions: Array[Float], textureCoordinates: Array[Float], indices: Array[Int])
{
    // Create VAO, VBO and a buffer for the indices
    val vao: Int = glGenVertexArrays
    val vbo: Int = glGenBuffers
    val ibo: Int = glGenBuffers

    setup

    private def setup(): Unit =
    {
        val interleavedBuffer: FloatBuffer = prepareFloatBuffer(positions ++ textureCoordinates)
        val indicesBuffer: IntBuffer = prepareIntBuffer(indices)

        // One VAO to bind them all!
        glBindVertexArray(vao)
          glBindBuffer(GL_ARRAY_BUFFER, vbo)
          glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo)

          // Fill buffers with data
          glBufferData(GL_ARRAY_BUFFER, interleavedBuffer, GL_STATIC_DRAW)
          glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, GL_STATIC_DRAW)

          // Set vertex …
Run Code Online (Sandbox Code Playgroud)

opengl scala sizeof lwjgl opengl-3

0
推荐指数
1
解决办法
330
查看次数

OpenGL索引VBO渲染

在尝试在OpenGL中绘制一个简单的正方形时,我得到一个完全黑屏.在创建缓冲区之前调用这些方法:

glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glOrtho(0.0f, windowX, windowY, 0.0f, 1000.0f, 0);
Run Code Online (Sandbox Code Playgroud)

我正在创建缓冲区,如下所示:

std::vector<unsigned int> indices;
std::vector<unsigned int> vertices;    

vertices.push_back(0);
vertices.push_back(0);
vertices.push_back(0);

vertices.push_back(100);
vertices.push_back(0);
vertices.push_back(0);

vertices.push_back(100);
vertices.push_back(100);
vertices.push_back(0);

vertices.push_back(0);
vertices.push_back(100);
vertices.push_back(0);


indices.push_back(0);
indices.push_back(1);
indices.push_back(2);

indices.push_back(2);
indices.push_back(3);
indices.push_back(0);

glGenBuffers(1, &verticesbuffer);
glBindBuffer(GL_ARRAY_BUFFER, verticesbuffer);
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(vertices[0]), &vertices[0], GL_STATIC_DRAW);

glGenBuffers(1, &indicesbuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indicesbuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(indices[0]), &indices[0], GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)

显示功能:

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

glBindBuffer(GL_ARRAY_BUFFER, verticesbuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indicesbuffer);
glVertexPointer(3, GL_INT, 0, &vertices[0]);

glColor3f(1, 0, 0);

glEnableClientState(GL_VERTEX_ARRAY);

glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, &indices[0]);

glDisableClientState(GL_VERTEX_ARRAY);

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
Run Code Online (Sandbox Code Playgroud)

我已经开始使用AMD GPU …

c++ opengl vbo

0
推荐指数
1
解决办法
269
查看次数

OS上的OpenGL:shader将无法编译

我在IOS上使用OpenGL ES上的bevor,但现在我想在操作系统上尝试自己的OpenGl.我有测试的基本着色器,但不知怎的,它不会编译?有什么我需要了解的OpenGl,那里有什么不同.

这里着色器:

attribute vec4 position;
attribute vec2 texCoord;
attribute vec3 normal;


varying lowp vec2 vTexCoord;

uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
uniform mat3 normalMatrix;

void main()
{
    vTexCoord = texCoord;

    gl_Position = projectionMatrix*modelViewMatrix * position;
}
Run Code Online (Sandbox Code Playgroud)

分段:

uniform sampler2D uSampler;

varying lowp vec2 vTexCoord;

void main()
{
    lowp vec4 texCol = texture2D(uSampler, vTexCoord);

    gl_FragColor = vec4(texCol.rgba);
}
Run Code Online (Sandbox Code Playgroud)

出现的错误是:

错误:0:9:'vec2':语法错误:语法错误

opengl shader operating-system glsl

0
推荐指数
1
解决办法
257
查看次数

从文件中读取GLSL着色器

我正在尝试从看起来像这样的文件中读取顶点和片段着色器

#version 330 core
in vec3 ourColor;

out vec4 color;

void main()
{
    color = vec4(ourColor, 1.0f);
}
Run Code Online (Sandbox Code Playgroud)

但是当我正在编译着色器时,我得到的错误就像'语法错误'. 在此输入图像描述

从文件中读取着色器代码的代码

const GLchar* readFromFile(const GLchar* pathToFile)
{
    std::string content;
    std::ifstream fileStream(pathToFile, std::ios::in);

    if(!fileStream.is_open()) {
        std::cerr << "Could not read file " << pathToFile << ". File does not exist." << std::endl;
        return "";
    }

    std::string line = "";
    while(!fileStream.eof()) {
        std::getline(fileStream, line);
        content.append(line + "\n");
    }

    fileStream.close();
    std::cout << "'" << content << "'" << std::endl;
    return content.c_str();
}
Run Code Online (Sandbox Code Playgroud)

c++ opengl visual-studio-2012

0
推荐指数
1
解决办法
2239
查看次数

OpenGL如何填充缓冲区并将其读回?

我正在使用一个带有一堆GLfloats的OpenGL缓冲区作为顶点缓冲区,一切都很顺利.GLfloats的格式是[x1, y1, z1, x2, y2, z2, ...].

但是,在遵循本教程的同时,它告诉我使用glm::vec3:

glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(GLfloat), &vertices[0], GL_STATIC_DRAW);

glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)

现在这段代码是有效的,我想知道OpenGL如何知道如何用glm :: vec3而不是GLfloats填充缓冲区.然后我想知道,当我从缓冲区读回数据时,使用:

std::vector<glm::vec3> data;
glGetBufferSubData(mTarget, offset, vertexCount * sizeof(glm::vec3), &data[0]);`
Run Code Online (Sandbox Code Playgroud)

这会产生一堆glm :: vec3吗?所以问题是,OpenGL如何填充缓冲区glm::vec3,并且它(如果是这样,如何)读取缓冲区?

c++ opengl buffer glm-math

0
推荐指数
1
解决办法
476
查看次数

在LMDE2(Debian 8.2)上使用OpenGL和GTK构建OpenCV 3.0

我用构建了opencv cmake -DWITH_OPENGL=ON ..,但是cmake的输出告诉我支持的OpenGL是NO

而且我已经检查了cmake缓存以确保WITH_OPENGLis是ON

使用的GUI是GTK + 3.0,并且已安装libgtkglext1-dev

gtk opengl opencv3.0

0
推荐指数
1
解决办法
899
查看次数

GL_COLOR_BUFFER_BIT重新生成哪个内存?

这是所有libgdx应用程序可能具有的代码:

Gdx.gl.glClearColor( 1, 0, 0, 1 );
Gdx.gl.glClear( GL20.GL_COLOR_BUFFER_BIT );
Run Code Online (Sandbox Code Playgroud)

要么

Gdx.gl.glClear(GL20.GL_DEPTH_BUFFER_BIT);
Run Code Online (Sandbox Code Playgroud)

这将设置颜色,屏幕将被刷新(第一行)而不是刷新它(第二行).但这是什么意思GL20.GL_COLOR_BUFFER_BIT?从我得到的文档中,GL是一个包含OpenGL ES 2.0所有方法的接口,它就在那里我可以调用方法.这个意思GL_COLOR_BUFFER_BIT让我感到困惑.它应该重新生成当前为彩色写入启用的内存......是否意味着它会擦除所有图像?它会擦除ShapeRenderer对象吗?屏幕上的任何内容都不是彩色写入的一部分,并且在使用此常量时不会被删除?GL_DEPTH_BUFFER_BIT是否会擦除纹理的Z位置?

opengl libgdx

0
推荐指数
1
解决办法
884
查看次数