OpenGL三角形不渲染
OpenGL triangle not rendering
我已经在C 中编写了一些OpenGL代码,以将红色三角形渲染到屏幕上。该程序使用OpenGL 3.3和GLSL版本330。我已经缩小了对几个.cpp类文件或我的GLSL代码不起作用的代码。我没有编译器或链接器错误(我确实会收到一些链接警告,但我认为这些警告并不重要(。我在我认为是错误发生的地方的代码中给出了代码。
Renderer.cpp:
#include "Renderer.h"
#include <GL/glew.h>
void Renderer::render(int vbo){
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
}
ShaderProgram.cpp
#pragma warning(disable:4101)
#include "ShaderProgram.h"
#include <fstream>
#include <sstream>
ShaderProgram::ShaderProgram(std::string vertexLocation, std::string fragmentLocation){
programID = glCreateProgram();
vertexID = glCreateShader(GL_VERTEX_SHADER);
fragmentID = glCreateShader(GL_FRAGMENT_SHADER);
createShader(vertexID, vertexLocation);
createShader(fragmentID, fragmentLocation);
glLinkProgram(programID);
GLint success;
glGetProgramiv(programID, GL_LINK_STATUS, &success);
if (success == 0) {
GLchar ErrorLog[1024];
glGetProgramInfoLog(programID, sizeof(ErrorLog), nullptr, ErrorLog);
fprintf(stderr, "Error linking shader program: '%s'n", ErrorLog);
}
glValidateProgram(programID);
glUseProgram(programID);
}
void ShaderProgram::createShader(GLint shaderID, std::string srcLocation){
const std::string shaderText = loadShaderSource(srcLocation);
const GLchar* shaderSource = shaderText.data();
glShaderSource(shaderID, 1, &shaderSource, nullptr);
glCompileShader(shaderID);
GLint success;
glGetShaderiv(shaderID, GL_COMPILE_STATUS, &success);
if (!success) {
GLchar InfoLog[1024];
glGetShaderInfoLog(shaderID, sizeof(InfoLog), nullptr, InfoLog);
fprintf(stderr, "Error compiling shader: '%s'n", InfoLog);
}
glAttachShader(programID, shaderID);
}
std::string ShaderProgram::loadShaderSource(std::string location){
std::ifstream file (location);
std::string source;
std::stringstream stringStream;
if (!file.is_open()){
throw std::runtime_error("Could not open file " + location);
}
stringStream << file.rdbuf();
source = stringStream.str();
return source;
}
entity.cpp
#include "Entity.h"
Entity::Entity(){
vertices[0] = glm::vec3(-1.0f, -1.0f, 0.0f);
vertices[1] = glm::vec3(1.0f, -1.0f, 0.0f);
vertices[2] = glm::vec3(0.0f, 1.0f, 0.0f);
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDisableVertexAttribArray(0);
}
int Entity::getID(){
return vbo;
}
GLSL代码:
顶点着色器:
#version 330
layout (location = 0) in vec3 position;
void main(){
gl_Position = vec4(0.5 * position.x, 0.5 * position.y, position.z, 1.0);
}
碎片着色器:
#version 330
out vec4 colour;
void main(){
colour = vec4(1.0, 0.0, 0.0, 1.0);
}
您不能使用glm :: vec3这样的参考。对它没有任何帮助。
glm::vec3 k;
float* t= &k[0];
,但我怀疑您也可以做一些值得的事情。
使用float glfloat阵列。
相关文章:
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- OpenGL绘制三角形而不是正方形
- OpenGL程序不显示三角形
- 在 OpenGL 中使用三角形绘制字母?
- OpenGL 4.5 直接状态访问呈现三角形 - GL_INVALID_VALUE
- 为什么这个在 opengl 中绘制三角形的着色器没有多次运行
- Opengl三角形基准
- OpenGL - 每个三角形的像素数不正确
- 无法使用现代 OpenGL 渲染基本三角形
- OpenGL GLSL 纹理函数始终返回 vec4(1,1,1,1),白色三角形
- OpenGL不会绘制三角形,遵循确切的格式
- 使用 C++ 库 GLEW 在 openGl 中绘制一个红色三角形
- 如何使用OpenGL在屏幕上显示三角形
- 用SFML和OpenGL显示白色三角形
- 用OpenGL绘制三角形
- OpenGL三角形不渲染
- 未显示 OpenGL 三角形
- OpenGL绘制三角形只有白色
- 使用 OpenGL 绘制基本三角形
- 在OpenGL中打印一个红色三角形