#version 330和之间有什么区别#version 330 core?
请问core怎么回事?
我目前正在解析与.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) 换句话说,是否有任何GPU不支持OpenGL,而是支持其他图形渲染库,如DirectX,OpenCl.
我一直在尝试从两个不同的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中绘制一个简单的正方形时,我得到一个完全黑屏.在创建缓冲区之前调用这些方法:
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 …
我在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':语法错误:语法错误
我正在尝试从看起来像这样的文件中读取顶点和片段着色器
#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) 我正在使用一个带有一堆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,并且它(如果是这样,如何)读取缓冲区?
我用构建了opencv cmake -DWITH_OPENGL=ON ..,但是cmake的输出告诉我支持的OpenGL是NO。
而且我已经检查了cmake缓存以确保WITH_OPENGLis是ON。
使用的GUI是GTK + 3.0,并且已安装libgtkglext1-dev。
这是所有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位置?