C++ 三角形不会出现在opengl中吗?
我可以让Opengl三角形显示出来C++ 三角形不会出现在opengl中吗?,c++,opengl,glfw,C++,Opengl,Glfw,我可以让Opengl三角形显示出来 #include <GL/glew.h> #include <GLFW/glfw3.h> #include <iostream> const char* vertexShaderSource = "#version 330 core\n" "layout (location = 0) in vec3 aPos;\n" "void main()\n" "{\n" " gl_Position = vec4(aPos.x,
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
const char* vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\0";
const char* fragmentShaderSource = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
" FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
"}\n\0";
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
void processInput(GLFWwindow *window) {
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) { glfwSetWindowShouldClose(window, true); }
}
int main()
{
glewExperimental = GL_TRUE;
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* window{ glfwCreateWindow(800,600,"Opengl",NULL,NULL) };
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
glfwMakeContextCurrent(window);
GLenum err = glewInit();
if (glewInit() != GLEW_OK) { std::cout << glewGetErrorString(err); return -1; }
int vertexShader;
vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShader);
int fragmentShader;
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader,1,&fragmentShaderSource,NULL);
glCompileShader(fragmentShader);
int shaderProgram = glCreateProgram();
glAttachShader(shaderProgram,vertexShader);
glAttachShader(shaderProgram,fragmentShader);
glLinkProgram(shaderProgram);
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
float triangle[]{ -0.5f,-0.5f,0.0f,
0.5f,-0.5f,0.0,
0.0f,-0.5f,0.0f };
unsigned int VAO,buffer;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(triangle), triangle, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER,0);
glBindVertexArray(0);
if (window == NULL) {
std::cout << "Window is null";
glfwTerminate();
return -1;
}
while (!glfwWindowShouldClose(window))
{
processInput(window);
glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shaderProgram);
glBindVertexArray(VAO);
glDrawArrays(GL_TRIANGLES,0,3);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
#包括
#包括
#包括
const char*vertexShaderSource=“#版本330核心\n”
“vec3 aPos中的布局(位置=0);\n”
“void main()\n”
“{\n”
“gl_Position=vec4(aPos.x,aPos.y,aPos.z,1.0);\n”
"}\0";
常量字符*fragmentShaderSource=“#版本330核心\n”
“out vec4 FragColor;\n”
“void main()\n”
“{\n”
FragColor=vec4(1.0f,0.5f,0.2f,1.0f);\n
“}\n\0”;
无效帧缓冲区大小回调(GLFWwindow*窗口,整型宽度,整型高度)
{
glViewport(0,0,宽度,高度);
}
无效进程输入(GLFWwindow*窗口){
如果(glfwGetKey(窗口,GLFW_键_转义)=GLFW_按){glfwSetWindowShouldClose(窗口,真);}
}
int main()
{
glewExperimental=GL_TRUE;
glfwInit();
glfwWindowHint(GLFW_上下文_版本_专业,3);
glfwWindowHint(GLFW_上下文_版本_小调,3);
glfwWindowHint(GLFW_OPENGL_配置文件、GLFW_OPENGL_核心配置文件);
GLFWwindow*窗口{glfwCreateWindow(800600,“Opengl”,NULL,NULL)};
glfwSetFramebufferSizeCallback(窗口,帧缓冲区大小回调);
glfwMakeContextCurrent(窗口);
GLenum err=glewInit();
如果(glewInit()!=GLEW_OK){std::cout所有三角形顶点都是,则会生成一个三角形
将第三个点的y坐标向上移动到0.5
对我很有用:
float三角形[]
{
-0.5f,-0.5f,0.0f,
0.5f,-0.5f,0.0f,
0.0f,0.5f,0.0f,
};
总而言之:
#包括
#包括
#包括
常量字符*vertexShaderSource=
“#版本330核心\n”
“vec3 aPos中的布局(位置=0);\n”
“void main()\n”
“{\n”
“gl_位置=vec4(aPos.x,aPos.y,”
“aPos.z,1.0);\n”
"}\0";
常量字符*fragmentShaderSource=
“#版本330核心\n”
“out vec4 FragColor;\n”
“void main()\n”
“{\n”
“FragColor=vec4(1.0f、0.5f、0.2f,”
“1.0f);\n”
“}\n\0”;
无效帧缓冲区大小回调(GLFWwindow*窗口,整型宽度,整型高度)
{
glViewport(0,0,宽度,高度);
}
无效进程输入(GLFWwindow*窗口)
{
如果(glfwGetKey(窗口,GLFW_键_退出)==GLFW_按)
{
glfwSetWindowShouldClose(窗口,真);
}
}
int main()
{
glewExperimental=GL_TRUE;
glfwInit();
glfwWindowHint(GLFW_上下文_版本_专业,3);
glfwWindowHint(GLFW_上下文_版本_小调,3);
glfwWindowHint(GLFW_OPENGL_配置文件、GLFW_OPENGL_核心配置文件);
GLFWwindow*窗口{glfwCreateWindow(800600,“Opengl”,NULL,NULL)};
glfwSetFramebufferSizeCallback(窗口,帧缓冲区大小回调);
glfwMakeContextCurrent(窗口);
GLenum err=glewInit();
如果(glewInit()!=GLEW\u确定)
{
std::cout所有三角形顶点都是三角形,从而形成三角形
将第三个点的y坐标向上移动到0.5
对我很有用:
float三角形[]
{
-0.5f,-0.5f,0.0f,
0.5f,-0.5f,0.0f,
0.0f,0.5f,0.0f,
};
总而言之:
#包括
#包括
#包括
常量字符*vertexShaderSource=
“#版本330核心\n”
“vec3 aPos中的布局(位置=0);\n”
“void main()\n”
“{\n”
“gl_位置=vec4(aPos.x,aPos.y,”
“aPos.z,1.0);\n”
"}\0";
常量字符*fragmentShaderSource=
“#版本330核心\n”
“out vec4 FragColor;\n”
“void main()\n”
“{\n”
“FragColor=vec4(1.0f、0.5f、0.2f,”
“1.0f);\n”
“}\n\0”;
无效帧缓冲区大小回调(GLFWwindow*窗口,整型宽度,整型高度)
{
glViewport(0,0,宽度,高度);
}
无效进程输入(GLFWwindow*窗口)
{
如果(glfwGetKey(窗口,GLFW_键_退出)==GLFW_按)
{
glfwSetWindowShouldClose(窗口,真);
}
}
int main()
{
glewExperimental=GL_TRUE;
glfwInit();
glfwWindowHint(GLFW_上下文_版本_专业,3);
glfwWindowHint(GLFW_上下文_版本_小调,3);
glfwWindowHint(GLFW_OPENGL_配置文件、GLFW_OPENGL_核心配置文件);
GLFWwindow*窗口{glfwCreateWindow(800600,“Opengl”,NULL,NULL)};
glfwSetFramebufferSizeCallback(窗口,帧缓冲区大小回调);
glfwMakeContextCurrent(窗口);
GLenum err=glewInit();
如果(glewInit()!=GLEW\u确定)
{
标准::cout